Vor einiger Zeit (im Herbst 2016), als die nächste Version der 1C: Enterprise-Technologieplattform entwickelt wurde, stellte sich im Entwicklungsteam die Frage, ob der neue
C ++ 14- Standard in unserem Code unterstützt werden soll. Der erwartete Übergang zu einem neuen Standard würde es uns ermöglichen, viele Dinge eleganter, einfacher und zuverlässiger zu schreiben, was die Unterstützung und Wartung des Codes vereinfacht. Und es scheint nichts Außergewöhnliches in der Übersetzung zu geben, wenn nicht die Größe der Codebasis und die spezifischen Merkmale unseres Codes.
Für diejenigen, die es nicht wissen, ist 1C: Enterprise eine Umgebung für die schnelle Entwicklung plattformübergreifender Geschäftsanwendungen und die Laufzeit für deren Ausführung in verschiedenen Betriebssystemen und DBMS. Im Allgemeinen umfasst das Produkt:
- Application Server Cluster , läuft unter Windows und Linux
- Der Client , der mit dem Server über http (s) oder über ein eigenes Binärprotokoll arbeitet, funktioniert unter Windows, Linux und MacOS
- Webclient unter Chrome, Internet Explorer, Microsoft Edge, Firefox und Safari (in JavaScript geschrieben)
- Entwicklungsumgebung ( Konfigurator ), läuft unter Windows, Linux, MacOS
- Verwaltungstools für Anwendungsserver, die unter Windows, Linux und MacOS ausgeführt werden
- Ein mobiler Client , der über http (s) eine Verbindung zum Server herstellt, funktioniert auf mobilen Geräten mit Android, iOS und Windows
- Mobile Plattform - ein Framework zum Erstellen mobiler Offline-Anwendungen mit der Möglichkeit zur Synchronisierung unter Android, iOS und Windows
- 1C: Enterprise Development Tools , geschrieben in Java
- Interaktionsserver
Wir versuchen, so viel wie möglich einen Code für verschiedene Betriebssysteme zu schreiben - die Servercodebasis beträgt insgesamt 99%, die Clientbasis ungefähr 95%. Technologieplattform 1C: Enterprise ist hauptsächlich in C ++ geschrieben und die folgenden sind ungefähre Merkmale des Codes:
- 10 Millionen Zeilen C ++ - Code,
- 14 Tausend Dateien
- 60 Tausend Klassen
- eine halbe Million Methoden.
Und all diese Wirtschaft musste auf C ++ 14 übertragen werden. Wir werden darüber sprechen, wie wir dies getan haben und was uns dabei begegnet ist.

Haftungsausschluss
Alles, was unten über langsamen / schnellen Betrieb, (nicht) großen Speicherverbrauch durch Implementierungen von Standardklassen in verschiedenen Bibliotheken geschrieben wird, bedeutet eines: Dies gilt für uns. Möglicherweise sind Standardimplementierungen für Ihre Aufgaben am besten geeignet. Wir gingen von unseren Aufgaben aus: Wir haben die typischen Daten für unsere Kunden genommen, typische Szenarien für sie ausgeführt, die Leistung, den Speicherbedarf usw. untersucht und analysiert, ob diese Ergebnisse zu uns und unseren Kunden passen oder nicht. Und gehandelt.
Was wir hatten
Zunächst haben wir den Code für die 1C: Enterprise 8-Plattform in Microsoft Visual Studio geschrieben. Das Projekt begann in den frühen 2000er Jahren und wir hatten eine Version nur für Windows. Seitdem der Code aktiv entwickelt wurde, wurden natürlich viele Mechanismen komplett neu geschrieben. Der Code wurde jedoch gemäß dem Standard von 1998 geschrieben, und beispielsweise wurden die rechtwinkligen Klammern durch Leerzeichen getrennt, damit die Kompilierung erfolgreich durchgeführt werden konnte:
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).