Was stört/fehlt euch bei aktuellen Programmiersprachen?



  • Hallöle

    Rein aus Interesse (Und weil ich immer noch an meiner Sprache bastle :p ):

    • Was stört euch bei gängigen Sprachen?
    • Welche Sprachfeatures vermisst ihr?
    • Auf welche Probleme seid ihr gestoßen, die in aktuellen Sprachen unzureichend/nicht gelöst werden?
    • ...

    Grußle,
    Der Kellerautomat


  • Mod

    Schwer zu beantworten, da es immer eine gängige Programmiersprache gibt, die einen bestimmten Nachteil nicht hat, dafür aber andere. Daher setzt man sie eben für Zwecke ein, in denen die Nachteile nicht so schwer wiegen, die Vorteile um so mehr. Die perfekte Programmiersprache für sämtliche Zwecke kann es nicht geben, weil viele dieser Vorteile/Nachteile Abwägungssache sind, bei denen man als Designer der Sprache bloß eine Entscheidung in eine Richtung treffen kann, von der man glaubt, dass sie in mehr Anwendungsfällen zum Vorteil ist als zum Nachteil.





  • Interessanter Thread, danke dafür.
    Evtl. hat sich aber ja in den letzen drei Jahren was getan. Insbesondere mit dem C++11 Standard und Java 7/8. 😉



  • C++11 hat immernoch kein Makrosystem wie in Scheme.



  • Mal auf C++ bezogen (ohne Library):
    - Pointer Aliasing verhindert Optimierungen (strict aliasing ist nicht ganz zufriedenstellend)
    - AST Macros, jetztige Macros entfernen (für Modul-System)
    - Module
    - inout (wie in D)
    - Mit Syntax aufräumen (Templates, Lambdas)
    - Variablen schon vor Scopeende deleten können (automatisch bei move)
    - Mehr standardisierte Hardwareintrinsics (prefetch, overflow)



  • Jo, ist eig interessant dass man die Template-Syntax mit Modulen, constexpr und Concepts komplett umkrempeln und implizit machen könnte. Und Hardwareintrinsics fehlen mir auch dauernd.



  • Soweit kommt's, dass wir dir die Design-Arbeit abnehmen :p

    Ich seh es so wie SeppJ. Es kann keine (nichtmal nahezu) perfekte Sprache geben, denn was du für eine Aufgabe vereinfachst, erschwert den Nutzen für eine andere. Möchtest du etwas simpler gestalten, lässt du etwa die Funktionen niedrigeren Levels aus, auf denen deine aufbaut, oder du lässt sie und überlädst damit die Sprache (Fall entsteht: "viele Lösungen für ein Problem").



  • Es kann keine (nichtmal nahezu) perfekte Sprache geben

    Das hat schon Lisp erkannt. Deswegen hat es das Werkzeug fuer Sprachen gleich mitgeliefert, um eigenen problembezogen Sprachen fuer die Domain basteln zu koennen. Und da nichts perfekt ist: Das machte Codewartung schwierig, da vielleicht jeder Programmierer seine eigene DSL fuer das Problem entwirft.



  • knivil schrieb:

    Das machte Codewartung schwierig, da vielleicht jeder Programmierer seine eigene DSL fuer das Problem entwirft.

    Deshalb ist Java so beliebt, weil jeder Doof (die Mehrheit der Programmierer) anderen Code versteht und sich in Bibliotheken schnell einarbeitet.

    DSLs sind zwar schön, aber schädlich.

    Die Aufgabe einer Sprache ist es, DSLs zu verbieten und ein möglichst einheitliches Sprachkonzept, was möglichst einfach ist für möglichst viele Domains möglichst ohne viel Syntaxoverhead über eine DSL einsetzbar zu machen. Und besonders wichtig: Die Sprache soll möglichst einfach zu lernen sein.

    Deshalb ist Java top und Scala flop, obwohl Scala vom Ausdruck her mächtiger ist.



  • Kellerautomat@work schrieb:

    Rein aus Interesse (Und weil ich immer noch an meiner Sprache bastle :p ):

    Was ist denn das Ziel Deiner Sprache?

    Kellerautomat@work schrieb:

    [*]Was stört euch bei gängigen Sprachen?

    Prosa.
    Die Compiler nutzen die Möglichkeiten der semantischen Analyse nicht voll aus, wobei C++ hier noch sehr positiv hervorsticht, aber eben vieles auch unbeachtet lässt.
    Baue ich ein Objekt auf, befinde ich mich in einem anderen Zustand als wenn ich das Objekt nutze. Ich würde das zum Beispiel gerne unterscheiden.

    Kellerautomat@work schrieb:

    [*]Welche Sprachfeatures vermisst ihr?

    Eine sinnvolle Fehlerbehandlung und -vermeidung.
    Exceptions halte ich für so ungefähr das letzte - außer im Ausnahmefall. In gängigen Sprachen werden Exceptions aber im Regelfall benutzt: Taugt also nix.

    Kellerautomat@work schrieb:

    [*]Auf welche Probleme seid ihr gestoßen, die in aktuellen Sprachen unzureichend/nicht gelöst werden?

    Früher hatte ich dafür mal einen Aktenordner. ^^

    Was ist Dein Ziel?



  • Ich will ein C++# - die ganzen coolen C# Features in C++ einbauen (+ der dicken Bibliothek), aber ohne dass Microsoft da die Finger drin hat. 🙂



  • Xin schrieb:

    Was ist denn das Ziel Deiner Sprache?

    Eine Sprache, die:

    • Ausdrucksstark und prägnant ist, ohne dabei unleserlich zu werden (z.B. Pattern Matching, damit verbunden auch Tuple in der Sprache eingebaut, oder auch std::optional aka Nullable in die Sprache)
    • Den Programmierer nicht einschränkt (MI, nutzerdefinierte Operatoren, ...)
    • Codegenerierung unterstützt (Meta-Programme, die Code erzeugen - mit schöner Sytax. Ich will mir meinen Serialisierungscode mittels Compiletime-Reflection automatisch generieren lassen können.)
    • Schwer falsch zu verwenden ist
    • Gut optimierbar ist (Sprachkonstrukte für Parallelisierung und Vektorisierung)
    • Keinen GC hat, dafür RAII/Refcounting unterstützt (GCs sind ja mal sowas von Vorgestern)

    Liste nicht nach Priorität oder Wichtigkeit sortiert.

    Xin schrieb:

    Prosa.
    Die Compiler nutzen die Möglichkeiten der semantischen Analyse nicht voll aus, wobei C++ hier noch sehr positiv hervorsticht, aber eben vieles auch unbeachtet lässt.
    Baue ich ein Objekt auf, befinde ich mich in einem anderen Zustand als wenn ich das Objekt nutze. Ich würde das zum Beispiel gerne unterscheiden.

    Was du damit meinst, ist mir nicht klar. Könntest du mir das genauer erklären?

    Xin schrieb:

    Eine sinnvolle Fehlerbehandlung und -vermeidung.
    Exceptions halte ich für so ungefähr das letzte - außer im Ausnahmefall. In gängigen Sprachen werden Exceptions aber im Regelfall benutzt: Taugt also nix.

    Warum sind Exceptions schlecht, nur weil sie oft falsch verwendet werden?

    Xin schrieb:

    Früher hatte ich dafür mal einen Aktenordner. ^^

    Dann kram mir den mal hervor, würde mich interessieren. 😉


  • Mod

    Was mir bei der Beschreibung deiner Sprache noch fehlen würde, wäre eine umfangreiche Standardbibliothek. Das stört mich schon bei C++ ein wenig, dass man doch wirklich nur das absolute Minimum zur Verfügung hat. Gerade da Portabilität nicht auf deiner Liste steht (was mir auch fehlen würde, aber das ist dann eben ein Grund für mich, die Sprache nicht zu nutzen, für andere Leute hingegen ein Argument dafür, da unportable Sprachen andere Vorteile haben können), kannst du da richtig reinhauen.
    Ja, eine Standardbibliothek ist Teil einer Sprache, auch wenn es der Teil ist, der dem Sprachdesigner am wenigsten Spaß macht. Aber es ist der Teil, mit dem der Programmierer oftmals den meisten Kontakt hat.



  • Erstmal muss ich die Sprache hinbekommen, dann kann man über eine stdlib reden. 😃
    Aber du hast schon Recht, eine große stdlib ist auf jeden Fall ein Muss.

    Betriebssystemunabhängig auf jeden Fall, aber ich werde mir keine Mühe machen, damit meine Implementierung mit MSVC kompiliert. :p



  • Kellerautomat@work schrieb:

    Betriebssystemunabhängig auf jeden Fall, aber ich werde mir keine Mühe machen, damit meine Implementierung mit MSVC kompiliert. :p

    Welche Implementierungsstategien hast du schon festgelegt?
    IMO hast du dort mehr potenzielle Entwickler, besonders im native Bereich.



  • Zeus schrieb:

    Kellerautomat@work schrieb:

    Betriebssystemunabhängig auf jeden Fall, aber ich werde mir keine Mühe machen, damit meine Implementierung mit MSVC kompiliert. :p

    Welche Implementierungsstategien hast du schon festgelegt?
    IMO hast du dort mehr potenzielle Entwickler, besonders im native Bereich.



  • Oh, mein letzter Test ist wohl irgendwie verschwunden. Post bitte einfach löschen.

    Ich habe noch nichts implementiert, was man sinnvoll verwenden könnte. Bin auch mit dem aktuellen Design noch nicht zufrieden.



  • Kellerautomat@work schrieb:

    Xin schrieb:

    Was ist denn das Ziel Deiner Sprache?

    Eine Sprache, die:

    • Ausdrucksstark und prägnant ist, ohne dabei unleserlich zu werden (z.B. Pattern Matching, damit verbunden auch Tuple in der Sprache eingebaut, oder auch std::optional aka Nullable in die Sprache)
    • Den Programmierer nicht einschränkt (MI, nutzerdefinierte Operatoren, ...)
    • Codegenerierung unterstützt (Meta-Programme, die Code erzeugen - mit schöner Sytax. Ich will mir meinen Serialisierungscode mittels Compiletime-Reflection automatisch generieren lassen können.)
    • Schwer falsch zu verwenden ist
    • Gut optimierbar ist (Sprachkonstrukte für Parallelisierung und Vektorisierung)
    • Keinen GC hat, dafür RAII/Refcounting unterstützt (GCs sind ja mal sowas von Vorgestern)

    Liste nicht nach Priorität oder Wichtigkeit sortiert.

    Mir scheint, wir haben sehr ähnliche Ziele.

    Kellerautomat@work schrieb:

    Xin schrieb:

    Prosa.
    Die Compiler nutzen die Möglichkeiten der semantischen Analyse nicht voll aus, wobei C++ hier noch sehr positiv hervorsticht, aber eben vieles auch unbeachtet lässt.
    Baue ich ein Objekt auf, befinde ich mich in einem anderen Zustand als wenn ich das Objekt nutze. Ich würde das zum Beispiel gerne unterscheiden.

    Was du damit meinst, ist mir nicht klar. Könntest du mir das genauer erklären?

    Beispiel: Ich schreibe einen Compiler... während des Parsens baue ich ein Objekt auf. Während der Codegenerierung nehme ich das gleiche Objekt, um es auszulesen.
    Während des Parsens stehen mir Funktionen zur Verfügung, die ich in dem Moment nicht rufen können möchte, während der Codegenerierung stehen mir Funktionen zum Parsen zur Verfügung.

    Da könnte man auch ein paar Wrapper drumrum bauen. Aber warum soll ICH das tun?

    Kellerautomat@work schrieb:

    Xin schrieb:

    Eine sinnvolle Fehlerbehandlung und -vermeidung.
    Exceptions halte ich für so ungefähr das letzte - außer im Ausnahmefall. In gängigen Sprachen werden Exceptions aber im Regelfall benutzt: Taugt also nix.

    Warum sind Exceptions schlecht, nur weil sie oft falsch verwendet werden?

    Keiner sagt, dass Exceptions im Ausnahmefall schlecht sind.

    Aber das Konzept lädt zum Exception-Ping-Pong ein. Das Konzept ist also dazu gedacht, Fehler zu fangen, bei einem Fehler in der Fehlerbehandlung verliere ich aber die Information, wer den Fehler ausgelöst hat, weil nun eine vollkommen andere Exception durch mein Programm fliegt, die ich auch nicht erklären kann, weil sie im eigentlichen Programmteil ja gar nicht geworfen werden sollte. Wo kommt die her und was muss ich falsch machen, damit ein Fehler erzeugt wird, bei dem dann die Fehlerkorrektur fehlschlägt?

    Debug das. Das ist teuer... ^^
    (Ich war mal Java Entwickler, aber selbst gutes zureden half nicht, Exceptions sinnvoll einzusetzen, mit dem Ergebnis, dass ich sowas in einer noch verzwickteren Situation debuggen musste, weil sich Exception, die eigentlich nicht existieren konnte, natürlich in meinem catch hängenblieb...).

    Kellerautomat@work schrieb:

    Xin schrieb:

    Früher hatte ich dafür mal einen Aktenordner. ^^

    Dann kram mir den mal hervor, würde mich interessieren. 😉

    Das kann ich sehr gut nachvollziehen. ^^
    Ich bin selbst immer auf der Suche nach interessanten Ideen, von daher weiß ich auch, wie aufwändig und teuer es ist, an gute Ideen zu kommen. Ich verbringe damit jetzt 14 Jahre, sie zu sammeln, zu ordnen und in Syntax zu gießen, die Syntax zu verwerfen und neu anzufangen. Ursprünglich war ich mal C++ kompatibel - lange her ;-).
    Anfangs suchte ich offen nach Mitstreitern und das habe ich inzwischen aufgegeben, habe da auch erfolglos Zeit und Geld investiert, also mache die Geschichte jetzt alleine: Das hat sich als schneller und billiger erwiesen.

    Inzwischen bin ich auf dem Stand, dass ich in etwa weiß, was ich wie umsetzen möchte und habe ein paar Dinge auch bereits lauffähig implementiert, was rund 150kLOC darstellt.
    Ich hoffe, Du bist mir nicht böse, wenn ich das nicht einfach so verschenken mag.

    Es spricht aber nichts dagegen, sich auszutauschen. Ich bin ja durchaus auch neugierig. ^^



  • Kellerautomat@work schrieb:

    Pattern Matching

    Wo ist der Vorzug zu SFINAE?

    Tuple in der Sprache eingebaut

    Wäre für die Definition von Variablen ganz praktisch.

    std::optional aka Nullable

    Nö. Nullable ist entweder intrusive oder Bibliothekssache (Punkt-Operator).

    nutzerdefinierte Operatoren

    Sehe den Sinn nicht ganz. Lieber Infix-Funktionsaufrufe.

    Codegenerierung unterstützt (Meta-Programme, die Code erzeugen - mit schöner Sytax. Ich will mir meinen Serialisierungscode mittels Compiletime-Reflection automatisch generieren lassen können.)

    Konkret? String Mixins?

    Gut optimierbar ist (Sprachkonstrukte für Parallelisierung und Vektorisierung)

    Das ist zu spezifisch. Vektorisierung ist bald out, dann kommt was neues. Parallelisierung wandelt auch stark im Ansatz. syncronized in Java und D ist schon fast verpönt.

    Die Lösung sind hardwareintrinsics und eine Bibliothek, die ein hohes Abstraktionsniveau zeigt. Es ist die Aufgabe von std::accumulate zu Vektorisieren und zu parallelisieren.

    [*]Keinen GC hat, dafür RAII/Refcounting unterstützt (GCs sind ja mal sowas von Vorgestern)

    Speicherverwaltung ist mMn Sache der Bibliothek und nicht der Sprache.
    Ein GC ist manchmal schneller als Refcounting, anderswo ist Refcounting besser.

    Ich fände eine in die Bibliothek fest eingebaute Allocator-Policy perfekt.

    Ergänzung was mir in C++ fehlt:
    - Compile-Time-Reflection
    - Punkt-Operator überladen (geht mit Compile-Time-Reflection)
    - Meta-Informationen zu Funktionen angeben können (Kommutativität, etc.)


Anmelden zum Antworten