Ich bin vor ungefähr 10 Jahren der Erlang-Community beigetreten, mitten in der ersten Phase des Hype. Uns wurde gesagt, dass Erlang die Zukunft des Wettbewerbs und der Parallelität ist. Die Implementierung in dieser Sprache ist am einfachsten und schnellsten, und Sie erhalten weiterhin eine kostenlose Verteilung. Zu dieser Zeit schien die Zukunft unglaublich. Die virtuelle Maschine hat kürzlich
SMP- Unterstützung erhalten, aber um wirklich alle Prozessoren nutzen zu können, mussten Sie mehrere virtuelle Maschinen auf demselben Computer ausführen.
Ich möchte über das vergangene Jahrzehnt nachdenken. In diesem Artikel werde ich über die Phasen des Hype in Bezug auf Erlang sprechen, über die
Leiter der Ideen in der Sprache und über ihre möglichen Auswirkungen auf die Verbreitung der Sprache, über die Veränderungen, die ich in diesen 10 Jahren durchgemacht habe. Abschließend werde ich meine Gedanken darüber teilen, was Erlang der gesamten Programmierergemeinschaft noch nicht gebracht hat.
Hype-Phase
Der Hype-Zyklus besteht aus den Phasen des Lebenszyklus eines Produkts oder einer Technologie. Dies ist ein Marketingkonzept, kein wissenschaftliches, aber es hilft oft bei der Beschreibung der Essenz dessen, was passiert. Was mich am meisten interessiert, ist
die Hype-Phase , eine Art Goldrausch, der die Community der Programmierer abdeckt. Vielleicht sind Sie mehr als einmal darauf gestoßen, und all diese Phasen sind mit einer Killer-App verbunden, die jeder schnell nutzen möchte.
Die Beispiele, die mir sofort einfallen, sind Ruby on Rails,
Wie man eine Blog-Engine in 15 Minuten erstellt (der Satz
„Schau dir alles an, was ich nicht mache!“ Ist immer noch lustig) oder Go with Kubernetes (sie haben vorher zusammengearbeitet, und dann gab es einen direkten Anstieg). Dies schließt Elixier und Phönix ein.
Während der Hype-Phase gibt es einen unglaublichen Zustrom von Neuankömmlingen, die sehen wollen, worum es in der ganzen Aufregung geht. Jemand bleibt, die meisten gehen. Sie können Monate oder Jahre bleiben, in seltenen Fällen finden Sie jahrzehntelang ein Zuhause. Die überwiegende Mehrheit ist jedoch ein ständiger Strom von Serienleuten, die von Technologie zu Technologie springen und nach Möglichkeiten suchen, von der Tatsache zu profitieren, dass sie als erste ein Framework, eine Sprache oder ein Toolkit verwenden.
Am häufigsten müssen Sie also eine echte „Killeranwendung“ erstellen, und die Menschen greifen in Ihr Ökosystem ein. Die Killeranwendung sorgt für Aufregung. Wenn Sie es schreiben, werden sie zu Ihnen kommen. Und wenn Sie einen kleinen Teil davon behalten und aktiv halten können, haben Sie auf absehbare Zeit eine lebendige Community. Dies erinnert etwas an die Idee des
Regens nach einem Pflug :
Der Herr treibt den Pflug ... Nach dieser wunderbaren Anpassung, die die einzige Herrschaft des Menschen über die Natur ist, regnen Wolken heftig ... [Pflug] ist ein Werkzeug, das Zivilisation von Barbarei trennt und die Wüste in Bauernhöfe und Gärten verwandelt. ... Kurz gesagt, Regen folgt dem Pflug.Das Wesentliche der Theorie war, dass menschliche Behausung und Landwirtschaft einen irreversiblen Einfluss auf das Klima arider und semi-arider Regionen haben, wodurch diese Regionen feuchter werden. Diese Theorie verbreitete sich in den 1870er Jahren als Rechtfertigung für die Besiedlung der Great Plains, einer Region, die früher als Great American Desert bekannt war. In jenen Jahren wurde diese Theorie verwendet, um die Ausweitung der Weizenernte in den Randgebieten in Südaustralien zu rechtfertigen.
Wenn wir ein großes Projekt starten können, erscheinen Entwickler und es wird autark. Ich denke, diese Idee ist eindeutig falsch, hauptsächlich weil Erlang während der größten Hype-Phase Dutzende von Killer-Anwendungen hatte, aber die Community ist immer noch klein. Hier sind Beispiele für diese Anwendungen:
- ejabberd (2002, erste stabile Version im Jahr 2005): Es war einer der am meisten, wenn nicht der am besten skalierbaren Chat-Server. Ejabberd hat große Erfolge erzielt und ist zum Teil immer noch relevant. Heute gibt es bei StackOverflow noch Fragen zu Modulen für diesen Server. Um 2011 wurde er in MongooseIM eingebunden , und beide Lösungen werden weiterhin unterstützt.
- CouchDB (2005): Eine der beliebtesten in Erlang geschriebenen Datenbanken, die auf dem CAP-Theorem basiert. Es bezieht sich auf die Zeit der Entstehung von Multimaster-Repositories. Obwohl MongoDB den größten Teil des Marktes einnahm , hat CouchDB spirituelle Nachfolger unter Speicher-Engines wie BarrelDB , die immer noch unterstützt werden.
- RabbitMQ (2007): Ein Server für Nachrichtenwarteschlangen, der den größten Teil des AMQP-Marktes zerstört hat. Es entwickelt sich und konkurriert häufig mit Kafka, wenn es um Streaming-Lasten geht, obwohl diese Produkte unterschiedliche Fähigkeiten und Anwendungen haben.
- Facebook-Chat (2008): Die erste Version des Facebook-Chats wurde in Erlang geschrieben. Aus einer Reihe interner Gründe (Stabilität, eine große Anzahl von C ++ - Programmierern und eine Reihe etablierter Lösungen) wurde es später in C ++ umgeschrieben.
- WhatsApp (2009, 2014 gekauft): Als Facebook das Erlang-Chat-System loswurde, kauften sie WhatsApp, für dessen Unterstützung nur 50 Ingenieure für 900 Millionen Benutzer erforderlich waren . Er lebt bis heute und außerdem hat das WhatsApp-Team die Beziehungen zu den Gemeinden Erlang und Elixir weiter gestärkt.
- Riak (2009): Eines der besten Beispiele für die Demonstration von Macht in der Welt verteilter Systeme. Riak war ein zuverlässiger verteilter Speicher vom Typ Schlüsselwert. Dies ist ein Basho-Produkt, das immer noch in Gesundheitssystemen und anderen kritischen Infrastrukturteilen funktioniert. Später ging Basho bankrott (größtenteils aufgrund von Verstößen gegen Treuhandpflichten , die "bei voller Geschwindigkeit zum Zusammenbruch des Unternehmens führten" ). Dann kaufte Bet365 alle ihre IPs, öffnete sie großzügig und seitdem lebt die Datenbank in der Open-Source-Welt, obwohl es heute schwere Zeiten gibt.
Viele dieser Produkte wurden während der ersten Auflage von Joe Armstrongs
Programming Erlang- Buch veröffentlicht. Infolgedessen kam es zu einer Explosion der Popularität der Sprache, und Erlang gewann viele Bewunderer. Wesentliche Auswirkungen war sogar die Tatsache, dass
Hacker News alle Diskussionen über die Innards of Erlang erzwang . Allerdings sind nur wenige dieser Sprache treu geblieben.
Jetzt glaube ich, dass Killeranwendungen von Leuten erstellt werden, die die Anfangsphase des Hype bilden, und nicht umgekehrt. Es gibt immer einen kleinen Teil der Leute, die vor anderen nach interessanten Technologien suchen, entscheiden, ob sie sie mögen, dann etwas erstellen, und wenn Sie eine Killer-App erhalten, stimuliert dies die Entwicklung einer noch stärkeren Hype-Phase. Die Menschen werden sich auf den Frachtkult einlassen, und erfolgreiche Projekte werden Nachahmer hervorbringen. Die Standardsituation ist auch die Phase der „Erfindung des Rades“, in der jeder seine Zeit damit verbringt, bestehende Dinge neu zu erfinden, und es gibt eine Welle von Botschaften über die „Implementierung von
X, aber in der Y-Sprache“.
Es reicht jedoch nicht aus, nur eine Killer-App zu erstellen. Seltsamerweise haben alle diese Produkte, wie RabbitMQ und Ejabberd, trotz ihrer Beliebtheit eine viel größere Benutzergemeinschaft als die Entwicklergemeinschaft. Tausende und Abertausende von Unternehmen, die diese Produkte verwenden, leisten nicht unbedingt einen wesentlichen Beitrag zur Erlang-Community.
Dies ist teilweise auf die Tatsache zurückzuführen, dass die meisten Killer-Erlang-Anwendungen in spezialisierten Infrastrukturen verwendet werden. Sie haben eine äußerst zuverlässige Komponente in Form einer Black Box erstellt, die jeder verwendet. Wenn sie gut funktioniert, schaut niemand hinein. Mehrere Dutzend Entwickler haben die Grundlage für Tausende anderer Produkte und Dienstleistungen geschaffen. Eine spezialisierte Infrastruktur benötigt per Definition keine große Anzahl von Personen, um ihre weitreichende Wirkung sicherzustellen. Es gibt immer nur wenige Entwickler und eine kleine Community im Vergleich zu Technologien, die näher am Endprodukt liegen, z. B. Web-Frameworks oder noch allgemeinere Infrastrukturen, die in kleinen Bereitstellungsprojekten verwendet werden, die für jedes Unternehmen geeignet sind.
Aber trotz alledem ist es offensichtlich, dass Erlang die vielen Leute verpasst hat, die es während der Hype-Phase durchgemacht haben.
Treppe der Ideen
Ich werde nicht darüber
schimpfen, was hätte getan werden können oder sollen. Stattdessen möchte ich über die beliebten Lernmuster sprechen, die ich in der Erlang-Community im Laufe der Jahre meines Unterrichts und Programmierens dieser Sprache erlebt habe. Ich beobachte heute die gleichen Muster in der Elixiergemeinschaft, und dies könnte auf eine ähnliche Zukunft für ihn hinweisen.
Ich habe die Theorie, dass ein solches technisches Thema wie eine Programmiersprache (und ihr Ökosystem) mehrere Komplexitätsebenen aufweist, auf denen sich unterschiedliche Konzepte befinden. Ich habe diese Theorie im Projekt
Learn You Some Erlang verwendet . Es ist in dem Diagramm dargestellt, das ich die
Nine Earl-Kreise nannte .
Natürlich ist dies eine ironische Idee, ich denke nicht, dass das Studium einer Technologie endloses Leiden ist (zumindest sollte es nicht sein). Ich mochte nur das Wortspiel. Einfach ausgedrückt, es gibt immer eine Art „Hauptpfad“ oder eine Abfolge von denen, die Sie beim Studium der Technologie lernen - dies ist die „Leiter der Ideen“. Je höher das Konzept auf dieser Leiter liegt, desto wertvoller und schwieriger ist es zu erreichen, desto weniger Menschen kenne sie.
Wie die Treppe der Ideen in Erlang aussehen könnte:
- Funktionsprogrammierung.
- Isolierte Prozesse und Wettbewerbsfähigkeit.
- Zuverlässige Wettbewerbsfähigkeit (Links, Monitore, Timeouts).
- OTP-Prinzipien und andere Systemabstraktionen.
- Strukturierung von Systemen nach den Prinzipien von OTP.
- So sammeln Sie Releases und arbeiten mit ihnen (Bereitstellung).
- So verhindern Sie einen Systemabsturz und arbeiten damit.
Wenn Sie Erlang nur kennenlernen und ein Buch für Anfänger kaufen, verbringen Sie wahrscheinlich die ersten Tage mit dem ersten Schritt der Leiter: Einarbeitung in funktionale Programmierung, Unveränderlichkeit (Unveränderlichkeit), Rekursion und andere ähnliche Konzepte. Früher oder später werden Sie zu Wettbewerbsfähigkeit und Parallelität, Prozessen und Messaging gelangen. Unmittelbar danach erfahren Sie mehr über Links und Monitore, den Umgang mit Fehlern und was Erlang macht, was es ist. Während der großen Hype-Phase enthielten der zweite und dritte Schritt Möglichkeiten, die für die meisten Beobachter einfach unglaublich aussahen. Wenn Sie etwas lernen möchten, das Sie in allen zukünftigen Projekten verwenden werden, können Sie eine dieser Erlang-Funktionen auswählen.
Sie können später mit anderen Schritten fortfahren, aber nur, wenn Sie sich an das Schritt-für-Schritt-Schulungsprogramm halten. Insbesondere kann OTP (vierte Stufe) als "worum geht es?" Beschrieben werden. Wettbewerbsfähigkeit und funktionale Programmierung sind gut, aber das mit OTP präsentierte Gesamtrahmen war wirklich einzigartig und musste verwendet werden. Im Laufe der Zeit werden viele mit ihm zusammenarbeiten und feststellen, dass sie coole Abstraktionen erstellen können, aber sie werden den Ansatz zur Strukturierung nicht mögen.
Um Anwendungen wie Ejabberd zu erstellen, war es ausreichend, den vierten Schritt zu überwinden. In jenen Tagen ähnelte das Ökosystem dem Wilden Westen, und das Wissen über OTP gehörte den bei Ericsson tätigen Spezialisten sowie den motiviertesten Autodidakten. Die meisten erreichten nie die fünfte Stufe, es sei denn, sie schickten etwas an die Produktion und stießen dann auf Probleme, oder sie suchten nicht nach einer besseren Lösung. Das Erreichen des sechsten Schritts war bis 2015-2016 selten, und dann erschien
Relx , was die Zusammenstellung von Releases und deren Entwicklung vereinfachte. Fast niemand hat den siebten Schritt erreicht, und viele Leute denken, dass sie kein heißes Update des Erlang-Knotens durchführen sollten, und im Idealfall müssen Sie SSH nie zum Debuggen in der Produktion verwenden.
In der Praxis steigt nicht jeder in der gleichen Reihenfolge die Ideenleiter hinauf, und seine Schritte in einigen Büchern sind umgekehrt (z. B. in
Erlang und OTP in Action ). Daran ist nichts auszusetzen, die Treppe wurde nur zur Veranschaulichung erfunden.
Die Größe der Gemeinschaften ändert sich in Wellen. Während der Phasen des Hype kann sich die Größe für einige Zeit um das Zehn- oder Hundertfache erhöhen, und all diese Leute werden neugierig sein und gehen. Die meisten Teilnehmer sitzen auf der ersten Stufe der Treppe und lassen sie selten zurück. Einige steigen in die zweite Stufe auf, noch weniger in die dritte und so weiter, bis Sie einen engen Kreis von Experten auf höchster Ebene erreichen.
Ich denke, die ersten drei Stufen von Erlang zu erklimmen war einfach. Um zum vierten zu gelangen, war es notwendig, sich mehrere Jahre lang zu entwickeln und tatsächlich das Bedürfnis nach weiteren Studien zu spüren. Im fünften Schritt ist das schon sehr schwierig. Erlangs Toolkit und Ökosystem waren schlecht. Community-Mitglieder ertrugen diese karge Umgebung und waren der Notlage der Neuankömmlinge gleichgültig. Um den Artikel kürzer zu machen (na ja, lang, aber nicht absurd lang), lesen Sie meinen Vortrag über das Sprachökosystem auf der Erlang User Conference:
Wenn Sie über Elixir schreiben, sehen Sie wahrscheinlich, auf welcher Stufe dieser erfundenen Treppe Sie stehen, und Sie können sich bereits vorstellen, in welchen Anteilen die Community darüber verteilt ist. Viele Teilnehmer sprechen Phoenix fließend allein, steigen aber selten über den vierten Schritt hinaus, und viele stecken im dritten und unteren Schritt fest. Und oft ist das genug. Ich beschuldige nicht, sondern teile nur die Beobachtung. Wie jeder, der viele Stufen erklommen hat (und wahrscheinlich noch einige Schritte vor mir liegen, wie das „Patchen einer virtuellen Maschine“ oder etwas anderes), sehe ich, dass diese Leute nicht viel wissen. Aber ehrlich gesagt können all diese Informationen für sie nutzlos sein. Und das ist gut.
Was ich dazu sagen möchte: Ich glaube, dass wir als Gemeinschaft wahrscheinlich Hündinnen unter uns sägen, was es sehr schwierig macht, die Leiter der Ideen über das Grundniveau hinaus zu meistern. Einige Themen müssen langsam studiert werden, und in einigen Themen führen Blinde Blinde, weil Erlang so klein ist, dass wir einfach zu wenige Menschen haben, die alle notwendigen Erfahrungen teilen können. Heute ist es einfacher und wenn Sie in der Hype-Phase nicht nach Erlang gekommen sind, werden Sie wahrscheinlich Hilfe bekommen, da viel weniger Leute gleichzeitig danach fragen.
Ich würde gerne denken, dass wenn die zweite Phase des Hype morgen in der Erlang-Welt beginnt, wir Neuankömmlinge besser akzeptieren können als während der großen Welle, als ich kam. Und ich hoffe, dass diese Erfahrung in Verbindung mit einer engeren Zusammenarbeit zwischen den Gemeinden Erlang und Elixir unsere Chancen verdoppeln wird, den Gebrauch dieser Sprachen erfolgreich auszubauen.
Was hat sich geändert?
Erlang schwimmt nicht in der Flasche und wartet darauf, dass sie ins Licht gezogen wird. Es entwickelt sich ständig weiter. Dies ist teilweise auf den Wettbewerb und die Vorschläge der Elixir-Community zurückzuführen, die glücklicherweise viel mehr von ihren Tools erwartet, als Erlang-Benutzer gewohnt sind. Zum Teil wird die Entwicklung von den dringenden Bedürfnissen der Branche und den Wünschen der akademischen Gemeinschaft bestimmt.
Ich denke, jemand wird mit diesen Änderungen, die seit 2009 oder noch früher stattgefunden haben, zufrieden sein:
- Die Multi-Core-Unterstützung funktioniert jetzt gut. Wenn zuvor mehr als 2 bis 4 Kerne vorhanden waren, beruhte das System auf allen Arten von Engpässen, die nicht vom Anwendungsentwickler betroffen waren. Dann wurde es möglich, 12-16 Kerne zu verwenden. Heute weiß ich nicht einmal, wie hoch die Obergrenze ist, aber ich habe Stapel geschrieben und verwaltet, die problemlos auf mehr als 32 Kernen funktionierten.
- Stapelspuren haben jetzt Zeilennummern. Es ist fast undenkbar, in die Vergangenheit zurückzukehren, bevor die Zahlen erschienen. In jenen Jahren war das „Schreiben kurzer, selbst dokumentierter Funktionen“ keine Frage der Architektur, sondern des Überlebens. Sie können jetzt Erlang-Programme ohne übernatürliche Debugging-Fähigkeiten debuggen, obwohl sie niemals schaden werden.
- Die Qualität der Unicode-Unterstützung ist derzeit akzeptabel. Das Strings-Modul enthält die wichtigsten Algorithmen, und das Unicode-Modul leistet bei den meisten Arten von Transformationen und Normalisierungen hervorragende Arbeit. Es gibt typische Ansätze für die Arbeit mit Codepunkten, UTF-8, UTF-16 und UTF-32. Die Unterstützung vor Ort lässt immer noch zu wünschen übrig, aber alles andere ist betriebsbereit. Module wie re (ein Modul zum Arbeiten mit regulären Ausdrücken) und alle übergeordneten Funktionen zum Arbeiten mit Dateien haben auch bei der Arbeit mit Unicode keine Probleme.
- Karten (implementiert als HAMT ) mit expliziter Mustervergleichssyntax werden unterstützt . Mit Hilfe der Dialysator-Typanalyse wird auf sie angewendet, wodurch sie in den Fällen verwendet werden können, in denen die Verwendung von Datensätzen früher viel Aufwand erforderte.
- Virtuelle Maschinen verwenden jetzt hervorragende Mechanismen, um mit der Zeit zu arbeiten . Sie bewältigen eine Änderung der Zeitskala, verschiedene Arten von Uhren und vieles mehr. Das Arbeiten mit Zeitzonen und das Formatieren von Zeit ist jedoch mit Hilfe von Bibliotheken, die von der Community entwickelt wurden, besser.
- Hochleistungswerkzeuge wie Atomics , Zähler und persistente Begriffe wurden hinzugefügt, um die verschiedenen Mechanismen zu verbessern, die Überwachungstools und Basisbibliotheken auf niedriger Ebene zugrunde liegen.
- Die gesamte Signalverarbeitung wurde asynchron , einschließlich der Arbeit mit Ports , was uns vor vielen Engpässen bewahrte.
- Der Compiler wurde neu geschrieben und wird noch neu geschrieben, um die Analyse und Leistung auf hoher Ebene mithilfe von SSA zu verbessern .
- Ein spezieller Typ von Schedulern für die Verwendung in NIF ist aufgetaucht - Dirty Scheduler, die die Integration in in c oder sogar Rost geschriebenen Code vereinfachen und sowohl CPU- als auch E / A-intensive Prozesse unterstützen. Obwohl die Sprache selbst nicht so viel schneller geworden ist (obwohl Fortschritte erzielt wurden), ist es viel einfacher geworden, Hochleistungsbibliotheken zu verbinden, ohne die Stabilität der virtuellen Maschine übermäßig zu beeinträchtigen.
- Am Mechanismus zum Zuweisen und Verwalten von Speicher wurden verschiedene Verbesserungen vorgenommen .
- Die Analyse des Programms ist dank der schnelleren und flexibleren Rückverfolgung und Berücksichtigung von Mikrozuständen genauer und schneller geworden.
- Das flexiblere OTP-Verhalten von gen_statem ermöglichte die Implementierung von Finite-State-Maschinen, die Eingabedaten selektiv verarbeiten können.
- Neues und verbessertes Protokollierungsframework mit integrierter Unterstützung für strukturierte Protokolle.
- Das Kryptomodul wird neu geschrieben und verwendet NIF anstelle der komplexeren (und häufig langsamer aktualisierten) Treiber.
- Der Dateitreiber wurde vollständig mit NIF neu geschrieben, wodurch die Leistung erheblich verbessert wurde.
- Um die gleiche Leistung zu erzielen, schreiben sie Netzwerktreiber weiterhin mithilfe von NIF neu.
- Die Verwendung von SSL für die TLS-Verarbeitung wurde komplett überarbeitet. Als ich bei Heroku arbeitete, haben wir versucht, das Produkt hinsichtlich der Verzögerung (möglicherweise 5 Prozent schlechter) und der Vorhersagbarkeit (10 bis 30 Mal weniger als 99 Perzentile) mit C ++ - Lösungen vergleichbar zu machen.
- Deutlich verbesserte ETS-Leistung.
- Ich habe eine Anleitung zum Verwalten und Debuggen von Produktionssystemen auf virtuellen Erlang-Maschinen geschrieben.
- Ein komplett neues Build-Tool ( rebar3 ), das in den Unified Package Manager für das Erlang-Ökosystem integriert ist.
- , . Elixir, Efene, LFE, Luerl, Clojerl Gleam Alpaca.
- Erlang.
,
. , OTP Ericsson 13-16 ( 22!), Erlang . , Ericsson. Erlang Elixir, Erlang VM ,
Erlang Ecosystem Foundation , , , (observability — ), , ..
, , , , , , , , , Erlang . .
Erlang
, , 2007-2009, , . Erlang , . , , BEAM Conf. (Property-Based Testing), Erlang Elixir . ,
. , .
? , , , . , Elixir. , , , . , . , . . , . Erlang, , .
, Erlang . , , Erlang-, Erlang-: , , . , .
Erlang -, Elixir-.
, , Erlang . , . Erlang , . , .
, . ? ? , - ? , , ? ? , ? « - »?
, , « ». , Erlang . , . junior senior-, , , , .
, 15 ( , ), . ,
Systeme und ihre Schaffung und Inbetriebnahme. Jeder hat seine eigene Motivation.Ich kann mir nicht vorstellen, dass ich in einer anderen Community so viel bekommen würde. Diese 10 Jahre waren unglaublich. Es ist merkwürdig, dass die Erlang-Community noch klein ist und ihr Potenzial nicht offenbart wird. Dies bedeutet, dass es viele Möglichkeiten gibt, an allem teilzunehmen, von Angesicht zu Angesicht mit Menschen zu kommunizieren, die voller Weisheit sind und diese teilen und ihren Platz finden möchten.PS. Vielen Dank für die Übersetzung von mail ru group; Erlang-Gemeinschaft im Telegramm (Evgeny M., Sergey Ivanov, Vladimir Sekisov, Greg)