Pläne des IntelliJ Platform-Teams für 2020

Heute möchten wir über einige der aktuellen Projekte des IntelliJ Platform-Teams sprechen, die sich auf IntelliJ IDEA und andere auf unserer Plattform basierende IDEs auswirken werden. Die Ergebnisse dieser Projekte werden im nächsten Jahr veröffentlicht. Einige davon sind bereits in der Version 2020.1 enthalten, die im Frühjahr veröffentlicht wird. Die Projekte, über die wir sprechen möchten, beziehen sich auf zwei große Bereiche: Produktivität und Unterstützung für moderne Entwicklungsszenarien.

Leistung


Indizierungsgeschwindigkeit


Die Indizierung ist derzeit einer der problematischsten Bereiche für die Leistung unserer IDEs. Wir planen, die Lösung aus mehreren Richtungen zu betrachten.

Erstens planen wir, fertige Indexfragmente zu unterstützen. Jetzt können wir anstelle jeder IntelliJ IDEA-Kopie, die die Klasse java.lang.String neu indiziert, ein fertiges Indexfragment für das JDK zum Download bereitstellen, das ohne zusätzliche CPU-Kosten wiederverwendet werden kann. Neben dem JDK prüfen wir die Möglichkeit, vorgefertigte Indexfragmente für Bibliotheken von Maven Central sowie für Interpreter und Pakete in anderen IDEs bereitzustellen. Wir möchten auch Teams und Organisationen erlauben, fertige Indexfragmente für den Code ihrer Projekte zu verwenden, haben jedoch noch keine konkreten Pläne dafür.


Zweitens planen wir, die Indizierung weniger zu behindern, indem wir während der Indizierung ein breiteres Spektrum an Aktionen zur Verfügung stellen.

Drittens planen wir, Indexanomalien zu erkennen und Benutzer darüber zu informieren. Zu den Anomalien zählen zu lange oder zu häufig indizierte Dateien sowie durch Ausnahmen verursachte Indexneuerstellungen. Unser Ziel ist es, konkrete Schritte vorzuschlagen, um das Problem zu lösen und die Leistung der IDE zu verbessern.

Und schließlich beschäftigen wir uns weiterhin mit der guten alten Optimierung - um sicherzustellen, dass Indizes keine unnötigen Daten erhalten und der Indexierungsprozess die minimal möglichen Ressourcen verwendet.

Neuer Multithread-Zugriff auf IDE-Datenstrukturen


Ein weiterer Problempunkt bei der Leistung ist das Einfrieren der Benutzeroberfläche. In diesem Jahr haben wir eine Infrastruktur aufgebaut, um Informationen über solche Probleme zu sammeln. Dadurch konnten wir viele von ihnen lösen (zum Beispiel haben wir einen Standardmechanismus für die asynchrone Verarbeitung von Ereignissen aus dem Dateisystem erstellt und verwendet). Nächstes Jahr planen wir, weitere Schritte zu unternehmen und Vorgänge auszuführen , mit denen Datenstrukturen aus dem UI-Stream geändert werden.

Zu Beginn von IntelliJ IDEA wurde eine architektonische Entscheidung getroffen, bei der alle Änderungen der IDE-Datenstrukturen aus dem UI-Stream durchgeführt werden mussten. Dies umfasst sowohl grundlegende Aktionen (Einfügen eines Zeichens in ein Dokument) als auch langwierige Vorgänge (Umbenennen einer von vielen Stellen aufgerufenen Methode). Diese Architektur vereinfacht das Programmiermodell erheblich, verschlechtert jedoch offensichtlich die Reaktionsfähigkeit der Schnittstelle.

