知らない人のために、1C:Enterpriseは、異なるプラットフォームとDBMSで実行するためのクロスプラットフォームビジネスアプリケーションとランタイムの迅速な開発のための環境です。 一般的に、製品の構成には以下が含まれます。
- Application Server Cluster 、WindowsおよびLinuxで実行
- http(s)または独自のバイナリプロトコルを使用してサーバーと連携するクライアントは、Windows、Linux、macOSで動作します
- Chrome、Internet Explorer、Microsoft Edge、Firefox、Safariで実行されているWebクライアント (JavaScriptで記述)
- 開発環境( Configurator )、Windows、Linux、macOSで実行
- Windows、Linux、macOSで実行されるアプリケーションサーバー管理ツール
- http(s)経由でサーバーに接続するモバイルクライアントは、Android、iOS、Windowsを実行しているモバイルデバイスで動作します
- モバイルプラットフォーム -Android、iOS、Windowsで実行する同期機能を備えたオフラインモバイルアプリケーションを作成するためのフレームワーク
- 1C: Javaで書かれたエンタープライズ開発ツール
- 対話サーバー
可能な限り、異なるOSに対して1つのコードを記述しようとします-サーバーのコードベースは合計99%、クライアントベースは約95%です。 技術プラットフォーム1C:エンタープライズは主にC ++で記述されており、以下はコードのおおよその特性です。
- 1000万行のC ++コード、
- 14,000個のファイル
- 6万クラス
- 50万のメソッド。
そして、この経済はすべてC ++ 14に移行する必要がありました。 これをどのように行ったのか、その過程で何に遭遇したのかについてお話します。
![画像](https://habrastorage.org/getpro/habr/post_images/c44/6e2/0da/c446e20da16d596833a49dafd914f189.jpg)
免責事項
低速/高速動作について以下に記載されているすべての(さまざまなライブラリの標準クラスの実装による大量のメモリ消費は)1つのことを意味します。これは米国に当てはまります。 標準実装がタスクに最適である可能性があります。 私たちはタスクから始めました。顧客の典型的なデータを取得し、典型的なシナリオを実行し、パフォーマンス、消費メモリ量などを調べ、結果が私たちと顧客に合っているかどうかを分析しました。 そして行動した。
持っていたもの
最初に、Microsoft Visual Studioで1C:Enterprise 8プラットフォームのコードを作成しました。 プロジェクトは2000年代初頭に始まり、Windows専用のバージョンがありました。 当然、それ以来、コードは積極的に開発されており、多くのメカニズムが完全に書き直されています。 しかし、コードは1998年の標準に従って記述されており、たとえば、次のようにコンパイルが正常に渡されるように、右山かっこはスペースで区切られています。
vector<vector<int> > IntV;
2006 , 8.1, Linux STLPort. . std::wstring, wchar_t. Windows 2 , Linux 4 . , . gcc , wchar_t 2 , , .. glibc, 4- wchar_t. , - , . , last but not least, . , .. .
, 2000- . , Facebook, Facebook , (. folly).
:
- ( ).
- Copy On Write. , / .
, STLPort stream ( ), 20%. Boost. Boost stream, , API (, ), , stream. , , Boost.
C++14 :
- STLPort C++14. , .. STLPort 2010 , .
- STL, C++14. , Windows Linux.
- .
- .
; libc++, Windows. libc++ Windows, — , , , , libc++ POSIX API.
.
, STLPort (Visual Studio 2015 Windows, gcc 7 Linux, clang 8 macOS).
, , , , , , . 10 000 ( 14 000). wchar_t char16_t; wchar_t, .. char16_t 2 Windows Linux.
. , STLPort , . , .
, , . .
( 20-30%) ( 10-15%) . , , . , .
: ( ) std::map std::set . . , , – ( STLPort). Boost, , .
, , , , Windows-. , 2017 ( 8.3.11 1:) .
++14 6 . ( ) , , — UI, , ..
. , 1: 8.3.14 ( , ) ++17.
. STL std, std , stdx – , , boost – boost. , .
«» (move constructors) . , STL (, capacity ).
, , ( ) — obj-, 60 – 70 . , . , , , . . , . , , . unity build (, , Google Chrome).