Einleitung
Hallo zusammen. Willkommen im Dezember. Ich hoffe, euch geht es gut.
Wir hatten einen super vollen Oktober. Wir haben gerade eine große Verbesserung für die Community-Lösungen eingeführt. Wir entfernen jetzt Duplikate, sodass ähnliche Lösungen nur einmal angezeigt werden. Außerdem haben wir neue Sortieroptionen und die Möglichkeit hinzugefügt, nach Code zu suchen. Und wenn du dir C# ansiehst, wirst du sehen, dass wir auch das Filtern nach verschiedenen Programmierkonzepten ergänzt haben. So kannst du jetzt nach Lösungen suchen, die Bitshifting, Rekursion oder etwas anderes verwenden, das dir gefällt. In der Community-Woche rollen wir das auf weitere Tracks aus.
Aber konzentrieren wir uns jetzt auf #12in23. Der November war ein interessanter Monat, in dem wir uns mit Assemblersprachen beschäftigt haben, aber diesen Monat geht es um eine sehr vielfältige Auswahl an Sprachen, nämlich ColdFusion, Groovy, Lua, VimScript und Wren. Wie immer wird Erik uns erklären, was diese Sprachen interessant und einzigartig macht.
Die Badges
Wie immer kannst du das December-Diversions-Badge verdienen, indem du 5 beliebige Übungen in diesen Sprachen löst. Außerdem gibt es das Year-Long-Badge, auf das viele von euch hinarbeiten, wie ich weiß. Dafür haben wir 5 ausgewählte Übungen für dich. Und zwar:
- All Your Base: Wandle eine Zahl, die als Folge von Ziffern dargestellt ist, in eine andere Basis um.
- Array abflachen: Nimm eine verschachtelte Sammlung und gib eine einzelne, nicht verschachtelte Sammlung zurück.
- Damenangriff: Finde heraus, ob sich zwei Damen auf einem Schachbrett gegenseitig angreifen können.
- D&D-Charakter: Erzeuge zufällig Dungeons-&-Dragons-Charaktere.
- Lauflängenkodierung: Implementiere Lauflängenkodierung und deren Dekodierung.
Überblicke
ColdFusion
- 1995 von der Allaire Corporation entwickelt, die 2001 von Macromedia übernommen wurde und 2005 wiederum von Adobe.
- Als Plattform für schnelle Webentwicklung konzipiert
- Läuft auf der Java Virtual Machine (JVM)
- Es gibt zwei getrennte Syntaxen, die unterschiedlich aussehen, aber semantisch identisch sind:
- Die ältere, tagbasierte Auszeichnungssyntax, die HTML erweitert, um dynamische Inhalte darzustellen.
- Die neuere, ECMAScript-ähnliche Syntax kann dort verwendet werden, wo die tagbasierte Syntax zum Einsatz kommt, aber auch in separaten Skriptdateien. Das Ziel war, Geschäftslogik aus dem Markup in eine separate Skriptdatei zu verlagern.
- CFScript ist eine Allzwecksprache, die auf der JVM läuft, und so verwendet Exercism sie auch. In der Praxis hat sie sich nie wirklich weit von ihren Web-Server-Wurzeln entfernt.
- ColdFusion ist ein kostenpflichtiges Produkt, aber die Lucee Foundation (eine gemeinnützige Organisation mit Sitz in der Schweiz) entwickelt ihren Open-Source-ColdFusion-Server weiterhin aktiv, und dessen Lucee Server nutzen wir für den Exercism-Track.
- Wird weiterhin aktiv entwickelt
- Wird vor allem in Unternehmenssoftware eingesetzt; zu den Kunden gehören unter anderem Apple, Adobe und General Motors
Groovy
- Ab 2003 von James Strachan entwickelt. 2015 wurde das Projekt von Apache übernommen.
- Das Ziel war, eine dynamisch typisierte Sprache auf der JVM zu entwickeln (im Gegensatz zu Java, das statisch typisiert ist), die außerdem Boilerplate-Code reduzieren kann.
- Obwohl der meiste Java-Code auch gültiger Groovy-Code ist, gibt es viele Unterschiede (z. B. erlaubt Groovy dynamische Typisierung und fortgeschrittene Metaprogrammierung). Die Sprache wurde außerdem stark von Python und Ruby beeinflusst.
- Wird für Skripting, Build-Tools (Gradle), CI (Jenkins), Web-Apps (Grails) und Tests (Spock) verwendet. Ein beliebtes Drittanbieter-Add-on für Atlassian-Tools ermöglicht Groovy-Skripting.
Lua
- Lua wurde 1993 von Roberto Lerusalimschy, Luiz Henrique de Figueiredo und Waldemar Celes an der Päpstlichen Katholischen Universität von Rio de Janeiro in Brasilien entwickelt.
- Der Name wird LOO-ah ausgesprochen und bedeutet auf Portugiesisch „Mond“. Er verweist auf die Sprache Sol, von der Lua teilweise inspiriert wurde und die auf Portugiesisch „Sonne“ bedeutet.
- In erster Linie für das Einbetten konzipiert, mit Fokus auf Geschwindigkeit, Portabilität, Erweiterbarkeit und einfache Nutzung während der Entwicklung.
- Beeinflusst von Modula, CLU, C++, SNOBOL und AWK. So wie LISP und Scheme einen einzigen, allgegenwärtigen Mechanismus für Datenstrukturen hatten (die Liste), hat Lua das mit seiner Tabelle.
- Wird über Bytecode interpretiert, meistens zur Laufzeit, kann aber auch vorab erfolgen.
- Wird vor allem für Skripting verwendet, z. B. in Spielen wie World of Warcraft, Dota 2 und Crysis oder in Anwendungen wie Adobe Lightroom und mancher FreeBSD-Systemsoftware. Außerdem wird sie häufig eingesetzt, um Erweiterbarkeit zu schaffen, z. B. in Redis, Neovim und Nginx.
VimScript
- VimScript (auch Vim Script (mit Leerzeichen) oder VimL für Vim Language genannt) ist die Skriptsprache, die im Texteditor Vim verwendet wird.
- Abgeleitet von ex, dem zeilenorientierten visuellen Editor, der Vi vorausging
- Keine Allzwecksprache, sondern eine spezialisierte Sprache, die eine effektive und optimierte Umgebung zum Skripten bietet, um Vims Funktionalität durch Plugins, Konfigurationen, Makros und Funktionen zu erweitern und anzupassen.
- Während Vim hauptsächlich in C geschrieben ist, können Nutzer Vim mit Vimscript über eine High-Level-Skriptsprache anpassen und erweitern.
- Wird in, nun ja, Vim verwendet, aber auch in NeoVim, einem Fork von Vim
Wren
- 2016 von Bob Nystrom geschrieben, dem Autor des Buchs Crafting Interpreters
- Ziele: klein, einfach, schnell.
- Für das Einbetten in andere Anwendungen konzipiert. Der Autor fand bestehende Optionen (wie Lua und TCL) unzureichend und wollte eine einfache, einbettbare Sprache, die sich für Menschen mit objektorientiertem Hintergrund natürlich anfühlt.
- Verwendet in:
- TIC-80: ein Fantasiecomputer zum Erstellen, Spielen und Teilen winziger Spiele (ähnlich wie PICO8)
- DOME: ein plattformübergreifendes Framework für die Spieleentwicklung.
- luxe: eine plattformübergreifende Game-Engine für schnelle Spieleentwicklung.
- Wren Console: ein Wren-REPL und ein Kommandozeilen-Tool, größtenteils von dem langjährigen Exercism-Mitwirkenden Josh Goebel in Wren selbst geschrieben, das wir für den Wren-Track nutzen
Und wie unterscheiden sie sich programmiertechnisch?
ColdFusion
- Dynamisch typisiert
- Multiparadigmatisch, hauptsächlich objektorientiert, aber zunehmend funktional.
Groovy
- Meist dynamisch typisiert, kann aber auch statisch typisiert sein (und graduell typisiert)
- Kann sowohl interpretiert als auch kompiliert werden (ab Version 2). Aus diesem Grund wird sie oft in Skripten verwendet
- Multiparadigmatisch: hauptsächlich objektorientiert, aber auch imperativ, funktional und deklarativ
Lua
- Dynamisch typisiert und meist interpretiert, kann aber vorkompiliert werden
- Multiparadigmatisch: prozedural, objektorientiert (wenn auch etwas anders), funktional und datengetrieben
VimScript
- Dynamisch typisiert und interpretiert
- Multiparadigmatisch: imperativ, funktional und eine einfache Form der objektorientierten Programmierung
Wren
- Dynamisch typisiert, aber statisch definiert; das macht den Compiler sehr schnell.
- In erster Linie eine objektorientierte Sprache, aber auch imperativ und ein bisschen funktionale Programmierung
Was macht diese Sprachen so besonders?
ColdFusion
- Hervorragende Trennung zwischen Serververwaltung und Anwendungserstellung. Die Administrationskonsole richtet Datenbankverbindungen und Serverüberwachung ein (und alles Weitere), die Anwendungsersteller brauchen nur den Namen einer Datenquelle (ein CF-Objekt mit den nötigen Methoden, das bereits mit den passenden Teilen des DBMS verbunden ist) sowie Schreibzugriff auf ein Verzeichnis für die Anwendungsdateien.
- Nutzt die Stärke der JVM und des Java-Ökosystems, was bedeutet, dass man jede beliebige Java-Bibliothek importieren und in CF verwenden kann
Groovy
- Allzweck: kann für fast jede Art von Arbeit verwendet werden, einschließlich Apps und Websites.
- Da sie auf der JVM läuft, kommen ihr alle deren Vorteile zugute: eine ausgereifte, sehr leistungsfähige VM und eine riesige Auswahl an Bibliotheken. Sie arbeitet gut mit Java zusammen
- Löst viele Probleme, die Leute mit Java haben könnten, etwa geprüfte Ausnahmen,
- Null-Sicherheit, Ausführlichkeit und das Fehlen fortgeschrittener Metaprogrammierung
- Moderne Sprache: fortgeschrittene Typinferenz, Closures, eingebaute Syntax für reguläre Ausdrücke, automatisch generierte Getter und Setter
- Großartige Unterstützung für funktionale Programmierung: Closures (wie Rubys Blöcke), Currying (partielle Anwendung), faule Auswertung, Unveränderlichkeit und mehr
Lua
- Allzweck: wird in eingebetteten Systemen, für Prototyping, Skripting sowie Spiel-, Web- und Backend-Entwicklung verwendet.
- Einfach: verhältnismäßig wenig Syntax, was die Sprache leicht zu lernen macht. Nur ein paar atomare Datentypen und nur einen eingebauten zusammengesetzten Datentyp: die Tabelle. Der Speicher wird per Garbage Collection verwaltet
- Portabel: der Interpreter ist in ANSI C geschrieben, für das es für fast jede Plattform einen Compiler gibt
VimScript
- Einfach: eine schlanke Syntax, die leicht zu lernen und zu verwenden ist.
- Interoperabilität: einfacher Zugriff auf Dateien, Shells und andere Programme. Die ganze Kraft externer Tools, ohne Vim zu verlassen.
- Ausdrucksstark: mit wenig Aufwand viel erreichen. Schreibe kompakte Skripte, die gut lesbar sind.
- Leistungsstarke Regex-Engine: Die Regex-Implementierung von Vimscript ist von der von Emacs Lisp inspiriert und bietet ein mächtiges Werkzeug für die Textbearbeitung.
Wren
- Klein: die VM ist in weniger als 4000 Zeilen Code implementiert
- Vorbildlich: Die Implementierung der VM ist liebevoll kommentiert, in C geschrieben und nicht allzu schwer zu lesen. Eine großartige Möglichkeit zu lernen, wie man eine Sprache baut. Der größte Teil der Standardbibliothek ist in Wren selbst implementiert, sodass du auch sehen kannst, wie das umgesetzt ist.
- Vertraut: Die Syntax macht den Einstieg schneller. Wenn du mit Java oder C++ vertraut bist, fühlst du dich sofort zu Hause. Erlaubt Methodenüberladung nach Stelligkeit
- Richtig gute Dokumentation: Die Doku für Sprache und Standardbibliothek ist gut lesbar, umfangreich und voller Beispiele.
- Eine kleine, aber überraschend vollständige Standardbibliothek.
Herausragende Merkmale
ColdFusion
- Batteries included: Unmengen sind eingebaut: Arbeit mit PDF, ZIP, Excel, XML, JSON, API-Erstellung, E-Mail, S3-Integration, viele verschiedene Datenbanken… ohne zusätzliche Pakete zu installieren. Ideal, um Versionsinkompatibilitäten zu reduzieren
- Skalierbar und sicher, ideal für Unternehmenssoftware
- Einfache, intuitive Programmierung, mit der Anfänger sehr schnell komplexe, datengetriebene Webseiten zum Laufen bringen. Die DreamWeaver-Integration ist hervorragend.
Groovy
- Flexible Syntax: Punkte und Klammern können weggelassen werden, was die Erstellung sehr schöner domänenspezifischer Sprachen ermöglicht
- Metaprogrammierung: unterstützt sowohl Laufzeit- als auch Compile-Zeit-Metaprogrammierung. Zum Beispiel erzeugt eine @ToString-Annotation zur Compile-Zeit eine ToString-Implementierung, und das Ändern der Metaklasse eines Objekts zur Laufzeit ermöglicht Monkey-Patching.
- Builder: JSON, XML und HTML schnell verarbeiten und erzeugen mit schön aussehendem Code. Mit Swing bauen für schnelle GUI-Entwicklung.
- Traits: Groovy-Traits lassen dich Verhalten und Eigenschaften in wiederverwendbaren Bausteinen zusammensetzen. Ähnlich wie Rubys Mixins.
Lua
- Einbettbar: darauf ausgelegt, leicht einbettbar zu sein. Hat eine relativ einfache C-API, die das Einbetten erleichtert. Die Größe ist kein Problem: der vollständige Referenzinterpreter ist nur 247 kB groß!
- Erweiterbar: Die Basissprache wird bewusst relativ klein gehalten, erlaubt aber ein einfaches Erweitern der Sprache. Das macht die Sprache leichter zu lernen, schlanker beim Einbetten und sehr flexibel
- Schnell: Lua ist oft eine der schnellsten dynamischen Sprachen, besonders mit dem LuaJit-Interpreter
VimScript
- Erweiterbarkeit: Vimscript ermöglicht es dir, deinen Editor um neue Funktionen zu erweitern
- Anpassbar: Passe deinen Editor so an, dass er genau so funktioniert, wie du es magst (Vimscript-Plugins selbst sind hauptsächlich in Vimscript geschrieben)
- Ereignisgesteuert: automatische Codeausführung aufgrund bestimmter Ereignisse oder Bedingungen wie das Öffnen einer Datei oder das Speichern eines Buffers.
- Nutze die Kraft von Vim: integrierter Zugriff auf Vims Funktionen und APIs, mit denen Skripte Text, Buffer, Fenster und mehr bearbeiten können.
Wren
- Schnell: großartige Leistung für eine dynamische Sprache
- Einbettbar: leicht in andere Software einzubetten. Der Entwickler der Sprache war früher Spieleentwickler: Er wollte Spiele um Skripting-Möglichkeiten erweitern können. Die C-API ist recht sauber und einfach.
- Nebenläufig: einfache Nebenläufigkeit und Coroutinen mit Fibers, einem sehr leichtgewichtigen Konstrukt (wie Goroutines oder Erlang-Prozesse), die leicht miteinander kommunizieren können.
Was du wählen solltest
- Wenn du Webanwendungen bauen möchtest, sind ColdFusion und Groovy eine gute Wahl
- Wenn du dich für eine Sprache interessierst, die eingebettet werden kann, sind Lua und Wren die naheliegendsten Optionen, aber auch Groovy ist einen Blick wert
- Dieselben drei Sprachen, Lua, Wren und Groovy, sind auch sinnvoll, wenn du Allzweck-Skripte schreiben möchtest
- Wenn du mit der JVM arbeitest, sind ColdFusion und Groovy die naheliegende Wahl
- Wenn dir Leistung wichtig ist, sind Lua und Wren wahrscheinlich deine besten Optionen
- Wenn dein Haupteditor Vim oder NeoVim ist, ist VimScript natürlich eine ausgezeichnete Wahl
- Wenn du mehr über Compiler und virtuelle Maschinen lernen oder selbst welche bauen möchtest, ist Wren perfekt für dich
- Wenn du einen objektorientierten Hintergrund hast, ist Wren wahrscheinlich die am leichtesten zu lernende Sprache
- Wenn dir LISPs einziges, allgegenwärtiges Datenstruktur-Design gefallen hat, probier Lua aus
- Wenn du ereignisgesteuerte Programmierung ausprobieren möchtest, schau dir VimScript an