UStackUStack
Franz icon

Franz

Franz ist eine funktionale, prototyporientierte Programmiersprache mit knapper Syntax und Unterstützung für native Kompilierung via LLVM IR.

Franz

Was ist Franz?

Franz ist eine funktionale, interpretierte, dynamisch typisierte Allzweck-Programmiersprache mit knapper Syntax und einer umfangreichen Standardbibliothek. Ihr Kernzweck ist die Unterstützung funktionaler Programmiermuster bei gleichzeitiger Bereitstellung von Werkzeugen zur Effektverwaltung und vorhersagbaren Ausführung.

Das Projekt wird als prototyporientierte Sprache mit capability-sicheren Effekten und deterministischem Replay vorgestellt, einschließlich „strictly no side effects“ (mit einer explizit genannten Ausnahme für IO). Es umfasst außerdem einen Weg von der Quelle zu nativen ausführbaren Dateien über LLVM IR.

Wichtige Funktionen

  • Funktionaler Kern mit prototyporientierten Objekten: Verwendet eine kleine funktionale Basis plus prototyporientierte Objekte zur Modellierung von Verhalten, während die Sprache auf funktionale Konstrukte ausgerichtet bleibt.
  • Capability-sichere Effekte mit deterministischem Replay: Entwickelt, um Effekte aus importierten Franz-Dateien zu lokalisieren und zu steuern.
  • Streng keine Seiteneffekte (mit IO-Tabellen-Ausnahme): Das Sprachmodell vermeidet Seiteneffekte, mit Ausnahme eines explizit erwähnten IO-Mechanismus.
  • Native Kompilierung über LLVM IR: Unterstützt die direkte Kompilierung zu nativen ausführbaren Dateien mit LLVM IR.
  • Listenliterale und LLVM-Listenoperationen: Enthält Listenliterale wie [1, "hello", 3.14] und verschachtelte Listen, sowie Operationen wie head, tail, cons, empty?, length, nth und is_list.
  • Vergleichs- und Mathematikprimitive für gängige Typen: Bietet Gleichheits- und Ordnungsoperatoren (is, less_than, greater_than) für Ganzzahlen, Fließkommazahlen und Zeichenketten, plus Mathematikfunktionen wie remainder, power, random, floor, ceil, round, abs, min, max und sqrt.
  • Kontrollfluss und mustersimilaren Bedingungen: Bietet if/when/unless-Konstrukte und „cond chains“ für mustersuchartige Mehrwegverzweigung.
  • Lexikalisches Scoping mit schnappschussbasierten Closures: Implementiert lexikalisches Scoping, wobei Closures Variablen aus ihrer Definitionsumgebung erfassen; unterstützt beliebig tief verschachtelte Closures.
  • Capability-basiertes Sandboxing für importierten Code: Verwendet sandboxierte Ausführungsmuster über use_with() und Effektlokalisierung über use_as() und Punktnotation (wie im Repository-Text beschrieben).

Wie man Franz verwendet

  1. Klonen oder Öffnen Sie das Franz-Repository und prüfen Sie die enthaltene README.md und Beispieldateien (zum Beispiel examples/mult-table.franz und examples/game-of-life.franz).
  2. Prüfen Se

Alternativen

  • Funktionale Programmiersprachen mit starken Typsystemen (z. B. Sprachen der ML-Familie): Wenn Sie hauptsächlich eine funktionale Syntax mit## Alternativen
  • Funktionale Programmiersprachen mit starken Typsystemen (z. B. Sprachen der ML-Familie): Wenn Sie hauptsächlich eine funktionale Syntax mit vorhersehbarem Scoping und Closures wünschen, aber keine LLVM-basierte native Kompilierung als Schwerpunkt benötigen.
  • Prototypbasierte Sprachen (z. B. JavaScript mit funktionalen Mustern): Nützlich, wenn Ihr Interesse an prototyporientierter Objektmodellierung liegt, obwohl sich Workflow und Effektmodell von Franz unterscheiden.
  • Allgemeine kompilierte Sprachen mit funktionalen Merkmalen (z. B. Sprachen, die über LLVM kompilieren): Wenn Sie LLVM-IR-Kompilierung und funktionale Konstrukte wünschen, aber ein Ökosystem mit anderer Syntax und anderen Laufzeitkonventionen bevorzugen.
  • Skriptsprachen für Prototyping mit Sandboxing-Ansätzen: Wenn Ihre Priorität schnelles Experimentieren mit kontrollierter Ausführung ist (das Repository diskutiert capability-basierte Sicherheitsmuster), können Sie eine andere Laufzeit mit eigenen Sandbox-Mechanismen wählen.