
Mikhail Matrosov ( mmatrosov ) ist ein führender Entwicklungsingenieur im Moskauer Forschungs- und Entwicklungsbüro von Align Technology. Seine Spezialisierung ist sehr ungewöhnlich - er entwickelt ein spezielles CAD-System für die Konstruktion kieferorthopädischer Geräte.
Mikhail nimmt seit der ersten Konferenz an C ++ Russland teil. In diesem Jahr wird er auf der C ++ Russia 2019 Piter einen Vortrag zum Thema „Qualifiers, Qualifiers and Templates“ halten . Sie können ihn auch in den Kursen von Yandex "Grundlagen der C ++ - Entwicklung: Brauner Gürtel" und "Grundlagen der C ++ - Entwicklung: Schwarzer Gürtel" bei Coursera kennen, an deren Erstellung Michael mitverfasst hat.
Die Konferenz steht bereits vor der Tür, aber jetzt ein Interview mit Mikhail, in dem wir seine Arbeit bei Align Technology, die Migration von Legacy-Code, die Erstellung von Online-Kursen und Berichten sowie die Funktionen von C ++ diskutierten. Fragen wurden von Pavel Filonov (Programmkomitee C ++ Russland) und Oleg Chirukhin (Journalist der JUG Ru Group) gestellt.
An der Schnittstelle von Technologie und Medizin
Pavel: Sagen Sie mir, was Ihre Firma tut.
Michael: Align Technology ist ein Pionier und Marktführer in der sauberen Kieferorthopädie. Dies ist so etwas, das jetzt auf der ganzen Welt anstelle von Zahnspangen gemacht wird. Wenn früher ein Metalldraht zum Richten der Zähne platziert wurde und sie damit liefen, setzen Sie stattdessen transparente Kunststoff-Mundschützer (Liner) auf, die für jeden Patienten individuell angefertigt werden. Kürzlich habe ich die Produkte unserer Firma an mir selbst getestet, ein sehr lustiges Gefühl!
Pavel: Also hast du so ein Hundefutter, ja, es stellt sich heraus?
Michael: Ja, irgendwie. Wenn Sie es nicht wissen, ist es sehr schwierig zu bemerken, dass sich die Person in den Liner befindet. Es sei denn, es treten zunächst aus Gewohnheit kleine Sprachfehler auf, die jedoch selbst schwer zu bemerken sind.
Pavel: Und womit hat C ++ zu tun, worüber wir heute viel sprechen werden?
Michael: Gute Frage. Als das Unternehmen noch in den Kinderschuhen steckte, nahmen zwei fröhliche Pakistaner einen speziellen Kunststoff (ich weiß nicht, woher sie ihn fanden) auf, der ungiftig und inert sein sollte mit Speichel und anderen Substanzen im Mund.
Dann nahmen sie ein Modell des Kiefers des Patienten, das sie sehr lange zu tun wussten. Um beispielsweise Kronen herzustellen, wurde einer Person ein Bissen von etwas wie einem speziellen Plastilin gegeben. Es gab einen Zahnguss, der mit Material gefüllt war. Also haben sie eine Kopie des Kiefers bekommen und Plastik darauf gezogen (irgendwie haben sie es aufgewärmt), und das Mundstück ist fertig. Das heißt, dieser gesamte Markt war vor buchstäblich 20 Jahren völlig analog.
Jetzt das Produktionsvolumen in der Region von 300-400 Tausend Liner pro Tag (bitte bewerten Sie die Skala). Dies sind gigantische Hersteller, daher sind sie vollständig automatisiert.
Um einen Liner zu erstellen, drucken wir auf einer speziellen 3D-Druckerform. Dies ist in der Tat eine Kopie des Kiefers des Patienten während der Behandlung. Wir modellieren, wie der Kiefer in einer Woche, zwei Monaten, einem Jahr und einem Jahr aussehen wird. Dann starten wir den Tiefziehprozess - wir nehmen ein Plastikband, erhitzen es und ziehen es auf die Form. Schneiden Sie ab und holen Sie sich eine Plastikfolie.
Im Moment wirft noch niemand Patienten und sie verwenden dreidimensionale Intraoralscanner. Wir haben Leute, die das in einem nahe gelegenen Büro machen. Dies ist wahrscheinlich der „Wow-Teil“ unserer Produktion. Dort führt in Echtzeit eine spezielle Düse entlang der Backe und baut ihre Form auf. Informationen werden auf die Server des Unternehmens hochgeladen, verarbeitet und an unsere Spezialisten (Techniker) gesendet. Sie können den Scan bearbeiten und Rauschen entfernen.
Anschließend ist die Behandlung in einem speziellen CAD-System geplant. Dies ist eine sehr komplizierte Sache, weil niemand weiß, was der richtige Biss ist. Jeder Arzt hat seine eigene Meinung zu diesem Thema. Wir arbeiten derzeit daran, Behandlungsansätze zu formalisieren, aber dies ist noch nicht in Arbeit.
Aber zurück zu C ++. Es gibt zum Beispiel ein solches Problem. Formen werden auf einem speziellen 3D-Drucker unter Verwendung der Laserstereolithographietechnologie gedruckt. Es gibt eine große Wanne mit einer speziellen Photopolymerflüssigkeit. Sie leuchten mit einem Laser darauf und es härtet aus. Zuerst leuchten sie ganz unten auf dem gedruckten Modell, dann etwas höher, sogar noch höher usw. Und so erscheint in der Flüssigkeit ein festes Modell in Schichten von unten nach oben.
Das Drucken einer Form nach der anderen wäre unpraktisch. Der Bottich ist ziemlich groß und man kann ungefähr hundert Formen hineinlegen. Sie müssen jedoch kompakt angeordnet sein. Die Form der Form ähnelt einem Hufeisen - das heißt, nicht konvex und ziemlich komplex. Und sie sind alle unterschiedlich. Es stellt sich als interessante Aufgabe heraus, ein Rechteck mit komplexen Figuren zu kacheln.
Hier in diesem Video können Sie anhand des angegebenen Zeitstempels sehen, wie es aussieht.
Dies ist nur ein Beispiel, es gibt viele Aufgaben.
Pavel: Ihre Beschreibungen sind wie Hightech-Berechnungen. Sprachen wie Fortran haben sich in der Vergangenheit gut behauptet. Zumindest können Sie die Echos noch sehen. Warum genau C ++?
Michael: Nun, nicht Fortran, es wäre sehr mächtig. Zu Beginn der Entwicklung war das Hauptprodukt dieses sehr spezialisierte CAD-System - eine Desktop-Anwendung für Windows. Daher wurde eine Sprache für ein effizientes Rechnen und gleichzeitig für die Entwicklung der Anwendung selbst benötigt. Zu dieser Zeit gab es nicht viel Auswahl - nur C ++.
Jetzt haben wir einen Zoo mit Sprachen: JavaScript und TypeScript für das Web, Java für mobile Anwendungen, Go für Server, Python für die Automatisierung und viele kleine Dinge. Grundsätzlich ein Standardstapel. Und in wissenschaftsintensiven und rechenintensiven Anwendungen bleibt C ++ erhalten.
Je höher die Position, desto breiter der Horizont.
Pavel: Sie haben Ihre Position als leitender Ingenieur erwähnt. Und so bemerkte ich eine solche Fremdheit. Wenn ein unerfahrener C ++ - Entwickler aus Ihrem Unternehmen gefragt würde, was er tue, würde er sagen, dass er eine Art Super-Framework basierend auf Vorlagen erstellt, die auf Booststage basieren und den Serverausgleich durchführen, und Technologien würden sofort abfallen.
Wenn Sie gefragt werden, was Ihr Unternehmen tut, beginnt eine ganze Geschichte über das Geschäft: Wo ist das Geld, warum ist es wichtig usw. Korreliert das irgendwie mit Ihrer Position? Wie ist diese Sicht auf Prozesse, Technologien, Werkzeuge?
Michael: Ja vielleicht. Aber außerdem wird es nicht jedem klar sein, wenn ich sofort anfange zu erzählen, wie ich Bäume überquere (obwohl ich es nicht selbst mache). Zum Beispiel können Jungs von Yandex, Kaspersky Lab, mit Technologie beginnen, weil jeder seine Produkte kennt. Wir sprechen über Liner, über die eine kleine Anzahl von Menschen Bescheid weiß. Daher ist es notwendig zu erklären, was es ist.
In Bezug darauf, wie dies mit dem Beitrag korreliert. In meiner Klasse muss ich zumindest die Elemente unseres Workflows aktueller Systeme verstehen, die zusammenarbeiten. Wenn sich etwas ändert, kann dies die Produktion, den Standort der Ärzte und die Schnittstelle beeinflussen, mit der Techniker, Ärzte und Geschäftsanalysten interagieren. Das heißt, ja, es gibt eine Korrelation. Mit dem Wachstum der Note müssen Sie besser sehen, was im Unternehmen passiert.
Pavel: Haben Sie darüber nachgedacht, wie sich die Einführung neuer Technologien, beispielsweise im Zusammenhang mit C ++, auf den Workflow auswirken würde? Nur wenige Menschen sehen sich neue Funktionen der Sprache an. Und wenn nicht, erzählen Sie uns, wie Sie kürzlich Tools implementiert haben.
Michael: Ich kann mich nicht ohne weiteres an C ++ erinnern. Wenn wir die Tools nehmen, ist das letzte, was wir vermasselt haben, ein Cloud-basiertes Protokollierungssystem. Wir verwenden speziell Splunk dafür. Ursprünglich befand sich die Plattform unter dem Desktop, und die Migration in die Cloud ist jetzt in vollem Gange. Daher legen wir insbesondere die Cloud-basierte Protokollierung fest. Unser Manager lernte schnell, Anfragen zu stellen, schöne Dashboards zu erstellen und Echtzeitdiagramme anzuzeigen. Ich war sehr zufrieden Ich schickte es an alle und sagte: Sehen Sie, wie wir die Betriebszeit eines so komplexen Algorithmus variieren. Was ist der Grund? Sie begannen zu verstehen, wir stellten fest, dass wir fast kein Multithreading für Testagenten haben. Es wird ständig etwas eingeführt.
C ++, Legacy, plattformübergreifend und alles, alles, alles
Oleg: Verstehe ich richtig, dass Sie Rendering im Browser haben?
Michael: Ja, das gibt es.
Oleg: Browsertechnologien ändern sich ständig. Beeinflusst es irgendwie? Zum Beispiel die neue JS, Shading Language , so ähnlich.
Michael: Es wirkt sich aus, aber hier ist es etwas langweilig. In Bezug auf das Rendern ist die Szene ziemlich einfach. Wir haben keine unglaublichen Spezialeffekte.
Pavel: Gut. Sie sagten jedoch, Sie hätten mit einer Desktop-Anwendung begonnen, bei der C ++ die beste Lösung war, die alle Vorteile vereint. Als das Geschäft mit dem Produkt zu wachsen begann, begannen Sie, andere Plattformen zu entwickeln. Ein Teil des Codes ging an den Browser, ein Teil an das Backend, ein Teil an Mobiltelefone. Ist der „positive“ Kern auf allen Plattformen geblieben?
Michael: Die Umstellung auf andere Plattformen begann vor zwei Jahren, und für unsere Skala ist dies eine kurze Zeit. Daher war unsere erste Cloud-Lösung ein Desktop-Monolith, von dem grob gesagt die grafische Benutzeroberfläche abgeleitet wurde. Vor ungefähr anderthalb Jahren haben wir den bedingten Kernel und die Bindung um ihn herum isoliert, sodass wir ihn bereits unter Linux kompilieren und ausführen konnten. Es war ein großer Durchbruch. Linux war uns vor allem deshalb wichtig, weil Cloud-Linux-Maschinen viel billiger sind.
Jetzt wollen wir den Rechenkern in C ++, in dem alle komplexen Berechnungen stattfinden, von der Geschäftslogik trennen, die beschreibt, was zu tun ist und in welcher Reihenfolge, woher der Fall stammt, welche Art von Produkt, was der Arzt zu tun hat und was nicht und das ist alles
Pavel: Sie haben wahrscheinlich bereits eine Roadmap für diesen Prozess, da Sie so gut darüber sprechen.
Michael: Wir haben viele Male versucht, eine Roadmap zu erstellen. Wir verstehen, wo wir uns unter Berücksichtigung der 20 Jahre des Vermächtnisses bewegen können (Sie können nicht mit einem halben Dollar dorthin gelangen, müssen Sie überlegen).
Die Interaktion positiver Projekte erfolgt nun auf einfache Weise. Von diesen sind es die C ++ - Schnittstellen, die hervorstechen, sodass sie nur zusammenkommen, um sicherzustellen, dass es einen Compiler gibt. Insgesamt rund 250 Projekte, die jeweils in eine eigene dynamische Bibliothek gehen. Und wir kombinieren sie auf unterschiedliche Weise für bestimmte Aufgaben.
Ungefähr 10 Teams arbeiten am System. Jedes Team rekrutiert eine Teilmenge dieser Projekte, normalerweise 50-70. Jetzt bewegen wir uns in die Richtung, in der einige Dienste auf ihrer Basis erstellt werden. Wir definieren eine strikte API für den Dienst (basierend auf Protobuf oder etwas anderem) und erstellen ein Standardschema für die Interaktion zwischen Diensten. Es ist schwierig, den Prozess als Trennung von Berechnung und Logik zu bezeichnen, aber dies sind die ersten Versuche zur Komponentisierung.
Mein Team und einige andere haben bereits damit begonnen. Sie spüren sofort, wie viel lustiger es ist, wenn Sie einen Monolithen nicht aus 250 Projekten, sondern aus nur 70 Projekten sammeln. Und es gibt keine Situation mehr, in der jemand ein anderes Modul geändert hat, das mit scheinbar völlig unabhängigen Dingen interagiert, und etwas kaputt gegangen ist . Es hat eine coole psychologische Wirkung. Und während wir versuchen, uns von einem gesunden Desktop-Monolithen zu lösen, indem wir unseren Diensten bedingt 10 kleine Monolithen zuweisen.
Pavel: Und während dieses Prozesses haben Sie nicht darüber nachgedacht, ob die Module, deren Laden in irgendeiner Form versprochen wird, ihm auf einer der Ebenen helfen können?
Michael: Es war dieser Prozess und der Linux-Migrationsprozess, bei dem Conan uns geholfen hat. Wir hatten ein ernstes Problem mit der Verwaltung von Drittanbietern. Ich habe darüber gesprochen, wie wir Conan auf der C ++ Russia 2019 in Moskau eingesetzt haben.
Die "Plus" -Module würden helfen, einige Probleme mit der Kompilierungszeit zu lösen, wo tatsächlich alles begann, warum jeder die Module so will. Die Wiederverwendung der positiven Module für die Interaktion mit dem Dienst ist dumm, da sie zu Recht auf einer sprachunabhängigen Ebene (protobuf) kommunizieren. Vielleicht könnten wir eine Komponentisierung durchführen und unsere 250 Projekte nicht jedes Mal aus der Quelle erstellen, sondern sie in Conans Pakete packen. Und wenn zum Beispiel das Falten von DLLs aus bestimmten Gründen unpraktisch ist, ist das Zusammenbauen zu Modulen eine Option.
Ich kann jedoch nicht sagen, dass wir auf eine Funktion warten, die unseren Entwicklungsansatz ändern wird.
Pavel: Sie haben erwähnt, dass Conan Ihnen bei der Lösung von Paketverwaltungsproblemen hilft. Meiner Meinung nach hat die C ++ - Community vor ungefähr 3 Jahren nur darüber gesprochen. Die ersten Berichte erschienen, die ersten Voraussetzungen. Und jetzt sagen Sie, dass es bereits in der Produktion funktioniert.
Erzählen Sie uns von Ihren Erfahrungen mit der Projektentwicklung. War der Übergangsprozess schmerzhaft und es wert?
Michael: Auf jeden Fall wert. Wir sind mit Conan zufrieden. Es gibt einige Mängel, aber das Verwalten von Abhängigkeiten in C ++ ist eine sehr schwierige Aufgabe. Daher ist es offensichtlich, dass es kein einfaches Werkzeug geben wird, um es zu lösen.
Mit Conan und dem Prozess haben wir ein Gleichgewicht zwischen Aufgaben- und Lösungskomplexität erreicht. Wir sagten anfangs: „Okay, wir möchten solche und viele Sätze von Compilern und Konfigurationen hervorheben, dann standardmäßig dynamische Bibliotheken (anstatt statische) erstellen, bestimmte kleine Einschränkungen festlegen“ und begannen, innerhalb dieser Einschränkungen ein System zu erstellen. Wir haben eine Wiki-Seite „So erstellen Sie ein Conan-Rezept für eine Bibliothek“, die alle Besonderheiten unseres Systems berücksichtigt. Die Seite ist ziemlich groß und nicht sehr einfach. Aber auch hier haben wir ein Gleichgewicht der Komplexität erreicht, daher bin ich mit dem Übergang zufrieden.
Pavel: Übrigens wird Piter Denis Panin von NVIDIA hier auf der kommenden C ++ Russia 2019 über die von vcpkg vertretene Alternative sprechen . Wäre es für Sie interessant, zum Bericht zu gehen und zu hören, wie sie sich in anderen Tools verhalten?
Michael: Ja, das wäre interessant. Ich habe vcpkg ein bisschen benutzt, aber meiner Meinung nach gibt es in vcpkg sehr wenig Flexibilität. Und ich kann mir nicht vorstellen, wie wir ein System mit unseren Anforderungen auf der Basis von vcpkg erstellen könnten. Wenn ich jedoch schnell eine Bibliothek nehmen und testen muss, lade ich sie nicht herunter und lese die Build-Anweisungen. Dort müssen Sie angeben, wie Abhängigkeiten registriert werden sollen. Dies ist alles Papierkorb. Ich werde sehen, ob es in den vcpkg-Ports ist. Wenn ja, dann sagen Sie es schnell und experimentieren Sie damit. Wenn alles in Ordnung ist, werde ich ein Conan-Rezept für sie schreiben.
Pavel: Fahren wir mit der Einführung neuer Tools und Ansätze fort. Sind Sie auf die Tatsache gestoßen, dass Ingenieure mit brennenden Augen von einer Konferenz rennen, auf der ihnen von einer neuen coolen Sache erzählt wurde und sie diese in das Projekt einfügen möchten? Wie reagieren Sie normalerweise auf solche Dinge? Oder greifen Sie nach jeder Konferenz zurück?
Michael: Es gibt einfach eine großartige Geschichte. Als ich gerade anfing, in der Firma zu arbeiten, haben sie eine Funktion geschrieben, und es war notwendig, eine Konfiguration dafür vorzunehmen. Darüber hinaus kann ein Feature mehrere verschiedene Versionen haben, und die Werte bestimmter Eigenschaften können zwischen verschiedenen Versionen durchsucht werden. Und ich habe mir ein cooles YAML-basiertes Schema ausgedacht, bei dem Eigenschaften vererbt und neu definiert wurden. Er schrieb es ungefähr eine Woche lang und deckte es mit Tests ab. Und ganz am Anfang kam der Manager auf mich zu und sagte: "Hören Sie, Michael, vielleicht müssen Sie jetzt keine Zeit verschwenden und ein so flexibles Schema erstellen?" Aber er konnte mich nicht überzeugen. Meine Augen waren zu verbrannt.
Nach ein paar Jahren schaue ich mir diesen Code an und verstehe nicht, warum es so schwierig war. Das passiert, aber zum Glück bin ich seitdem schlauer geworden. Darüber hinaus sind Entwickler in der Regel sehr rationale Menschen, mit denen Sie sprechen können.
Früher war es so, dass jemand zweifelhafte Entscheidungen von Dritten traf. Es ist unklar, von wem sie entwickelt werden. Das letzte Update war vor 5 Jahren. Es wurde nicht überprüft, ob es unter Linux funktioniert. Sie generieren Berichte in einem proprietären Format, das Sie in nichts konvertieren können. Und wir sitzen und verstehen nicht, was wir als nächstes tun sollen. Die meisten dieser Drittanbieter wurden vor vielen Jahren hinzugefügt, aber es passiert, dass jetzt etwas Ähnliches passiert.
Aus diesem Grund haben wir uns eine ziemlich einfache Sache ausgedacht - eine Checkliste von Drittanbietern. Wenn Sie einen Drittanbieter ziehen möchten, gehen Sie einfach die Checklistenelemente durch: plattformübergreifend, Support-Level, Lizenz, welche Analoga, Entwicklungs-Support-Level (wie viele Betreuer unterstützen, welche Community). Alle Punkte sind offensichtlich, aber es gibt ziemlich viele davon. Wenn Sie einen Drittanbieter eingeben, werden Sie sich nicht sofort an alles erinnern. Die Situation ist besser geworden, und wir beobachten, was hinzugefügt wird.
Es ist auch cool, dass es früher einfach war, einen Drittanbieter zu ziehen und zusammenzubauen, beispielsweise nur in einer Version unter "Windows" und 32 Bit. Im Prinzip gibt es keine solche Möglichkeit, da Sie sie in Conan einfügen müssen. Und wenn Sie einen Drittanbieter einbeziehen, müssen Sie sicherstellen oder explizit angeben, dass dies in einer bestimmten Konfiguration nicht der Fall ist. Dank dessen wurde der linke Dritte viel weniger hinzugefügt.
Oleg: Und was ist mit dem Dritten, der sehr wenig lebt? Zum Beispiel ein linkes Pad aus JavaScript. Er geht auf Ihre Checkliste. Es wird häufig von Paketen aktualisiert, gepflegt und erstellt.
Michael: So etwas gibt es nicht. In C ++ ist ein Drittanbieter normalerweise eine dicke Sache. Und Lösungen von Drittanbietern, die kleine Funktionen ausführen, werden nicht verwendet. In C ++ ist es nicht so einfach, Drittanbieter hinzuzufügen. Und dies ist nicht JS, in dem jeder sein eigenes Modul hat.
Wir haben unter bestimmten Bedingungen 80 Drittanbieter gezogen, von denen ich die Hälfte noch nie gesehen habe. Oder eine Art höllische Geometrie, die vor 15 Jahren an einer Universität geschrieben wurde, und wir haben sie.
Oleg: Mit Conan ist es einfach, einen Drittanbieter hinzuzufügen.
Michael: Conan ist einfacher, aber immer noch weit entfernt von demselben Python, in dem Sie Pip Install schreiben und fertig sind. C ++ hat ein sehr komplexes Ökosystem: verschiedene Betriebssysteme, Compiler, Toolchain, Bibliotheken, Standards. Die meisten Bibliotheken bieten eine Reihe von Optionen.
Sie fragen uns gerne: "Warum schreibst du deine Bibliotheksrezepte, nimmst sie aber nicht aus dem Conan-Zentrum?" Ich habe von dort aus regelmäßig nach Rezepten gesucht, aber sie passen nicht zu uns. Uns geht es besser. Zum Beispiel kümmern sich unsere Rezepte um Debit-Symbole und fügen den darin enthaltenen Quellen eine Bindung hinzu. Wenn Sie also vom Debugger aus Visual Studio eine Bibliothek eines Drittanbieters erhalten, werden die Quellen automatisch geladen.
Also mit Conan ist es viel besser, aber immer noch weit entfernt von der Bequemlichkeit anderer Sprachen.
Oleg: Gibt es irgendwelche Fehler in Conan selbst, die ich korrigieren möchte?
Michael: Ja, es gibt Nachteile, aber technische.
Conan verfügt über Methoden, die bedingt für das Generieren von Paketen und das Verbinden der generierten Pakete mit Ihrer Lösung verantwortlich sind. Ideologisch sind dies zwei verschiedene Phasen, und ich kann eine ändern, ohne die andere zu ändern. Wenn ich die Art und Weise ändere, wie Pakete verbunden sind, möchte ich keine Binärpakete neu generieren, da diese genau gleich sind. Sie können dies in Conan nicht tun, da das Rezept eine Entität ist. Wenn Sie das Rezept geändert haben, müssen Sie formal die Version ändern und neue Binärdateien generieren, was unpraktisch ist.
Merkmale des Übergangs zu neuen Standards
Pavel: Reden wir über neue Standards. Darüber hinaus hat Ihr Produkt bereits eine gewisse Geschichte.
Jetzt kommen wir zur Konferenz, wo sie uns alle drei Jahre über neue wundervolle Funktionen berichten. Zum Beispiel wird es bei C ++ Russia 2019 Piter drei Berichte über bevorstehende Änderungen in der Sprache geben. Haben Sie Erfahrung mit der Migration der alten Codebasis, die den alten Standards entsprach, auf das, was angeboten wurde oder angeboten wird?
Mikhail: Ja, ich hatte eine solche Erfahrung und habe auf der C ++ Russia 2019 ein wenig darüber gesprochen. Wir hatten eine Migration von Visual Studio 2013 zu Visual Studio 2017 und gcc, dh wir haben gleichzeitig Linux-Unterstützung hinzugefügt und Compiler von Microsoft aktualisiert.
Die Probleme im Code waren im Vergleich zu organisatorischen, technischen, Infrastrukturproblemen, CI und dem Rest der Optimierung viel geringer. Und unsere Probleme im Code betrafen hauptsächlich UB, das nach der Aktualisierung des Compilers zu feuern begann. Zwar verbreitet C ++ Rot seit Jahren abwärtskompatibel, aber es hilft. Jetzt kompilieren wir alles unter C ++ 17.
Vorings werden nicht synchronisiert, wenn Entwickler unter Windows sammeln, in CI pushen und erst danach beginnen, sich unter Linux zusammenzusetzen. Es gab jedoch keine wesentlichen Probleme.
In C ++ 17 wurden einige veraltete Dinge entfernt, aber wir haben nur wenige Stunden damit verbracht, sie auszuschneiden. Beispielsweise verwendete die log4cplus-Bibliothek std :: auto_ptr in Headern, wurde jedoch in neuen Versionen bereits durch std :: unique_ptr ersetzt, sodass es ausreichte, die Bibliothek einfach zu aktualisieren.
Die Umstellung auf den neuen Standard war also relativ schmerzlos. Angesichts der Größe unserer Codebasis bin ich überrascht, auf wie wenige Probleme wir gestoßen sind.
Über den braunen und schwarzen Gürtel in C ++
Pavel: Sie und ich sprechen bereits über die bestehenden Prozesse, in denen Entwickler mit Erfahrung bereits arbeiten. Lassen Sie uns Anfängern, die gerade lernen, Denkanstöße geben. Mit welchem C ++ - Standard würden Sie beginnen?
Michael: Wir müssen sofort den neuesten Standard übernehmen. Sie werden STL nicht in demselben C ++ 98 lernen, da STL ohne Lambdas keinen Sinn ergibt. Wenn Sie sich die Kurse "Grundlagen der C ++ - Entwicklung: Brown Belt" und "Grundlagen von C ++: Black Belt" auf Coursera ansehen, dann schreiben wir bereits in C ++ 17. Zum Beispiel verwenden wir strukturierte Bindungen.
: , . , . , ?
: , . , C++. , C++, , . , , . , , , , . , . , , , Align Technology.
: , , . Warum?
: -, — . , . , . , , , . -, , , . . -, - ( ), -, . . . . . . , , , , . , , tutorial . -, , .
: , . , . ?
: , . , .
: , «» . , . «» , ?
: , , . . , - . , .
C++ . , . , . , , . . - , .
, . , , , . , . « ?». , .
. C++ Russia . ?
: . , , . , , . , .
: , . , ? 2015, 2019 2020 ?
: , , , , . - . , , , . , , . , .
CppCon 2018 . , , . C++ . , , .
. , — , .
: ?
: const, volatile, static, constexpr, inline, extern . , , ..
: consteval constinit?
: . , , . , 3-4 , .
: , , Visual Studio constexpr?
: Visual Studio . , . , constexpr-.
: , : , , .
: Visual Studio , . , 2010 : , . Microsoft .
: . : const, constexpr, constinit, consteval , , final. final , , constfinal?
: final, , . . , constfinal, .
: , , , , . ?
: , , . , , .
: ?
: , JUG Ru Group , ().
: . ?
: , — . , , , . .
: . , ?
: , . , ().
C++ Russia 2019 Piter «, » . , .