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.
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
- ...
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?
Und jetzt bist du dran! Was steht auf deinem Wunschzettel an die perfekte Programmiersprache?