D vs. C++



  • twort schreiben schrieb:

    Soll D jetzt ein Ersatz für C++ oder Java sein?

    D ist der Ersatz für C, C/C++, C++, Java, Python, Ruby und Smalltalk.
    http://www.d-programming-language.org/overview.html



  • tntnet schrieb:

    Die Philosophie von C++ ist, dass vieles geht. Es lässt Dir die Freiheit, es so zu tun, wie es für die jeweilige Situation am besten ist. Und wenn es mal ausnahmsweise ein "throw 1" ist, dann darfst Du das in C++ machen.

    Und C++ ist auch kompatibel zu ganz altem Zeugs, z.B. gibt es in C++ goto das man verwendwen kann wenn man will.
    Und neben goto gibt es noch viele weitere Altlasten in C++ mit dem man sehr gut Kotzcode bauen kann, denn C++ griffelt einem da nicht dazwischen, C++ ist echte Freiheit, wie die Müllenstorgung in China, bei dem man seinen Chemiedreck einfach in den Fluß kippen kann. Echte Freiheit eben, ohne Regeln die stören könnten.

    D ist da eher wie Deutschland, bei dem alles sauber kontrolliert, spezifiziert und normiert ist und das bringt dann natürlich ganz schön viel Bürokratie beim Proggen mit sich. Doof ist das auch, weil dann dein Nachbar sich besser in den Code einarbeiten kann und somit dein Arbeitsplatz wegrationalisiert werden kann.
    Denn Code den nur du verstehst, der schützt dich davor, gefeuert zu werden. Denn du bist dann für das Projekt zu wichtig, wenn du der einzigste bist, der den Code versteht.

    Von daher würde ich immer C++ nehmen, da habe ich echte Freiheit und kann machen was ich will.



  • twort schreiben schrieb:

    Soll D jetzt ein Ersatz für C++ oder Java sein?

    Nur D und C++ sind Sprachen der Systemprogrammierung. Java ist für letzteres nicht geeignet.

    Und weder D noch C++ sind binärkompatibel auf verschiedenen Maschinen, es gibt keinen definierten Bytecode, insofern kann weder D noch C++ Java in diesem Bereich ersetzen.



  • Apfelbirne schrieb:

    twort schreiben schrieb:

    Soll D jetzt ein Ersatz für C++ oder Java sein?

    Nur D und C++ sind Sprachen der Systemprogrammierung. Java ist für letzteres nicht geeignet.

    Und weder D noch C++ sind binärkompatibel auf verschiedenen Maschinen, es gibt keinen definierten Bytecode, insofern kann weder D noch C++ Java in diesem Bereich ersetzen.

    Alles Unsinn. Nur C ist eine Sprache der Systemprogrammierung. Bei allen anderen Sprachen redet man nur theoretisch davon. Es bleibt aber beim reden.



  • Olaf Alaf schrieb:

    Apfelbirne schrieb:

    twort schreiben schrieb:

    Soll D jetzt ein Ersatz für C++ oder Java sein?

    Nur D und C++ sind Sprachen der Systemprogrammierung. Java ist für letzteres nicht geeignet.

    Und weder D noch C++ sind binärkompatibel auf verschiedenen Maschinen, es gibt keinen definierten Bytecode, insofern kann weder D noch C++ Java in diesem Bereich ersetzen.

    Alles Unsinn. Nur C ist eine Sprache der Systemprogrammierung. Bei allen anderen Sprachen redet man nur theoretisch davon. Es bleibt aber beim reden.

    Das ist kein Unsinn.

    Informiere dich mal, für was eine Programmiersprache, die für die Systemprogrammierung geeignet sein soll, ausgezeichnet sein muß.
    Und D erfüllt hier ALLE Kritierien zur Systemprogrammierung.

    Wenn du also behauptest, daß D für die Systemprogrammierung ungeeignet wäre, dann hast du schlichtweg keine Ahnung.

    @ all
    Ach ja und warum D gut ist, hier mal ein paar Beispiele:
    http://3d.benjamin-thaut.de/?p=18#more-18



  • Apfelbirne schrieb:

    Olaf Alaf schrieb:

    Apfelbirne schrieb:

    twort schreiben schrieb:

    Soll D jetzt ein Ersatz für C++ oder Java sein?

    Nur D und C++ sind Sprachen der Systemprogrammierung. Java ist für letzteres nicht geeignet.

    Und weder D noch C++ sind binärkompatibel auf verschiedenen Maschinen, es gibt keinen definierten Bytecode, insofern kann weder D noch C++ Java in diesem Bereich ersetzen.

    Alles Unsinn. Nur C ist eine Sprache der Systemprogrammierung. Bei allen anderen Sprachen redet man nur theoretisch davon. Es bleibt aber beim reden.

    Das ist kein Unsinn.

    Informiere dich mal, für was eine Programmiersprache, die für die Systemprogrammierung geeignet sein soll, ausgezeichnet sein muß.
    Und D erfüllt hier ALLE Kritierien
    zur Systemprogrammierung.

    Genau das meine ich doch. Du redest hier von irgendwelche Kriterien, die theoretisch erfüllt werden müssen. Ich rede von der Praxis. Was interessiert mich das blabla, wenn es beim blabla bleibt? In der Praxis frickelt man eben in C. Und alles andere ist heutzutage höchstens ein Experiment, aber NOCH nichts ernstzunehmendes.

    In dem Sinne noch: viel Spaß mit D.
    D wäre eigentlich die perfekte Sprache! ... wenn es kein C, C++, Java, C# python, ruby, ... gäbe..



  • Olaf Alaf schrieb:

    Genau das meine ich doch. Du redest hier von irgendwelche Kriterien, die theoretisch erfüllt werden müssen. Ich rede von der Praxis. Was interessiert mich das blabla, wenn es beim blabla bleibt?

    Ob es für dein Softwareprojekt beim blabla bleibt, entscheidest ganz du allein als Entwickler.

    Wenn ich D oder C++ als Systemprogrammiersprache nutzen möchte, dann mache ich das, denn ich KANN!

    In der Praxis frickelt man eben in C.

    DU frickelst in C, weil du dich nicht traust.



  • Olaf Alaf schrieb:

    In der Praxis frickelt man eben in C. Und alles andere ist heutzutage höchstens ein Experiment, aber NOCH nichts ernstzunehmendes.

    Hm, stimmt. Ich nehme mein Betriebssystem, meine IDE+Compiler, meinen Browser und das ganze Gedöns auch nicht wirklich ernst.



  • pumuckl schrieb:

    Olaf Alaf schrieb:

    In der Praxis frickelt man eben in C. Und alles andere ist heutzutage höchstens ein Experiment, aber NOCH nichts ernstzunehmendes.

    Hm, stimmt. Ich nehme mein Betriebssystem, meine IDE+Compiler, meinen Browser und das ganze Gedöns auch nicht wirklich ernst.

    Hättest du den Thread gelesen, wüsstest du, dass sich Olaf damit ausdrücklich auf Systemprogrammierung bezieht.

    @Apfelbirne: Du verstehst nicht, es geht nicht darum, was "man" kann, sondern was "man" tut. Mit geeigneten Bibliotheken, Frameworks und Wrappern kann man seinen Mikrocontroller auch in Javascript programmieren, kein Problem. Nur wird in der Praxis de facto zu >99% C benutzt, da kannst du auf der Tauglichkeit von D oder Heldenmut herumreiten wie du willst.



  • C++ lässt sich mit einem geeignetem Subset genauso gut für Low-Level Programmierung nutzen. RTTI und Exceptions einfach nicht benutzen und am Anfang manuell Konstruktoren aufrufen. Mehr muss man nicht machen und man profitiert eigentlich nur noch von C++'s Extras.

    Zu 😨 Hab mir mal die Gegenüberstellung von C++ und D angeschaut und die "Verbesserungen" von D klingen größtenteils vollkommen blödsinnig. Größtenteils Sachen die C++ aus guten Gründen einfach nicht als Sprachfeatures sondern als Teil von Bibliotheken implementiert.



  • Ethon schrieb:

    und am Anfang manuell Konstruktoren aufrufen.

    Also bei meinem Mini-OS muss ich keine Konstruktoren manuell aufrufen. Wovon sprichst du?



  • 314159265358979 schrieb:

    Ethon schrieb:

    und am Anfang manuell Konstruktoren aufrufen.

    Also bei meinem Mini-OS muss ich keine Konstruktoren manuell aufrufen. Wovon sprichst du?

    Das hängt vom Compiler und verwendeten Binary-Format ab. ELF-Binaries haben z.B. eine eigene .init und .fini Section. Wenn der Compiler diese verwendet und der OS-Loader sich nicht drum kümmert bei Prozessstart bzw. -ende dort mal reinzucallen, werden die Konstruktoren und Destruktoren von Objekten mit static storage duration z.B. nicht aufgerufen...



  • Genau. Läuft zb beim GCC auf ungefähr soetwas heraus:

    // Lizenz: public domain
    
    typedef void (*constructor)();
    
    // Im Linkerskript definiert
    extern "C" constructor start_ctors;
    extern "C" constructor end_ctors;
    
    extern "C" void initialiseConstructors();
    
    // Ruft die Konstruktoren für globale/statische Objekte auf
    void initialiseConstructors()
    {
      for (constructor* i = &start_ctors;i != &end_ctors;++i)
        (*i)();
    }
    


  • Ach, das meinst du. Naja, das ist ja nicht wirklich ein Problem.



  • thread-leser schrieb:

    @Apfelbirne: Du verstehst nicht, es geht nicht darum, was "man" kann, sondern was "man" tut. Mit geeigneten Bibliotheken, Frameworks und Wrappern kann man seinen Mikrocontroller auch in Javascript programmieren, kein Problem.

    Und noch einer, der nicht verstanden hat, was eine Programmiersprache für die Systemprogrammierung ist.

    Mit einer Programmiersprache für die Systemprogrammierung kannst du ein Betriebssystem programmieren, daß direkt nativ auf der Hardware läuft.
    Das geht mit Javascript niemals, denn Javascript braucht mindestens einen Scriptinterpreter der dazu selbst noch ein OS braucht.
    Javascript ist also keine Programmiersprache für die Systemprogrammierung, D und C++ dagegen schon.

    Und es geht auf keinen fall darum, was man tut, sondern darum welche Eigenschaften die Programmiersprache besitzt um etwas zu tun.

    Nur wird in der Praxis de facto zu >99% C benutzt, da kannst du auf der Tauglichkeit von D oder Heldenmut herumreiten wie du willst.

    Das ist irrelevant, denn die Frage war, welche Sprachen zu den Sprachen der Systemprogrammierung dazugehören und C++ und D gehören neben C nunmal genau dazu.
    Javascript und Java aber (mit Ausnahme dieser eingestellten Java µC) niemals, denn die brauchen wie bereits gesagt, mindestens schonmal einen Interpreter oder eine VM.

    Leute, ihr müßt also erstmal lernen was Systemprogrammierung bedeutet.



  • Bei Microsoft gibst nen Betriebssystem im Managed Code 🙂 Source Code: http://singularity.codeplex.com/SourceControl/changeset/view/45126



  • Noch etwas, da der Begriff wirklich nicht klar zu sein scheint.

    Der Begriff Systemprogrammierung kommt nicht von der Aufgabenstellung "Systeme zu programmieren".

    Nach dieser Definition könnte man nämlich selbst mit Java, Scriptsprachen und Basic Systeme programmieren, solange man die notwendigen Laufzeitumgebungen installiert, so wie du "thread-leser" und "Olaf Alaf" es verstanden haben.
    Aber das ist nicht die korrekte Definition von Systemprogrammierung.

    Systemprogrammierung ist anders defniet.
    Systemprogammierung zeichnet sich dadurch aus, ohne nennenswerte Hilfen wie VM, RundumschlagAPIs, Interpreter & Co hardwarenah zu programmieren, so daß die Hardware erst für andere übergeordnete Anwendungsprogramme, Interpreter und damit später auch Abstrakte High Level Sprachen wie z.b. diverse Scriptsprachen erst überhaupt lauffähig wird.

    D.h. mit Systemprogrammierung programmiert man das OS, die Firmware, die Treiber und meinetwegen auch noch eine grundlegende Systemlib, teilweise auch unter Verwendung von Inline Assembler & Co.

    Und um um das zu tun muß die dafür verwendete Programmiersprache diverse Eigenschaften besitzen.
    C, D und C++ besitzen diese Eigenschaften, deswegen sind diese Sprachen für die Systemprogrammierung geeignet.

    So, ich hoffe jetzt ist endlich klar, was Systemprogrammierung bedeutet.



  • Zeus schrieb:

    Bei Microsoft gibst nen Betriebssystem im Managed Code 🙂 Source Code: http://singularity.codeplex.com/SourceControl/changeset/view/45126

    Und das läuft nicht ohne .Net Umgebung.
    Also Schwachsinnsvergleich.

    Das es Versuche gibt, Betriebssysteme in Java zu schreiben kenne ich auch, aber wenn die dann im Browser laufen müssen und ein großes Geraffel an VM, Webserver usw. benötigen, um überhaupt ausführbar zu sein, dann ist das keine Systemprogrammierung.

    Es ist halt ein netter Versuch ein Bestriebsystem auf Anwendungsebene zu entwickeln, mehr aber auch nicht.

    Ich persönlich halte nicht viel von Betriebssystemen auf Anwendungsebene, denn die reichen gerademal als Lerntest, für die Praxis ist das aber ziemlich weltfremd.
    Denn in der Praxis hat man echte Hardware ohne irgendwelche Hilfsumgebungen.



  • @Apfelbirne

    Building and Running Singularity schrieb:

    Getting Started
    ...
    This document describes the steps to build the Singularity source code and boot your Singularity image into Virtual PC or real hardware.
    ...

    Wenn man Gegenargumentiert sollte man, wenigstens sich mal die Sachen ansehen.



  • Zeus schrieb:

    @Apfelbirne

    Building and Running Singularity schrieb:

    Getting Started
    ...
    This document describes the steps to build the Singularity source code and boot your Singularity image into Virtual PC or real hardware.
    ...

    Wenn man Gegenargumentiert sollte man, wenigstens sich mal die Sachen ansehen.

    Ach komm, da wird einfach nativ mit nem speziellen Compiler compiliert und viel drumrum mitgeliefert.

    Aber laß uns einfach mal schauen, was Heise Developer zur Systemprogammierung sagt:

    Nach Meinung des Autors sind die Sprachen der (direkten) C-Familie (C/C++ und D) immer noch die einzigen, die sich für die Systemprogrammierung eignen

    http://www.heise.de/developer/artikel/C-11-auch-ein-Stimmungsbild-1345406.html


Anmelden zum Antworten