- Fünf Jahre Studium an einer französischen Informatikschule und 20 Jahre Tätigkeit als freiberuflicher Entwickler
- Hauptsächlich an Kundenprojekten mit Ruby on Rails gearbeitet
- Beim Einstieg in Common Lisp ein Server-Management-Protokoll geschrieben, das einen ASN.1-Parser erzeugt
- In Common Lisp C-Code erzeugt, um einen SNMP-Server zu entwickeln
- Danach mehrere Projekte auf Basis von Common Lisp geschrieben:
- cl-unix-cybernetics – das Projekt mit den meisten Sternen auf GitHub
- cl-streams und cffi-posix entwickelt
- cl-facts – ein Triple Store, der als Graphdatenbank für Common Lisp dient
- Schnell, mit atomaren Transaktionen und Unterstützung für verschachtelbare Transaktionen
- Kompatibel mit
unwind-protect
- Nutzbar, wenn man nur drei Makros lernt
- Vorgestellt auf dem European Lisp Symposium (ELS)
- Während des Fokus auf Common-Lisp-Entwicklung gingen die Kunden verloren, aber die Überzeugung vom Potenzial von Lisp wurde noch stärker
Grenzen von virtuellen Maschinen (VMs) und Containern
- Experten weisen auf Probleme von VMs und Containern hin:
- VMs verschwenden unnötig CPU und Bandbreite
- Auf cgroups unter Linux basierende Container haben Schwachstellen für Remote Code Execution (RCE) und Privilege Escalation
- Jedes Jahr werden neue Sicherheitslücken entdeckt
- Bevorzugt OpenBSD und vermeidet damit Probleme von DevOps-Tools wie Terraform und Ansible
Grenzen von Common Lisp und Performance-Probleme
- In Clojure usw. treten durch den GC (Garbage Collector) Performance-Probleme auf:
- Ein Fehlschlag beim Entwickeln eines Strategiespiels, das Tausende von Einheiten verarbeiten musste
- Der GC der JVM bringt Performance- und Kostenprobleme mit sich
Entscheidung für den Wechsel zu C
- Erkennen der Grenzen von Common Lisp bei Performance und Portabilität:
- Linux, OpenBSD, GTK+ und GNOME sind alle in C geschrieben
- Letztlich Wechsel zu C, um Performance- und Portabilitätsprobleme zu lösen
Entwicklung der neuen Sprache KC3
- Entwicklung der Utility-Library libc3 → Sprache C3 → später in KC3 umbenannt
- Merkmale von KC3:
- Es gibt einen Interpreter (ic3) und einen Compiler (c3c)
- Erzeugt Datenstrukturen aus UTF-8-Puffern und wandelt sie wieder zurück
- Defensive Programmierung → von Anfang an minimale Bugs
- Keine Sicherheitsprobleme
- Datentypsystem auf Basis von enum-getaggten unions
Ergebnisse auf Basis von KC3
- cl-facts nach C89 portiert:
- Während der Covid-19-Zeit fertig entwickelt
- Triple hinzufügen, löschen, rekursives Query-System, Transaktionen, Logging, Persistenz usw. implementiert
- Parser und Generatoren für algorithmische Typen geschrieben:
- Einschließlich Structs, verketteter Listen, Maps, Hash-Tabellen, komplexer Zahlen, Tupel, Code-Blöcke usw.
- Starke Inspiration durch José Valim (Schöpfer von Elixir)
- ikc3 – ein REPL, das die Auswertungsergebnisse von KC3 ausgibt
- kc3_httpd – Entwicklung eines Webservers auf Basis eines MVC-Frameworks
- Auch die aktuelle Blog-Seite wird über kc3_httpd bereitgestellt
- Dokumentations-Website erstellt → nutzt den Markdown-zu-HTML-Konverter von KC3
Fazit
- Auf Basis der mit Common Lisp gewonnenen Erfahrungen der Wechsel zu C
- KC3 erzielt starke Ergebnisse bei Performance, Sicherheit und Portabilität
- Weitere Makros und Beispiele zu KC3 sollen folgen
1 Kommentare
Hacker-News-Kommentare
Ich sehe das anders. Ich habe in jungen Jahren viel VB benutzt, dann an der Universität Java, C und C++ gelernt und hauptsächlich C verwendet. Ich wurde Kernentwickler von Xfce und habe fünf Jahre lang daran gearbeitet
Ich kann dieses Gefühl vollkommen nachvollziehen. Seit einigen Jahren verspüre ich einen starken Drang, etwas in reinem C zu entwickeln
Ich habe vor langer Zeit mit C programmieren angefangen, und manchmal möchte ich noch immer in diese Zeit zurückkehren
Nachdem ich den Blogbeitrag gelesen hatte, war ich verwirrt darüber, was der Autor eigentlich vermitteln wollte
Es wurde ein kc3-Codebeispiel gegeben
C war meine erste Sprache, und ich habe damit einfache Konsolen-Apps und kleine Spiele gebaut
Manchmal code ich zum Spaß in C. Aber es gibt so viele wiederholende Aufgaben, dass es langweilig wird
C war erfolgreich, weil es praktisch war
Ich verstehe überhaupt nichts
Dieser Beitrag liest sich wie eine warnende Geschichte ohne Happy End