In den letzten Jahren haben wir irgendwie gelernt, die Einschränkungen dieses Modells zu umgehen, hauptsächlich aufgrund der Tatsache, dass wir die langwierigen Operationen in die Hintergrundberechnung der erforderlichen Änderungen aufteilen und diese Änderungen so schnell wie möglich im UI-Stream anwenden. Die ideale Lösung wäre, die Anforderung, etwas im UI-Thread zu tun, vollständig zu entfernen. Bisher haben wir jedoch nicht verstanden, wie dies erreicht werden kann, ohne den gesamten IDE-Code und die Plugins von Drittanbietern neu zu schreiben. Jetzt haben wir eine Architekturoption, mit der wir den Code schrittweise auf ein neues Multithreading-Modell migrieren können, und wir beginnen mit der Implementierung.

Für das nächste Jahr ist geplant, wichtige UI-Komponenten und Plattform-APIs mit Unterstützung für das neue Multithreading-Modell auszustatten. Wenn wir feststellen, dass das neue Modell stabil funktioniert und die erwarteten Verbesserungen erzielt, werden wir darauf umsteigen und so die Hauptursache für Probleme mit dem Einfrieren der Benutzeroberfläche beseitigen.

Plugins ohne Neustart herunterladen und entladen


Erste Arbeitsergebnisse in dieser Richtung wurden bereits in der Version 2019.3 erzielt , mit der Sie Plug-ins für Farbthemen und Tastaturlayouts installieren können, ohne einen Neustart durchführen zu müssen. In der nächsten Version planen wir, diese Unterstützung auf alle Arten von Plugins auszudehnen. Wir unterstützen das Laden und Entladen ohne Neustart für die meisten unserer eigenen Plugins und haben Supportanweisungen für Plugin-Autoren von Drittanbietern veröffentlicht.

Zu diesem Zeitpunkt ist der Hauptvorteil ein schmerzloses Plug-in-Update, das keinen Neustart erfordert. In Zukunft wollen wir ein interessanteres Ziel erreichen: Eine IDE, die automatisch nur die erforderlichen Plug-Ins für jedes Projekt herunterlädt, das Sie in ihr öffnen. Verwenden Sie Spring - das Spring-Plugin wird geladen, Sie benötigen Angular - das Plugin steht zu Ihrer Verfügung. Nicht verwendete Plugins werden automatisch deaktiviert und verbrauchen keine Ressourcen und belegen Speicherplatz auf der Benutzeroberfläche.

Unterstützung für Entwicklungsskripte


Kollaboratives Bearbeiten


Die Anfrage nach Co-Editing-Unterstützung hat in unserem Issue-Tracker die meisten Stimmen erhalten, und wir freuen uns, Ihnen mitteilen zu können, dass wir an dieser Funktionalität arbeiten. Bei unserem derzeitigen Ansatz werden die Haupt-IDE, die auf dem Computer ausgeführt wird, auf dem der bearbeitete Quellcode gespeichert ist, und die Thin Clients unterschieden, die eine Verbindung zur Haupt-IDE herstellen können und keine eigene Kopie des Quellcodes benötigen. Jeder der verbundenen Clients verfügt über einen eigenen Status (eine Reihe von geöffneten Dateien, eine Wagenposition, eine Liste von Optionen für die automatische Vervollständigung usw.), kann jedoch auch einem anderen Benutzer folgen, wenn dies gewünscht wird.

Thin Clients können auf die grundlegenden Funktionen der IDE wie Navigation, automatische Vervollständigung und Fehlerbehebung zugreifen, unterstützen jedoch nicht 100% der verfügbaren Funktionen. (Zum Beispiel ist die Arbeit mit Versionskontrollsystemen nicht im aktuellen Plan für die Erstveröffentlichung enthalten.) Der genaue Satz der unterstützten Funktionen ist derzeit nicht definiert, und wir sind nicht bereit, Fragen zu beantworten, was wann unterstützt wird.

Die Unterstützung für das Co-Editing basiert auf dem Rider- Protokoll, daher wird es höchstwahrscheinlich zunächst in diesem Produkt angezeigt und dann auf andere IDEs übertragen. In der IntelliJ IDEA 2020.1-Version wird keines davon erscheinen - dies ist ein Plan für einen längeren Zeitraum.

Darüber hinaus sollte beachtet werden, dass die aktuelle Co-Editing-Implementierung unser eigenes Protokoll verwendet und daher nicht mit Tools kompatibel ist, die nicht von JetBrains stammen.

