NG Programmiersprache?



  • LINQ, Lambda-Ausdrücke, Expression Trees ... weisst du denn, wo all diese Ideen herkommen und dass in anderen Sprachen diese einfach implizit zur Verfuegung stehen, ohne sie als besonderes Sprachkonstrukt oder Feature einzufuehren?



  • Wo genau soll LINQ denn herkommen? Immerhin kam es mit .NET 3.0 von Microsoft erst raus. Lambda stammt wahrscheinlich von Haskell und ich hoffe du vergleichst Expression Trees nicht mit Meta-Programmierung in C++. Ansonsten kenne ich keine Sprache die z.B. sowas wichtiges wie Extensions bietet und die Reflection in .NET ist auch sehr mächtig 🙂 .



  • Ich würde mir eine Art Basic in der Form ähnlich Python/Java wünschen das immer und auf allen Systemen zur Verfügung steht, natürlich mit einer Standard-GUI die GPU nutzt wenn vorhanden.

    Ansonsten würde mir noch eine fast ausschließlich grafisch zu bedienende Programmiersprache fehlen.

    Sonst fehlt mir eigentlich nix. Python, Java und C++ decken alles ab was ich derzeit brauche.



  • freizeit_programmierer schrieb:

    Ich würde mir eine Art Basic in der Form ähnlich Python/Java wünschen das immer und auf allen Systemen zur Verfügung steht, natürlich mit einer Standard-GUI die GPU nutzt wenn vorhanden.

    http://www.realsoftware.com/ ?



  • Zeus schrieb:

    Ich interessieren mich über eure Gedanke wie eine Programmiersprache aussehen, bieten muss, damit Sie im Betracht käme, euch näher mit der Programmiersprache zu beschäftigen bzw. auch damit zu arbeiten?

    Ist das jetzt eine Frage nach einer Wunschsprache, oder ist das eine Frage nach den Beweggründen sich mit einer neuen Sprache auseinanderzusetzen?



  • Was ich so überflogen habe, sieht das schon einmal recht nett aus. So etwas noch von Hause aus an Bord der Systeme und selbstverständlich kostenlos und uneingeschränkt nutzbar und die Leute könnten nur vom Support allein vielleicht sehr gut leben.



  • ~john schrieb:

    Zeus schrieb:

    Ich interessieren mich über eure Gedanke wie eine Programmiersprache aussehen, bieten muss, damit Sie im Betracht käme, euch näher mit der Programmiersprache zu beschäftigen bzw. auch damit zu arbeiten?

    Ist das jetzt eine Frage nach einer Wunschsprache, oder ist das eine Frage nach den Beweggründen sich mit einer neuen Sprache auseinanderzusetzen?

    Sowohl als auch. Antworten wie programmierloser, rüdiger und volkard auf der ersten Seite bringen mir am Meisten. Weil ich greade in eine Redesign-Phase bin, kann ich diese gedanken gleich einbeziehen. Im Falle von rüdiger Aussagen hatte es direkt einfluß auf Entscheidungen. Volkard hat mir geholfen weil ich jetzt auf meine Platte ein Python/Pascal-Syntax-Mix habe, der mir sehr gut gefällt.



  • FreakY<3Cpp schrieb:

    Für den []-Operator gibt es in C#

    public int this[int index]
    

    Nur weil man jetzt nicht

    public static operator[](int index)
    

    schreiben kann, ist das ein Verbrechen? 😃

    Es ist ein schwäche in Sprachkonzept. IMO ist eine Sprache sehr gut, wenn sie minimal, eindeutig(Nicht nicht nur im Abstieg oder Aufstieg der Grammatikregeln sonder, dass auch zu ein syntaktische Konzept auch nur eine Repräsentation im AST zu finden ist.) und nachvollziehbar ist, d.h. wenn du Teile der Sprache siehst, kannst du intuitive auf andere Sachen schließen wie sie geschrieben wird. (oder POLS für „Principle of least surprise“).



  • Für mich muss eine Sprache ein durchgängiges Konzept vorweisen. Ich mag es z.B. nicht wenn eine Sprache durch zu viele Features glänzen möchte, die zwar Arbeit beim programmieren ersparen sollen, sich aber nicht ins Sprachkonzept einfügen lassen. Statt dessen ist es mir lieber wenn der Compiler gezielt Code generiert, den ich ohne Probleme auch selbst programmieren könnte - nur eben um mich als Programmierer zu unterstützen und nicht um mich zu verwirren.

    Ein Musterbeispiel dafür ist die noch junge Sprache Scala. Sie kombiniert objektorientierte und funktionale Programmierung und sorgt mit einer fantastischen Syntax für angenehm kurzen und trotzdem super lesbaren Code.
    Ermöglicht wird das z.B. durch das Konzept, dass alles ein Objekt ist (auch Operatoren).

    Der Aufruf

    5+3
    

    kann man auch durch

    (5).+(3)
    

    ersetzen. Das + ist der Name einer Methode der Klasse Int, deren Instanzen implizit durch die Zahlen 5 und 3 repräsentiert werden. Scala erlaubt das Weglassen von Punkten und Klammern wenn nur ein Parameter folgt. Eine geniale Regel, die das Sprachkonzept, dass alles ein Objekt ist, nicht beeinträchtigt und gleichzeitig für super lesbaren Code sorgt.

    Die Funktionale Programmierung trägt dazu bei den Code zu verbessern:

    // Java
    boolean nameHasUpperCase = false;
    for (int i = 0; i < name.length(); ++i) {
      if (Character.isUpperCase(name.charAt(i))) {
        nameHasUpperCase = true;
        break;
      }
    }
    
    // Scala
    val nameHasUpperCase = name.exists(_.isUpperCase)
    

    Beide Codebeispiele machen das gleiche, nur, dass der Scala-Code deutlich kürzer ist.

    Die Sprache selbst stellt nur einen kleinen Teil an Schlüsselwörtern, die den Programmfluss steuern, zur Verfügung. Ein Beispiel:

    actor {
      var sum = 0
      loop {
        receive {
          case Data(bytes) => sum += hash(bytes)
          case GetSum(requester) => requester ! sum
        }
      }
    }
    

    Lediglich var und case sind Schlüsselwörter, der Rest (auch das Ausrufezeichen) sind Methoden von Objekten. Einfach zu genial.
    Und noch einfacheren Code, der gleichzeitig lesbar bleibt, kann man schon fast nicht mehr schreiben. Klar muss man erst mal das Konzept der Sprache verstehen bis der Code lesbar ist aber dann gibt es daran nicht mehr viel auszusetzen.

    Der Sprache muss man einfach eine Chance geben...



  • Zeus schrieb:

    Sowohl als auch. Antworten wie programmierloser, rüdiger und volkard auf der ersten Seite bringen mir am Meisten.

    Dann versuche ich mal zu antworten.
    Abgesehen von ganz pragmatischen Gründen, weil es für bestimmte Aufgaben nur bestimmte Programmiersprachen/Frameworks gibt, verwendet werden können, etc. und man sich daher dazu entschließt oder es einfach tun muß, versuche ich mal meine Wunschsprache zu definieren.

    • Sie sollte in Maschinencode direkt übersetzbar sein
    • Exceptions
    • Sie wandelt die Hardware Ausnahmen direkt in Exceptions, d.h. IEEE Under-/Overflows etc. werden von der Sprache als Exceptions behandelt.
    • Zeiger, aber keine Zeigerarithmetik
    • streng typisiert
    • Subtyping
    • echte typedefs (d.h. Typen sind disjunkt und nicht wie bei C nur neue Namen für bestehende Typen)
    • kein GC (höchstens als Option)
    • RAII
    • Operatorenüberladung
    • Komplexe Zahlen
    • Intervallarithmetik
    • generische Programmierung zum Übersetzungszeitpunkt
    • generische Programmierung auch auf Basis von Typwerten und nicht nur Typen
    • eine Art von Precompiler, der alle Typen der Sprache kennt und Typsicher Programmcode aus einem Metaprogramm herauserzeugen kann.
    • OOP
    • statisches Dispatching ist die Regel
    • dynamisches Dispatching nur bei Bedarf
    • Mehrfachvererbung
    • Die Möglichkeit die Reimplementierung in jeder abgeleiteten Klasse zu erzwingen
    • Instanzmethoden, Instanzvariablen
    • Klassenmethoden, Klassenvariablen
    • Multimethoden (multiple dispatch)
    • Metaklassen (für integralen Datentypen nur statisch zugeordnet)
    • kein Duck Typing
    • Namensräume
    • Module

    Das ist so das was mir auf die schnelle einfällt. Das ganze muß nicht Teil des Kerns der Sprache sein, aber das meiste davon wird wohl nur so umzusetzen sein.



  • ~john schrieb:

    Zeus schrieb:

    Sowohl als auch. Antworten wie programmierloser, rüdiger und volkard auf der ersten Seite bringen mir am Meisten.

    Dann versuche ich mal zu antworten.
    Abgesehen von ganz pragmatischen Gründen, weil es für bestimmte Aufgaben nur bestimmte Programmiersprachen/Frameworks gibt, verwendet werden können, etc. und man sich daher dazu entschließt oder es einfach tun muß, versuche ich mal meine Wunschsprache zu definieren.

    • Sie sollte in Maschinencode direkt übersetzbar sein
    • Exceptions
    • Sie wandelt die Hardware Ausnahmen direkt in Exceptions, d.h. IEEE Under-/Overflows etc. werden von der Sprache als Exceptions behandelt.
    • Zeiger, aber keine Zeigerarithmetik
    • streng typisiert
    • Subtyping
    • kein GC (höchstens als Option)
    • RAII
    • Operatorenüberladung
    • Komplexe Zahlen
    • Intervallarithmetik
    • generische Programmierung zum Übersetzungszeitpunkt
    • generische Programmierung auch auf Basis von Typwerten und nicht nur Typen
    • eine Art von Precompiler, der alle Typen der Sprache kennt und Typsicher Programmcode aus einem Metaprogramm herauserzeugen kann.
    • OOP
    • statisches Dispatching ist die Regel
    • dynamisches Dispatching nur bei Bedarf
    • Mehrfachvererbung
    • Die Möglichkeit die Reimplementierung in jeder abgeleiteten Klasse zu erzwingen
    • Instanzmethoden, Instanzvariablen
    • Klassenmethoden, Klassenvariablen
    • Multimethoden (multiple dispatch)
    • Metaklassen (für integralen Datentypen nur statisch zugeordnet)
    • kein Duck Typing
    • Namensräume
    • Module

    Das ist so das was mir auf die schnelle einfällt. Das ganze muß nicht Teil des Kerns der Sprache sein, aber das meiste davon wird wohl nur so umzusetzen sein.

    Zu 95% C++
    Aber Du solltest Dir vielleicht mal D anschauen.



  • veritySeeker schrieb:

    Zu 95% C++
    Aber Du solltest Dir vielleicht mal D anschauen.

    D ist aus meiner Sicht eine Verschlimmbesserung, zuwenig Neues nur vieles anders das rechtfertigt die Inkompatibilität nicht.

    95% C++? Ich sehe schon das war zu knapp beschrieben.
    Das Typsystem von C++ ist mir zu lax, echte Typedefs und Subtypes, dazu ein echtes Modulkonzept wie in Ada das wäre ein großer Fortschritt (kein Pimpl Idiom mehr notwendig). Die Templates von C++ sind mächtig haben aber eine grauenhafte Syntax, wenn man Metaprogramming machen will.



  • ~john schrieb:

    D ist aus meiner Sicht eine Verschlimmbesserung, zuwenig Neues nur vieles anders das rechtfertigt die Inkompatibilität nicht.

    Unabhängig von meiner Meinung über 😨 Bitte an dieser Stelle keinen D-Flamewar anfangen, davon hatten wir schon einige.



  • ~john schrieb:

    [*]Mehrfachvererbung

    Wozu brauchst du das?



  • thatway schrieb:

    ~john schrieb:

    [*]Mehrfachvererbung

    Wozu brauchst du das?

    Ein Beispiel wäre wenn du ein fliegendes Auto modellieren(oder ein GUI-Button der mit Klicks und Gesten zurechtkommt) möchtest dann brauchst du nicht zwei Schnittstellen neu implementieren sondern erbst von der Klasse Fahrzeug und Flugzeug. Dabei ist bestimmt ein wenig Vorsicht geboten, aber Sprachen wie C++ sind ja auch nix für den Rookie unter den Programmierern. So ein Feature ist manchmal einfach nice to have.



  • Jaja, das Amphibienfahrzeug jetzt mal als fliegendes Auto. Wieviel PS hat das dann? Soviel wie das Fahrzeug oder das Flugzeug oder ...?

    Mach mal ein Beispiel zu deinem GUI-Button der mit Klicks und Gesten zurechtkommt.



  • freizeit_programmierer schrieb:

    thatway schrieb:

    ~john schrieb:

    [*]Mehrfachvererbung

    Wozu brauchst du das?

    Ein Beispiel wäre wenn du ein fliegendes Auto modellieren(oder ein GUI-Button der mit Klicks und Gesten zurechtkommt) möchtest dann brauchst du nicht zwei Schnittstellen neu implementieren sondern erbst von der Klasse Fahrzeug und Flugzeug. Dabei ist bestimmt ein wenig Vorsicht geboten, aber Sprachen wie C++ sind ja auch nix für den Rookie unter den Programmierern. So ein Feature ist manchmal einfach nice to have.

    eigentlich entweder oder daher auch 2 variablen

    class Amphibienfahrzeug{
    var Fahrzeug = new Fahrzeug()
    var Flugzeug = new Flugzeug()
    }

    wollt aber eigentlich nur mal schauen wie das so mit den signaturen ist 🤡



  • thatway schrieb:

    Wozu brauchst du das?

    Bisher wurde in jeder populären OO-Programmiersprache Interfaces nachgerüstet oder war gleich Teil der Sprache. Mehrfachvererbung ist kein Problem zur Laufzeit, d.h. es kostet keine Performance. Bei Interfaces wird meistens eine Beschränkung der Namen für die Methoden eingeführt, das Konzept kann man für echte Mehrfachvererbung auch auf Elemente ausweiten, oder man nutzt die bekannten Maßnahmen aus den Sprachen mit Mehrfachvererbung um Konflikte aufzulösen. Als Entwickler sollte man soviel Wissen haben, daß man den Diamond of Death vermeidet.



  • ~john schrieb:

    thatway schrieb:

    Wozu brauchst du das?

    Bisher wurde in jeder populären OO-Programmiersprache Interfaces nachgerüstet oder war gleich Teil der Sprache. Mehrfachvererbung ist kein Problem zur Laufzeit, d.h. es kostet keine Performance. Bei Interfaces wird meistens eine Beschränkung der Namen für die Methoden eingeführt, das Konzept kann man für echte Mehrfachvererbung auch auf Elemente ausweiten, oder man nutzt die bekannten Maßnahmen aus den Sprachen mit Mehrfachvererbung um Konflikte aufzulösen. Als Entwickler sollte man soviel Wissen haben, daß man den Diamond of Death vermeidet.

    Ja und? Das führt immer nur zu diesen Superklassen die alles sind anstatt das die Funktionalität aufgeteilt wird. Die meisten "Is-A" Beziehungen könnten auch "Has-A" Bezeihungen sein.


  • Administrator

    ~john schrieb:

    • eine Art von Precompiler, der alle Typen der Sprache kennt und Typsicher Programmcode aus einem Metaprogramm herauserzeugen kann.

    Das wäre definitiv sehr interessant. Wenn wir von zum Beispiel C++ ausgehen, dann die Makros und Templates rausschmeissen, dafür in die eigentliche Sprache hinein eine Code-Generator Sprache implementieren. Ich habe mir sogar schon mal Gedanken darüber gemacht, eine Sprache zu entwickeln, welche nur als Code-Generator dient. Man programmiert dann ein Programm, welches vom Kompiler ausgeführt wird, damit daraus ein Programm zum Übersetzen in die Maschinensprache entsteht. 🙂
    Leider fehlt mir ein wenig die Zeit, diese Gedanken mal besser zu ordnen und niederzuschreiben.

    thatway schrieb:

    ~john schrieb:

    [*]Mehrfachvererbung

    Wozu brauchst du das?

    Gegenfrage: Wieso sollte man es verbieten? Und komm mir bitte nicht mit der Begründung, weil der Programmierer zu dumm ist, dieses Konzept vernünftig anzuwenden, denn dann darfst du ihn erst gar nicht programmieren lassen 😉

    Grüssli


Anmelden zum Antworten