10 Punkte von xguru 2023-11-18 | 3 Kommentare | Auf WhatsApp teilen
  • Erleichtert den Aufbau nebenläufiger Software und ermöglicht Entwicklung ohne Sorgen über unvorhersehbare Performance, Laufzeitfehler, Data Races oder Typfehler
  • Zu den Merkmalen gehören automatische Speicherverwaltung, Move Semantics, statische Typisierung, typsichere Nebenläufigkeit und effiziente Fehlerbehandlung

Deterministische automatische Speicherverwaltung

  • Inko verwendet keine speicherverwaltende Garbage Collection, sondern setzt auf Speicherverwaltung auf Basis von Single Ownership und Move Semantics
  • Besitzene Werte werden gelöscht, wenn sie den Gültigkeitsbereich verlassen, und können unveränderlich oder veränderlich ausgeliehen werden
  • Durch die Verwendung von Single Ownership bietet Inko vorhersehbares Verhalten und Performance, ohne Zeit mit der Konfiguration der Garbage Collection zu verschwenden

Inko ist sicher

  • Mit Inko muss man sich keine Sorgen über Fehler machen, die in anderen Sprachen häufig vorkommen, etwa NULL-Pointer, Use-after-free-Fehler, Laufzeitfehler oder Data Races
  • Für optionale Daten steht der Typ Option zur Verfügung; außerdem werden unveränderliche und veränderliche Referenzen unterstützt, sodass Änderungen bei Bedarf eingeschränkt werden können

Macht Nebenläufigkeit einfach

  • Inko implementiert Nebenläufigkeit mit leichtgewichtigen Prozessen und verwendet ein von Erlang und Pony inspiriertes Nebenläufigkeitsmodell
  • Prozesse sind voneinander isoliert und kommunizieren über Nachrichten; der Compiler gewährleistet die Korrektheit durch Typprüfung
  • Bei der Datenübertragung zwischen Prozessen wird die Eindeutigkeit der Daten sichergestellt, wodurch Data Races unmöglich werden

Sorgt für korrekte Fehlerbehandlung

  • Inko verwendet einen Ansatz zur Fehlerbehandlung, der von Joe Duffys Artikel "The Error Model" inspiriert ist
  • Fehler werden als algebraischer Typ namens Result dargestellt; try und throw sorgen für syntaktische Vereinfachung
  • Für schwerwiegende Fehler, die nicht behandelt werden können oder nicht behandelt werden sollten, werden panics unterstützt, die das Programm abbrechen

Effizient

  • Inko will nicht mit Low-Level-Sprachen wie C oder Rust konkurrieren, sondern eine attraktive Alternative zu Sprachen wie Ruby, Erlang und Go bieten
  • Es verwendet einen Native-Code-Compiler mit LLVM als Backend und bietet eine Balance zwischen schnellen Kompilierungszeiten und guter Laufzeit-Performance
  • Der Native Code wird statisch mit einer kleinen Runtime-Bibliothek gelinkt, die in Rust geschrieben ist und Prozess-Scheduling, Non-Blocking I/O usw. verarbeitet

Pattern Matching

  • Inko unterstützt Pattern Matching für verschiedene Typen wie Tupel und algebraische Datentypen
  • Pattern Matching wird in Entscheidungsbäume kompiliert, wobei der Compiler versucht, die Größe möglichst klein zu halten
  • Der Compiler stellt sicher, dass alle Muster abgedeckt sind

3 Kommentare

 
ahwjdekf 2023-11-18

Mit Rust etwas gebaut, das Rust ähnlich ist ??

 
regentag 2023-11-18

Dass die Paketverwaltung von GitHub abhängig ist, finde ich etwas problematisch. Ich fände es gut, wenn auch Umgebungen berücksichtigt würden, die keine Internetverbindung herstellen können …

 
xguru 2023-11-18
Hacker-News-Kommentare
  • Das Nebenläufigkeitsmodell von Inko ist von Erlang und Pony inspiriert und verwendet leichtgewichtige Prozesse.

    • Prozesse sind voneinander isoliert und kommunizieren über Nachrichten.
    • Prozesse und Nachrichten werden mit Klassen und Methoden definiert, und der Compiler gewährleistet durch Typprüfung die Korrektheit.
    • Daten werden zwischen Prozessen mit eindeutiger Besitzübertragung gesendet, wodurch Data Races unmöglich sind und keine Deep Copies nötig sind.
    • Unterstützt Kanäle mit mehreren Produzenten und mehreren Konsumenten, sodass Kommunikation ohne explizite Referenzen zwischen Prozessen möglich ist.
  • Um ein Inko-Paket hinzuzufügen, muss ein GitHub-Repository erstellt werden.

    • Der Paketmanager von Inko unterstützt zwar auch andere Git-Repositories wie GitLab, die Liste wird jedoch mithilfe von GitHub-Repositories organisiert.
    • Es wird Besorgnis über die Tendenz der Community geäußert, von Microsoft-Produkten und Git abhängig zu werden.
  • Es werden Links zu Diskussionen über Inko bereitgestellt:

    • "Show HN: Inko 0.10.0 – build concurrent software with confidence" (September 2022, 3 Kommentare)
    • "Inko 0.5.0 released, featuring the first steps towards a self-hosting compiler" (September 2019, 7 Kommentare)
    • "Inko (a gradually-typed object-oriented programming language) 0.4.0 released" (Mai 2019, 1 Kommentar)
    • "Show HN: Inko – A safe and concurrent object-oriented programming language" (August 2018, 45 Kommentare)
  • Es wird die Frage nach Ähnlichkeiten mit Rust aufgeworfen:

    • Frage, ob Inko Rust ähnlich genug ist, dass es einen Grund gibt, Inko statt Rust zu wählen.
    • Es wird ein Beispiel dafür gewünscht, welche in Rust schwierigen oder umständlichen Programme sich in Inko leicht schreiben lassen.
  • Es werden Interesse an Inko und der Wunsch geäußert, es möge zu Golang werden:

    • Inko scheint auf GitLab begonnen zu haben; verbunden damit werden der Wunsch geäußert, es möge zu Golang werden, sowie die Notwendigkeit eines GC erwähnt.
    • Es wird nach den Unterschieden zu Gleam gefragt und Interesse daran geäußert, wie sich das JVM-Ökosystem nutzen ließe.
  • Es wird als interessante Tatsache geteilt, dass der Name Inko auf Telugu "noch eins" bedeutet.

  • Es gibt eine Diskussion über syntaktische Unterschiede zu Rust:

    • Detaillierter Vergleich der syntaktischen Unterschiede zwischen Rust und Inko.
    • Erwähnung kleiner Unterschiede wie bei Funktionsdeklarationen und der Darstellung von Generics.
  • Die Designentscheidungen von Inko werden positiv bewertet:

    • Eine C-/Java-ähnliche Syntax sorgt für Vertrautheit bei vielen Menschen.
    • Es wird die Benennung des Abschnitts zur Fehlerbehandlung hinterfragt.
  • Es wird die Notwendigkeit vorgefertigter Binärdateien erwähnt:

    • Erwähnung von Kompilierungsschwierigkeiten durch LLVM-Probleme und des daraus resultierenden mangelnden Interesses an Inko.
  • Zusätzliche Links zu verwandten Diskussionen werden bereitgestellt.