NG Programmiersprache?



  • FreakY<3Cpp schrieb:

    Ich finde C# hat genug Features und ich glaube sogar die meisten. C# beinhaltet viel und muss glaube ich in Zukunft nicht mehr viel hinzufügen. Man müsste meiner Meinung nach, damit ich mir die Sprache angucke, mindestens soviel bieten können wie C# im Zusammenhang mit .NET.

    Sorry, viele Features sind ein Indiz fuer eine schlechte Sprache.

    Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Scheme demonstrates that a very small number of rules for forming expressions, with no restrictions on how they are composed, suffice to form a practical and efficient programming language that is flexible enough to support most of the major programming paradigms in use today.



  • ich bins schrieb:

    programmierloser schrieb:

    - Sie muss kompiliert werden (natürlich nutze ich auch hin und wieder eine Skriptsprache, aber für was grösseres wohl kaum - kommt aber auch auf den Fall drauf an, ich würde auch nie freiwillig nen Web-Projekt mit PHP machen).

    Womit würdest Du denn dann sonst ein Web-Projekt machen?

    Java2EE



  • programmierloser schrieb:

    ich bins schrieb:

    programmierloser schrieb:

    - Sie muss kompiliert werden (natürlich nutze ich auch hin und wieder eine Skriptsprache, aber für was grösseres wohl kaum - kommt aber auch auf den Fall drauf an, ich würde auch nie freiwillig nen Web-Projekt mit PHP machen).

    Womit würdest Du denn dann sonst ein Web-Projekt machen?

    Java2EE

    Und was ist mit:

    programmierloser schrieb:

    - Kein GC.

    😕



  • http://wiki.github.com/graydon/rust/
    http://lambda-the-ultimate.org/node/4009

    Rust könnte vielleicht ganz interessant werden.



  • we are focusing on removing and stabilizing features rather than adding them. [..] Reductions are more interesting than additions though. [..] Not everything is shoe-horned into the object abstraction.

    Vielversprechend.



  • knivil schrieb:

    FreakY<3Cpp schrieb:

    ...

    Sorry, viele Features sind ein Indiz fuer eine schlechte Sprache.

    Stimmt, es haben sich schon so viele beschwert, dass Extensions, LINQ, Lambda-Ausdrücke, Expression Trees, Reflection, einfache Parallelisierung und Threads, WPF, Schnittstellen uvm. einfach zu viel ist 🙄 ...
    Aber das ist natürlich mal wieder ein Thema worüber man in diesem Forum nicht schreiben kann, ohne sich die Köpfe einzuschlagen 😃



  • Deine Beispiele sind nicht, dass was kinvil meint. Eher das hier, in C# gibt es Operatorüberladung als auch für Klassen ein Indexer. Beides überschneidet sich und im Prinzip der Einfachbarkeit, sollte nur eins Angeboten werden.

    Nachtrag, ach ich seh greade den []-Operator kann man garnicht überladen, und dies führt uns dann zum Wiederspruch 😉



  • 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? 😃

    Aber nochmal zurück zum Thema. Um eine Sprache "Next Generation" nennen zu dürfen, sollte sie wenigstens das können, was bisher meist genutzte Sprachen können, darunter fällt z.B. OOP. Ich würde mir nämlich keine prozedurale Sprache anschauen.



  • 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.


Anmelden zum Antworten