{"id":219474,"date":"2022-01-24T07:41:00","date_gmt":"2022-01-24T06:41:00","guid":{"rendered":"https:\/\/blog.jetbrains.com\/fleet\/2022\/01\/fleet-below-deck-part-i-architecture-overview\/"},"modified":"2022-06-13T12:00:25","modified_gmt":"2022-06-13T11:00:25","slug":"fleet-below-deck-part-i-architecture-overview","status":"publish","type":"fleet","link":"https:\/\/blog.jetbrains.com\/de\/fleet\/2022\/01\/fleet-below-deck-part-i-architecture-overview\/","title":{"rendered":"Ein Blick in den Maschinenraum von Fleet, Teil 1 \u2013 Architektur\u00fcbersicht"},"content":{"rendered":"\n\n<p>Wir haben k\u00fcrzlich ein neues Produkt vorgestellt, an dem wir seit einiger Zeit arbeiten: <a href=\"https:\/\/www.jetbrains.com\/fleet\" target=\"_blank\" rel=\"noopener\">Fleet<\/a>, eine JetBrains-IDE der neuen Generation. Fleet befindet sich derzeit in der geschlossenen Preview und wir erhalten gro\u00dfartige R\u00fcckmeldungen von unseren Early Adoptern, die uns helfen, das Produkt zu verbessern und f\u00fcr eine \u00f6ffentliche Preview im Lauf des Jahres 2022 vorzubereiten.<\/p>\n\n\n\n<p>In der Zwischenzeit m\u00f6chten wir gerne etwas mehr dar\u00fcber erz\u00e4hlen, wie Fleet unter der Haube aufgebaut ist. In einer Reihe von Blogbeitr\u00e4gen werden wir die verschiedenen Aspekte von Fleet im Detail beleuchten, von der Architektur\u00fcbersicht bis hin zu Einzelheiten wie State-Management, Parser, Protokolle, Erweiterbarkeit und sogar die Entstehung des Logos. Wir w\u00fcnschen Ihnen viel Spa\u00df bei diesem Rundgang im Maschinenraum!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wie ist Fleet aufgebaut?<\/h2>\n\n\n\n<p>Als wir Fleet zum ersten Mal vorgestellt hatten, fanden auf Twitter interessante Diskussionen \u00fcber die verwendeten Technologien statt. Einige tippten auf JavaScript und Electron. Andere hofften, dass dies nicht stimmte. Manche waren froh, dass es nicht \u201ealtbackenes Java\u201c war. Es ist wirklich erstaunlich, wie viele Schl\u00fcsse ausschlie\u00dflich auf der Grundlage von Screenshots gezogen werden k\u00f6nnen.<\/p>\n\n\n\n<p>Die Wahrheit ist, dass Fleet auf einer zuverl\u00e4ssigen, leistungsstarken und wunderbaren Plattform basiert: JVM. Ja. JVM. Warum? Weil die JVM trotz einiger anderslautender Meinungen eine sehr performante Plattform ist. Hinzu kommt die Plattformunabh\u00e4ngigkeit, die uns die Unterst\u00fctzung mehrerer Betriebssysteme erleichtert.<\/p>\n\n\n\n<p>Allerdings ist die JVM nicht ausschlie\u00dflich ein Host f\u00fcr die Programmiersprache Java. Es zwingt Sie auch keiner dazu, Swing als UI-Bibliothek zu verwenden (mehr \u00fcber die UI und die Verwendung von Skia in Fleet folgt in einem der n\u00e4chsten Beitr\u00e4ge). In Wirklichkeit k\u00f6nnen wir in der JVM eine Vielzahl von Sprachen verwenden \u2013 zum Beispiel Kotlin. Und genau damit haben wir Fleet entwickelt \u2013 mit der Programmiersprache Kotlin.<\/p>\n\n\n\n<p>Als waschechte polyglotte IDE ist Fleet allerdings selbst auch polyglott. Ganz richtig \u2013 ein kleiner Teil von Fleet, insbesondere der Fleet System Daemon, ist in Rust geschrieben!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die Architektur von Fleet<\/h2>\n\n\n\n<p>Nachdem wir nun wissen, in welcher Sprache Fleet entwickelt wurde, wollen wir uns der Architektur zuwenden. Fleet besteht aus den folgenden Komponenten:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1361\" height=\"655\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/01\/image-2.png\" alt=\"\" class=\"wp-image-217451\" title=\"Architekturdiagramm\"\/><\/figure>\n\n\n\n<p>Gehen wir nun im Einzelnen auf diese Komponenten ein, um ihre Aufgaben besser zu verstehen.<\/p>\n\n\n\n<p><strong>Frontend<\/strong><\/p>\n\n\n\n<p>Es ist zwar ein naheliegender Gedanke, dass das Frontend der Benutzeroberfl\u00e4che entspricht \u2013 aber in Wirklichkeit handelt es sich um mehr. Neben der Benutzeroberfl\u00e4che bietet das Frontend verschiedene weitere Funktionen:<\/p>\n\n\n\n<ul><li>Datei-Parsing<\/li><li>Syntaxhervorhebung und grundlegende Code-Completion<\/li><li>Editor-Funktionalit\u00e4t<\/li><\/ul>\n\n\n\n<p>Fleet wird standardm\u00e4\u00dfig im Editormodus gestartet. In diesem Modus k\u00f6nnen Sie grundlegende Completion- und Navigationsfunktionen sowie weitere Features nutzen, die Sie von einem leistungsstarken Editor erwarten k\u00f6nnen. All dies wird vom Fleet-Frontend bereitgestellt.<\/p>\n\n\n\n<p><strong>Arbeitsbereich<\/strong><\/p>\n\n\n\n<p>Wie der Name schon sagt, ist der Arbeitsbereich der Ort, an dem Abl\u00e4ufe im Zusammenhang mit der Arbeitssitzung gehandhabt werden. Dazu geh\u00f6ren Aspekte wie das State-Management. Diese Funktionalit\u00e4t kann entweder im Fleet-Prozess oder als separater Prozess ausgef\u00fchrt werden, je nachdem, ob sie lokal auf dem Computer ausgef\u00fchrt wird oder nicht. Dadurch besteht die M\u00f6glichkeit, einen Arbeitsbereich auf einem Remote-Server auszuf\u00fchren.<\/p>\n\n\n\n<p><strong>Smart-Modus und Backend<\/strong><\/p>\n\n\n\n<p>Wie bereits erw\u00e4hnt kann Fleet als einfacher Editor ausgef\u00fchrt werden. Wenn jedoch erweiterte Funktionen wie intelligente Code-Completion, erweiterte Navigation, Refactorings und Inspektionen ben\u00f6tigt werden, ist der <strong>Smart-Modus<\/strong> gefragt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"840\" height=\"402\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/01\/image-1.png\" alt=\"\" class=\"wp-image-217440\"\/><\/figure>\n\n\n\n<p>Der Smart-Modus kann auf eine Vielzahl von Optionen zur\u00fcckgreifen, darunter die regul\u00e4re IntelliJ-IDEA-Codeengine, spezielle Analysemodule oder sogar Sprachserver (ob LSP-basiert oder nicht).<\/p>\n\n\n\n<p><strong>Fleet System Daemon (FSD)<\/strong><\/p>\n\n\n\n<p>Diese in Rust geschriebene Komponente ist verantwortlich f\u00fcr Build-Aktionen, das Ausf\u00fchren von Code und von Terminalbefehlen sowie weitere Aktionen innerhalb der Umgebung, in der Fleet ausgef\u00fchrt wird.<\/p>\n\n\n\n<p>All diese Komponenten bilden zusammen eine verteilte und skalierbare L\u00f6sung. In separaten Beitr\u00e4gen werden wir die Technologien, die diesen Komponenten zugrunde liegen, und die Protokolle, \u00fcber die sie kommunizieren, im Detail beleuchten.<\/p>\n\n\n\n<p>Im n\u00e4chsten Beitrag sehen wir uns das State-Management an, um zu erfahren, mit welchen Methoden die Konsistenz zwischen all diesen Services sichergestellt wird.<\/p>\n\n\n\n<p>Bleiben Sie also dran!<\/p>\n\n\n\n\n<p>Autor des Original-Blogposts:<\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1132,"featured_media":217836,"comment_status":"closed","ping_status":"closed","template":"","categories":[623,89],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/fleet\/219474"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/fleet"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/types\/fleet"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/users\/1132"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/comments?post=219474"}],"version-history":[{"count":4,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/fleet\/219474\/revisions"}],"predecessor-version":[{"id":219480,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/fleet\/219474\/revisions\/219480"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media\/217836"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media?parent=219474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/categories?post=219474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/tags?post=219474"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/cross-post-tag?post=219474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}