Der Thin Client-Ansatz kann für andere Szenarien nützlich sein, z. B. das Verschieben des IDE-Backends in die Cloud. Wir sind jedoch nicht bereit, Pläne in diesem Bereich bekannt zu geben.

Cloud-Startunterstützung


Viele unserer Produkte unterstützen seit einiger Zeit das Ausführen und Debuggen von Code auf Remotecomputern und in Containern. Leider wird diese Unterstützung fast überall auf ihre eigene Weise implementiert, und selbst universelle Funktionen wie die Docker-Unterstützung sehen in verschiedenen IDEs unterschiedlich aus.

Jetzt fügen wir auf Plattformebene das Konzept der "Umgebung für die Ausführung" hinzu, mit der Dateien in oder aus dieser Umgebung kopiert und Prozesse in dieser Umgebung gestartet werden können. In IntelliJ IDEA 2020.1 unterstützen wir die Ausführung auf dem lokalen Computer, im Docker-Container und über eine SSH-Verbindung. Sie können die Umgebung auswählen, die in den Startkonfigurationen für Java und Go ausgeführt werden soll.

In zukünftigen Versionen ist geplant, die Unterstützung für Docker- und Remote-Interpreter basierend auf der neuen Architektur zu vereinheitlichen. Darüber hinaus bieten wir eine verbesserte Integration in die Cloud, sodass Sie den Prozess auf einer neuen virtuellen Maschine in der Cloud starten können, ohne die spezifische Adresse der Maschine anzugeben, zu der Sie eine Verbindung herstellen möchten.

Neues Design Modell Design


Das Projektmodell gibt an, wie die IDE die Struktur Ihres Projekts darstellt: Welche Dateien beziehen sich darauf, wie hängen sie voneinander ab, welche Bibliotheken werden verwendet usw. Das IntelliJ IDEA-Designmodell hat uns im Laufe der Jahre gute Dienste geleistet, aber wir sind allmählich an seine Grenzen gestoßen. Erstens ist es nicht möglich, Projekte unterschiedlicher Art zufällig zu mischen. Sie können ein Xcode-Projekt in AppCode oder Visual Studio-Lösungen in Rider öffnen, aber es gibt keine solche IDE, in der Sie Gradle- und Xcode-Projekte in einem Fenster öffnen könnten. Zweitens funktioniert es auf Verzeichnisebene und lässt nicht zu, dass unterschiedliche Dateien im selben Verzeichnis unterschiedliche Abhängigkeiten haben. Dies erschwert die Integration in Build-Systeme wie Bazel und führt in anderen Szenarien zu Problemen.

Das neue Entwurfsmodell, das wir als Arbeitsbereichsmodell bezeichnen, hebt diese Einschränkungen auf. Es bietet weitere Vorteile wie eine schnellere Projekteröffnung, eine reibungslosere Synchronisierung mit Maven und Gradle sowie ein komfortableres Programmiermodell.

Wir werden zunächst die Implementierung bestehender Funktionen in ein neues Projektmodell übertragen und dann, wenn alles stabil funktioniert, neue Funktionen hinzufügen, z. B. das Öffnen einer Reihe von Projekten unterschiedlicher Typen in einem IDE-Fenster.

Zusammenfassung


Was wir gerade besprochen haben, ist nur ein kleiner Teil dessen, woran das Team arbeitet, und wir planen, nach den Ferien mehr über unsere Pläne zu erzählen. Natürlich können sich all diese Pläne ändern, und es kann sehr gut sein, dass ein Teil dieser Geschichte nie veröffentlicht wird, aber wir werden andere coole Verbesserungen für Sie vornehmen.

Wir freuen uns von Ihnen zu hören. Darüber hinaus laden wir Sie ein, an unserem Early Access-Programm teilzunehmen, mit dem Sie einige dieser Funktionen testen können, bevor sie offiziell veröffentlicht werden.

Source: https://habr.com/ru/post/de481344/


All Articles