- Graduelle mengentheoretische Typen leiten Typen aus Patterns ab und geben Warnungen zur Compile-Zeit aus; damit lassen sich Defekte und Bugs in Codebases finden, ohne bestehende Software zu ändern
- Die neuen Typwarnungen konzentrieren sich derzeit auf Atoms und Maps/Structs und erkennen Pattern Matching auf nicht vorhandene Keys sowie Feldzugriffe, Aufrufe von Nicht-Modul-Funktionen, fehlerhafte Aufrufe anonymer Funktionen, strukturelle Vergleiche zwischen Structs, Vergleiche nicht überlappender Typen, fehlerhafte Binary-Patterns und das Rescuen undefinierter Exceptions
- Der Typechecker leitet Typen derzeit nur aus Patterns innerhalb derselben Funktion ab; Analysen über Guards und Funktionsgrenzen hinweg sollen in künftigen Releases hinzukommen
- Unterstützung für Erlang/OTP 27 wurde hinzugefügt, die Unterstützung für Erlang/OTP 24 wurde eingestellt; die Migration auf Erlang/OTP 26 oder neuer wird empfohlen, einschließlich unter Windows
- Die Unterstützung für WERL, die grafische Erlang-Terminaloberfläche für Windows, soll in Elixir v1.18 entfernt werden
- Der neue Datentyp
DurationundDate.shift/2wurden hinzugefügt, sodass sich Datumsangaben, Zeiten und DateTimes anhand einer Duration verschieben lassen; beiDateTimewerden Zeitzonenänderungen und Daylight Saving Time berücksichtigt Kernel.to_timeout/1wurde hinzugefügt, um Durations und Integer auf Timeout-Werte zu normalisieren, die in verschiedenen APIs wieProcessundGenSerververwendet werden- Die Process-Label-Funktion aus Erlang/OTP 27 ist in Elixir über
Process.set_label/1nutzbar; Logger formatiertgen_statem-Reports und nimmt Erlang/OTP-27-Process-Labels in Logger-Events auf Keyword.intersect/2,3, der neue Mix-Profilermix profile.tprofsowie der GuardKernel.is_non_struct_map/1wurden hinzugefügt, um den Stolperstein zu reduzieren, dass%{}auch Structs matcht- Mit der Einführung von
mix profile.tprofwerdenmix profile.cprofundmix profile.eprofsoft-deprecated
1 Kommentare
Meinungen auf Hacker News
In den letzten Jahren ist das Elixir-Ökosystem für wirklich viele Anwendungsfälle zur einfachsten Lösung geworden.
Mit Phoenix und LiveView ist Webentwicklung schnell und angenehm; mit NX/Axon/Bumblebee geht KI, mit Membrane Audio-/Video-Streaming und -Verarbeitung, mit Commanded CQRS und Event Sourcing, mit Nerves der Bau eingebetteter Geräte und mit dem in Entwicklung befindlichen LiveView Native sogar Mobile Apps.
Queues, Pipelines und Batch-Verarbeitung lassen sich je nach Bedarf ebenfalls mit Bordmitteln oder mit GenStage, Broadway und Oban handhaben.
Für mich persönlich ist die Kernfunktion dennoch IEx, Elixirs REPL. Direkt mit Code in Entwicklung oder Produktion interagieren zu können, hineinzuschauen und zu debuggen, ist lebensverändernd.
Dass jetzt Typen dazukommen, ist das letzte Puzzleteil, das uns noch mehr Vertrauen in den Code gibt, den wir deployen.
Ecto ermöglicht es, SQL-Datenbanken auf funktionale Weise zu behandeln. Ich weiß immer noch nicht, wie ich ORMs grundsätzlich einordnen soll, aber wenn man mit ein paar kombinierbaren Queries 90 % des SQL loswird, sehe ich das als Erfolg.
Nachdem wir monatelang mit Deployment, Uptime, Segmentation Faults, Paketzeiten und Ähnlichem gekämpft hatten, haben wir Webserver und Datenschicht auf Elixir + Phoenix umgezogen. Jetzt ist alles deutlich besser getestet, leichter nachvollziehbar, verlässlich skalierbar und einfacher zu deployen.
Dank Convention over Configuration konnte man mit Phoenix absurd schnell loslegen, viel schneller als mit FastAPI. Ich denke, wir hätten das schon vor Monaten tun sollen.
Im Moment trainiere ich Modelle mit Nx, probiere Bumblebee/Livebook aus und füge der App Presence- und Live-Funktionen praktisch kostenlos hinzu.
Alles nutzt weiterhin die Konzepte, Performance und Entwicklerfreundlichkeit von LiveView.
Ich glaube, es wäre schwer, wieder zu etwas wie Erlang oder Elixir zurückzugehen.
Immer wenn ich Code in anderen Sprachen schreibe, besonders wenn ich fürs Programmieren bezahlt werde, vermisse ich es sehr.
Ein gutes REPL reduziert die typische Reibung beim Programmieren erheblich. Statt die ganze App zu starten, um an einem problematischen Codefragment herumzustochern, kann man Ideen schrittweise aufbauen und sofort ausprobieren.
Auch die Elixir-Standardbibliothek ist hervorragend, und der Zugriff auf Dokumentation im REPL ist sehr einfach, was enorm hilft, im Flow zu bleiben. Wenn ich in Elixir programmiere, öffne ich selten den Browser, um kleine Fragen zu recherchieren, weil ich die Antwort meist finde, ohne das REPL zu verlassen.
Dadurch werde ich auch dazu angehalten, in meinem eigenen Code gute Docstrings zu schreiben.
Noch besser ist, dass man das REPL zusammen mit laufendem Code betreiben kann. Selbst wenn die App laufen muss, kann man sie einfach laufen lassen und in der Entwicklungsumgebung Live-Daten manipulieren und internen Zustand untersuchen. In anderen Stacks ist das unmöglich oder erfordert einen Debugger.
Ich erwarte, dass die Werkzeuge mit den neuen Typ-Funktionen noch besser werden.
Dazu kommen der Spaß und die Stärke des funktionalen Paradigmas, robuste Methoden für den Umgang mit Veränderlichkeit und Zustand – und man muss keine LISP-Syntax ertragen. Für mich persönlich trifft diese Sprache alle richtigen Töne, deshalb mag ich sie wirklich sehr.
Macht IEx irgendetwas, was IRB nicht kann?
In den letzten Jahren haben das Elixir- und das Erlang-Team wirklich großartige Arbeit geleistet, und die Arbeit der Bibliotheks- und Buchautorinnen und -autoren darf man ebenfalls nicht vergessen.
Ich habe mich noch nie so sehr auf ein Release gefreut. Ich habe eine Zeit lang Elixir- und OTP-Commits verfolgt, und es fühlt sich eindeutig so an, als hätten Elixir/Erlang richtig Schwung bekommen.
Ich nutze Elixir für das Backend eines Nebenprojekts, das Frontend ist Remix, und die Arbeit am Backend ist äußerst angenehm und produktiv
Die Produktivität von LiveView erkenne ich an, aber in meinem Fall musste ich instabile Netzwerkverbindungen handhaben, daher war die LiveView-Erfahrung erwartungsgemäß nicht gut
Ich wünschte, Elixir würde sich in den Köpfen der Entwickler etwas stärker von LiveView lösen. Auch nur als simples API-Backend ohne LiveView oder Echtzeit-Channels macht Elixir wirklich Spaß
Mit LiveView komme ich aber nicht so gut zurecht. Es ist ziemlich schwer zu verstehen und hat viele Fallstricke. Zum Beispiel muss man Authentifizierungsprüfungen manchmal sowohl im
pipe_throughdes Routers als auch imon_mount-Callback von LiveView im Kopf behalten und behandeln. Siehe [0]Allein die Tatsache, dass dieser Satz für einen Entwickler, der Phoenix und LiveView zum ersten Mal sieht, keinerlei Bedeutung hat, ist Beweis genug dafür, dass LiveView nicht der Standardweg sein sollte
Es erzeugt dort eine sehr steile Lernkurve, wo sie nicht nötig ist. Elixir/Phoenix selbst ist einfach
Wenn ein Entwickler Elixir/Phoenix neu lernt, halte ich es für richtig, zuerst Phoenix Dead Views im MVC-Stil zu verwenden und danach „Elixir in Action“ zu lesen, um die OTP-Grundlagen zu lernen. Das Buch war leicht verständlich, augenöffnend und hat fast meine gesamte Art zu programmieren verändert
Und erst danach sollte man zu LiveView übergehen
[0]: https://hexdocs.pm/phoenix_live_view/security-model.html#liv...
mix phx.newmit dem Flag—no-liveausführt, kann man Phoenix ohne LiveView nutzen. Auch aus bestehenden Projekten lässt es sich manuell entfernenDas Problem ist keine Frage von technischem Wissen oder Installations-Defaults, sondern eine Frage der Wahrnehmung unter Entwicklern. Zu viele Menschen denken bei Elixir und dem restlichen Ökosystem zuerst an LiveView und gehen am übrigen Ökosystem achtlos vorbei
Elixir ist viel mehr als das, und selbst Phoenix ist größer als LiveView
Man kann auch ohne LiveView, und natürlich auch ohne Phoenix, produktive und kosteneffiziente Elixir-Anwendungen bauen. Elixir sollte im Backend häufiger gewählt werden als heute, aber ich verstehe auch die verbreiteten Vorstellungen und Ängste, die zu anderen Entscheidungen führen
Ich baue mein Startup als 100 % Elixir Fullstack auf, und es ist die beste Technologie, die ich bisher verwendet habe
Ich erzähle meinen ernsthaft technikaffinen Freunden ständig, wie gut es ist
Jetzt wäre es wirklich schön, wenn RabbitMQ und sein Client unter OTP 27 laufen würden. Ich möchte upgraden
Wir verwenden seit Jahren Client-Logins über SSL-Zertifikate und sind mit der Stabilität sehr zufrieden
Über Elixir und Phoenix kann man gar nicht genug Gutes sagen. Wenn jetzt noch Typen dazukommen, wird es noch besser
Man hört viel über die BEAM und ihre Stärke, aber meiner Erfahrung nach kann man sehr lange kommen, bevor man über diesen Teil des Stacks nachdenken muss. Phoenix abstrahiert das hervorragend, sodass man die Vorteile ohne Aufwand bekommt
Ein Beispiel ist Oban. Man bekommt nahezu kostenlos mächtige, flexible und leicht zu nutzende Background-Jobs als Elixir-Code innerhalb von Postgres. Wirklich beeindruckend
Ich empfehle, es auszuprobieren
Wegen LiveView und der Marketing-Fixierung darum herum stoßen Menschen, die OTP sonst länger nicht hätten kennen müssen, sehr früh auf ihrer Reise damit zusammen, vielleicht schon ab der ersten Controller-Route
Einen robusten LiveView-Flow zu schreiben und gut zu testen ist intellektuell so komplex wie das Schreiben eines stateful GenServers mit mehreren nichtlinearen Flows und verschiedenen call/cast-Einstiegspunkten
LiveView verwendet andere Begriffe und hat kleine Komfortschichten wie async assigns, aber mechanisch ist es buchstäblich ein GenServer. Ich denke, es ist wichtig, das gut zu verstehen, um es effektiv zu nutzen
Oban liebe ich wirklich und vermisse es in anderen Ökosystemen schmerzlich
Nebenbei: Hat jemand elixir-desktop [1] ausprobiert? Es ist ein Bundle aus wxWidgets + LiveView und damit einer Electron-App ziemlich ähnlich
In [2] erklärt Wojtek Mach, wie das Elixir-Team Livebook Desktop gebaut hat. Er behandelt, wie das Projekt begonnen hat, subtile Bugs, die beim Bau der macOS-App entdeckt wurden, Einschränkungen von wxWidgets unter Windows und diverse Implementierungsdetails
Es wäre schön, wenn das Elixir-Team auf Basis von Livebook offiziell etwas wie elixir-desktop veröffentlichen würde. Also etwa ein offizielles Template-Projekt, bei dem man das Livebook-Repository forkt und daraus eine LiveView-basierte Desktop-Anwendung erzeugt
Livebook wird derzeit als ausführbare Datei für Windows und Mac verteilt. Wie wäre es, denselben Ansatz zu verfolgen, damit Entwickler wie bei Electron eigenständige ausführbare Dateien verteilen können?
LiveView Native [3] kenne ich auch, sehe es aber als eine andere Richtung
[1] https://github.com/elixir-desktop/desktop-example-app
[2] https://www.youtube.com/watch?v=Kiw6eWKcQbg
[3] https://native.live/
Ich freue mich auf den Tag, an dem die Ausrede es gibt keine Typen, die der Verbreitung von Elixir im Weg stand, verschwindet
Seit zehn Jahren lese ich hier tolle Geschichten über Elixir, und ich mag die Sprache auch.
Aber die Suche nach Elixir-Jobs habe ich vor ein paar Jahren aufgegeben, weil die Gehälter weiterhin niedriger wirkten als bei Mainstream-Sprachen.
Es könnte die Sprache sein, die ich am liebsten verwenden würde, aber für mich sind Gehalt und ein spannendes Produkt wichtiger als der Tech-Stack, sodass es in der Praxis vielleicht nichts wird. Trotzdem macht es weiterhin Spaß, sie aus der Ferne zu verfolgen.
Ich frage mich, ob du in den USA suchst oder in einer anderen Region.
Eine gute Neuerung in diesem Release ist die Ergänzung von
get_in/1, das mit Structs funktioniert. Man kann zum Beispielget_in(struct.foo.bar)schreiben.Wenn
foonilzurückgibt, löst der Zugriff aufbarkeine Exception aus.Für Ebenen, die keine normalen Maps sind, brauchte man
Access.key, etwa so:get_in(struct, [Access.key(:foo), :bar])Das ist das letzte Puzzlestück, das ich mir gewünscht habe. Ich bin gespannt auf die nächsten Schritte.
Ansonsten ist diese Sprache nach meinem Maßstab funktional zu 100 % vollständig.
Ist das immer noch so, oder muss man nicht mehr auf Erlang heruntergehen?