我们如何将1000万行C ++代码转换为C ++ 14标准(然后转换为C ++ 17)

前一段时间(2016年秋天),当开发下一版本的1C:企业技术平台时,开发团队就出现了有关在我们的代码中支持新的C ++ 14标准的问题。 如我们所期望的,向新标准的过渡将使我们能够更优雅,更简单,更可靠地编写许多东西,从而简化了代码的支持和维护。 而且,即使不是出于代码库的规模和我们代码的特定功能,翻译中也没有什么特别之处。

对于那些不了解的人,1C:企业环境是快速开发跨平台业务应用程序和运行时的环境,以便在不同的OS和DBMS中执行它们。 一般而言,该产品包括:

  • Application Server Cluster ,可在Windows和Linux上运行
  • 通过http(s)或使用其自己的二进制协议与服务器一起工作的客户端可在Windows,Linux,macOS上运行
  • 在Chrome,Internet Explorer,Microsoft Edge,Firefox,Safari(使用JavaScript编写)中运行的Web客户端
  • 开发环境( Configurator ),可在Windows,Linux,macOS上运行
  • 在Windows,Linux,macOS上运行的应用程序服务器管理工具
  • 通过http连接到服务器的移动客户端可在运行Android,iOS,Windows的移动设备上使用
  • 移动平台 -一种用于创建脱机移动应用程序的框架,该框架具有同步功能,可在Android,iOS和Windows上运行
  • 1C:用Java编写的企业开发工具
  • 互动服务器

我们尝试为不同的操作系统编写尽可能多的代码-服务器代码库总计占99%,客户端代码库约占95%。 技术平台1C:企业主要使用C ++编写,以下是代码的大致特征:

  • 一千万行C ++代码,
  • 14000个文件
  • 6万课
  • 半百万种方法。

而且所有这些经济因素都必须转移到C ++ 14。 我们将讨论如何做到这一点以及在过程中遇到的问题。

图片

免责声明


下面关于慢速/快速操作(不是)在各种库中实现标准类的实现会消耗大量内存的所有事情都意味着一件事:这对美国而言是正确的。 标准实现可能最适合您的任务。 我们从任务开始:我们为客户获取典型数据,在其上运行典型方案,查看性能,消耗的内存量等,并分析结果是否适合我们和我们的客户。 并采取行动。

我们有什么


最初,我们在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).

Source: https://habr.com/ru/post/zh-CN429678/


All Articles