NG Programmiersprache?



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



  • Dravere schrieb:

    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

    Weil man es nicht braucht. Keiner konnte mir bisher einen Fall nennen bei dem es vernünftig ist Mehrfachvererbung zu verwenden und es sonst keine bessere Lösung gibt.



  • Wie löst du denn das wenn du Methoden und/oder Eigenschaften von zwei Basisklassen brauchst ohne irgendwas neu implementieren zu müssen?

    Beispiele wurde hier schon genannt und jedem fällt da bestimmt auch noch was ein, außer dir anscheinend. Also entweder willste nicht oder kannst nicht, such es dir aus.

    Mir würde noch einfallen der Fleisch- und Pflanzenfresser. Der Mensch würde dann aus beiden Klassen erben.



  • Wahrscheinlich ist er so ein nur Virtuell-Maschine Programmierer oder halt ein Script-Kiddie oder halt einfach ein Troll der von nix eine Ahnung hat. Bitte gebt sowas keine Bühne hier, das ist das einzige Forum in deutsch wo die wirklichen Profis zu finden sind.



  • mehrfach schrieb:

    Wie löst du denn das wenn du Methoden und/oder Eigenschaften von zwei Basisklassen brauchst ohne irgendwas neu implementieren zu müssen?

    Beispiele wurde hier schon genannt und jedem fällt da bestimmt auch noch was ein, außer dir anscheinend. Also entweder willste nicht oder kannst nicht, such es dir aus.

    Mir würde noch einfallen der Fleisch- und Pflanzenfresser. Der Mensch würde dann aus beiden Klassen erben.

    Ja, immer so schöne Beispiele wie wir sie doch immer programmieren. Ich kann mich noch gut an mein letztes fliegendes Auto das von einem Fleischfresser gesteuert wurde errinnern. Es kommen immer nur so Anfängerbeispiel bei denen ein "Mensch" oder ein "Amphibienfahrzeug" programmiert wird. Vorher wurde "ein GUI-Button der mit Klicks und Gesten zurechtkommt" erwähnt, aber nicht wieso man da Mehrfachvererbung braucht.

    wortmeldung schrieb:

    Wahrscheinlich ist er so ein nur Virtuell-Maschine Programmierer oder halt ein Script-Kiddie oder halt einfach ein Troll der von nix eine Ahnung hat. Bitte gebt sowas keine Bühne hier, das ist das einzige Forum in deutsch wo die wirklichen Profis zu finden sind.

    Das Gefühl hab ich auch, dass es hier nur darum geht, dass C++ Mehrfachvererbung hat und die Leute es deswegen toll finden. Komischerweise finde ich in unserem C++ Code nur sehr selten Mehrfachvererbung und dann nur solche Stellen bei denen was zusammengehackt wurde.



  • In Java z.B. wäre Mehrfachvererbung auch nicht schlecht, zumindest für diesen Fall:

    public class MyFrame extends JFrame implements MouseListener, KeyListener
    {
      // viele leere Methoden
      // bei mehrfachvererbung könnte man schreiben extends MouseAdapter, KeyAdapter
    }
    

    Oder bei meinem letzten Projekt mit C++ musste ich auch sowas schreiben:

    class Window : public wxFrame, public irrklang::ISoundStopReceiver
    {
      // ...
    

    Zeige mir doch bitte eine Alternative ohne Mehraufwand die das selbe macht.
    Also so unnötig ist Mehrfachvererbung gar nicht.



  • Genau das macht man mit Mehrfachvererbung, immer diese Klassen die alles sind, weil man da ja so schön wenig Tipparbeit hat und alles lustig auf alles zugreifen kann. Warum muss ein Fenster irgendwelche Logik für SoundStop enthalten?

    Wie schon anfangs gesagt. Has-A vs. Is-A.
    Einfach mal das lesen: http://www.c-plusplus.net/forum/viewtopic-var-p-is-532117.html



  • Das Fenster beinhaltet die entsprechenden Objekte um Sounds abzuspielen. Also warum sollte nicht auch der Listener in der Fensterklasse sein?
    Der Übersichtlichkeit des Codes dient es jedenfalls nicht, wenn ich extra für den Listener eine extra Klasse hernehme. Das wäre nix weiter als ein frickeliger Workaround. Frei nach dem Motto: Warum einfach wenns auch kompliziert geht? Zu bedenken ist auch das ich dieser Klasse dann noch eine Referenz auf das Fenster mitgeben müsste.
    Alles in allem wäre das Programmier- und Speicheraufwändiger als meine Lösung. Also WARUM sollte man es tun??
    Der einzige der es so lösen würde wäre eins dieser "OOP ist die Lösung aller Informatikprobleme"-Opfer die sowieso keine Lösung "elegant" genug finden.

    P.S. Auf mein Java-Beispiel bist du gar nicht eingegangen.



  • player4245 schrieb:

    In Java z.B. wäre Mehrfachvererbung auch nicht schlecht, zumindest für diesen Fall:

    public class MyFrame extends JFrame implements MouseListener, KeyListener
    {
      // viele leere Methoden
      // bei mehrfachvererbung könnte man schreiben extends MouseAdapter, KeyAdapter
    }
    

    Das würde man mit anonymen Klassen machen. Dein Bsp. macht absolut kein Sinn, da das Frame sowieso noch Komponenten hat, auf die die Listener viel besser zugeordnet werden können. Im schlechtesten Fall erhält das Frame sowieso nie den Fokus, die Listener würden also nie aufgerufen werden.

    player4245 schrieb:

    Der Übersichtlichkeit des Codes dient es jedenfalls nicht, wenn ich extra für den Listener eine extra Klasse hernehme.

    Genau dafür gibt es anonyme Klassen. Diese sind übersichtlicher. Weil man damit genau feststellen kann welcher Listener zu welcher Komponente gehört.

    Scala löst Mehrfachvererbung durch traits, die dem Prinzip der Linearisierung folgen. Das heißt, wenn es mehrere gleichnamige Methoden gibt, dann werden diese nacheinander aufgerufen und deren Werte werden weitergereicht.



  • player4245 schrieb:

    Das Fenster beinhaltet die entsprechenden Objekte um Sounds abzuspielen.

    Das ist ja schon der Fehler. Modularisierung. http://de.wikipedia.org/wiki/Model_View_Controller . Das Fenster ist nicht der Controller für Sound.

    P.S. Auf mein Java-Beispiel bist du gar nicht eingegangen.

    Weil alles das gleiche Problem ist. Du machst eine Klasse zur Superklasse die für alles verantwortlich ist, statt zu modularisieren.



  • Antoras schrieb:

    player4245 schrieb:

    In Java z.B. wäre Mehrfachvererbung auch nicht schlecht, zumindest für diesen Fall:

    public class MyFrame extends JFrame implements MouseListener, KeyListener
    {
      // viele leere Methoden
      // bei mehrfachvererbung könnte man schreiben extends MouseAdapter, KeyAdapter
    }
    

    Das würde man mit anonymen Klassen machen. Dein Bsp. macht absolut kein Sinn, da das Frame sowieso noch Komponenten hat, auf die die Listener viel besser zugeordnet werden können. Im schlechtesten Fall erhält das Frame sowieso nie den Fokus, die Listener würden also nie aufgerufen werden.

    OK das Fenster hat noch Komponenten. Alles klar:

    public class MeinPanel extends JPanel implements MouseListener
    {
      // ..
    }
    

    😉

    Anonyme Klassen sind vielleicht auch eine Lösung, aber besonders in diesem Beispiel lang nicht so übersichtlich.
    Nun was C++ angeht, diese Sprache besitzt dieses Feature ja nicht, also ist Mehrfachvererbung dort dann doch noch der Weisheit letzter Schluss.


Anmelden zum Antworten