1000万行のC ++コードをC ++ 14標準に(そしてC ++ 17に)変換した方法

少し前(2016年の秋)に、次のバージョンの1C:エンタープライズテクノロジープラットフォームを開発するときに、コードで新しいC ++ 14標準をサポートすることについて開発チーム内で疑問が生じました。 予想どおり、新しい標準への移行により、多くのことをよりエレガントに、簡単に、より確実に記述できるようになり、コードのサポートとメンテナンスが簡素化されます。 そして、コードベースの規模とコードの特定の機能のためでなければ、翻訳には特別なものはないようです。



知らない人のために、1C:Enterpriseは、異なるプラットフォームとDBMSで実行するためのクロスプラットフォームビジネスアプリケーションとランタイムの迅速な開発のための環境です。 一般的に、製品の構成には以下が含まれます。





可能な限り、異なるOSに対して1つのコードを記述しようとします-サーバーのコードベースは合計99%、クライアントベースは約95%です。 技術プラットフォーム1C:エンタープライズは主にC ++で記述されており、以下はコードのおおよその特性です。





そして、この経済はすべてC ++ 14に移行する必要がありました。 これをどのように行ったのか、その過程で何に遭遇したのかについてお話します。



画像



免責事項



低速/高速動作について以下に記載されているすべての(さまざまなライブラリの標準クラスの実装による大量のメモリ消費は)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).



:



  1. ( ).
  2. Copy On Write. , / .


, STLPort stream ( ), 20%. Boost. Boost stream, , API (, ), , stream. , , Boost.





C++14 :



  1. STLPort C++14. , .. STLPort 2010 , .
  2. STL, C++14. , Windows Linux.
  3. .


- .



; 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).



All Articles