Donnerstag, 30. Januar 2014

Mein Wunschzettel an die perfekte Programmiersprache

Ich programmiere nun schon seit langer Zeit, und immer wieder vermisse ich in Programmiersprachen Features aus anderen Programmiersprachen. Hier mein Wunschzettel an eine perfekte Programmiersprache.

Lesbare Syntax

Programmquelltext wird i.d.R. nur einmal geschrieben - danach nur noch gelesen. Deswegen ist mir Lesbarkeit wichtiger, als kurze Schreibweise. Sprich: Ich möchte keine geschweiften Klammern, wenn ich auch ein begin und end haben kann - oder wenn dies ganz entfällt.

Schön gelöst in: Ada, Pascal, Python

Typstrenge, keine Pointer-Arithmetik - aber sichere Zeiger

Je früher ein Fehler auffällt - desto besser! Das Hantieren mit Zeigern ist gefährlich und muss sicher sein. Pointer-Arithmetik? Nein, danke! Funktionszeiger? Ja, bitte! Undefinierte Variablen? Nein, danke! Non-nullable Types? Ja, bitte!

Schön gelöst in: Ada, Pascal, C#, Go, Java, tlw. Vala

Native Unterstützung für verschiedene Mengen

Arrays, Listen, Tupel, Mengen, Multimengen, Hashsets, Dictionaries, offene Mengen... ich wünsche mir für diese Datenstrukturen nativen Support durch die Programmiersprache. Auch Operationen auf Mengen gehören dazu, wie man sie z.B. mit Linq hat.

Schön gelöst in: C#, Go

Generics

Denn wer schreibt schon gerne die selben Sachen doppelt?

Schön gelöst in: C#, Java

Objektorientierung, Interfaces, implizite Interfaces

Objekthierarchien sind normalerweise relativ flach (UIs mal ausgenommen), nehmen aber letztlich viel Arbeit ab. Interfaces helfen bei der Abstraktion. Implizit implementierte Interfaces sind zur Compile-Zeit prüfbar und reduzieren Abhängigkeiten im Quelltext.

Schön gelöst in: C#, Java, Go

Threads und Tasks, Rendez-vous, Message-basierte Kommunikation

Multitasking ist wichtig - und oft irrsinnig schwer. Threads und Tasks müssen natürlicher Bestandteil der perfekten Programmiersprache sein. Vernünftig gelöste Rendez-vous-Mechanismen (Synchronisation) vermeiden schwer erkennbare Fehler. Message-basierte Kommunikation umgeht viele Probleme, die durch Zugriff auf gemeinsam genutzten Speicher entstehen.

Schön gelöst in: C# (async, await), Ada (Rendez-vous), Go (Message-basiert)

Reflection, AOP, Metamodell

Den Quelltext sauber halten mit Metaprogrammierung - besser lesbar, weniger Fehler. In vielen Programmiersprache drin - aber so richtig überzeugend hab ich es noch nicht gesehen. Stattdessen scheint das immer "im Nachhinein angepflanscht".

Schön gelöst in: (?)

Memory Management

Ich wünsche mir eine Mischung aus Garbage Collection und deterministischer Speicherverwaltung. Ein GC kümmert sich um alles, was vielleicht vergessen wurde oder nicht performance-kritisch ist. Zudem wäre aber auch eine sichere Möglichkeit schön, Speicher explizit freizugeben.

Auch immer wieder kritisch: Wem "gehört" ein Objekt? Ein elegantes Konzept für weak references tut Not -besonders im Zusammenhang mit dem Events/Listener-Pattern: Wie lästig ist es doch, sich darum kümmern zu müssen, selber alle Listener zu deregistrieren - wie schön wäre ein Konzept von "Weak Listeners" als Teil der perfekten Programmiersprache.

Schön gelöst in: (?) - Ada und Vala haben einige interessante Ansätze

Bibliotheken, Bibliotheken, Bibliotheken - aber bitte sinnig

.NET und Java bringen einen RIESIGEN Satz an Bibliotheken mit - teilweise zu grob, teilweise zu viel. C und C++ bringen viel zu wenige Bibliotheken mit - mangelhaft.
Wichtige, immer wieder benötigte Funktionen sollten in kleinen Bibliotheken mit möglichst wenig Abhängigkeiten importiert werden können:
  • XML Verarbarbeitung
  • HTTP/Web-Clients
  • Web-Services (REST, WS-HTTP, ...)
  • Cryptographie
  • Komprimierung
  • Bildverarbeitung
  • GUI
  • ...
Außerdem sollten diese Bibliotheken aus einem zentralen Repository stammen und sich leicht beziehen und verwalten lassen.

Schön gelöst in: ... naja ... Go? C#? Java?

Contracts, Preconditions, Postconditions - verfügbar und optional

Preconditions und Postconditions ersparen Tests und sorgen für Robustheit. Mehr davon bitte - aber optional.

Schön gelöst in: Eiffel, Ada 2012, Vala, Spec#


Und jetzt bist du dran! Was steht auf deinem Wunschzettel an die perfekte Programmiersprache?