Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

11.10.2013, 17:35

Wie findet ihr die Programmiersprache D ?

Hallo Community,
heute ist eure Meinung gefragt, denn ich möchte von euch erfahren wie ihr D findet.
Für alle die nicht wissen um was es sich hier handelt, es ist eine von der Syntax her ännliche Sprache wie Java, C(++). Diese Sprache ist statisch typisiert und kompilierbar und bietet eine ähnliche Geschwindigkeit wie C++, soll hingegen die historisch bedingten Mängel nicht übernehmen und ist somit nur ABI (Application Binary Interface) kompatibel zu C.
Bis jetzt bin ich sehr zufrieden und möchte euch einpaar Vor- und Nachteile vorzeigen:

Vorteile:
  • Ein richtiges Modulsystem und nicht
    diese veralteten Präprozessor-Direktiven
    Slices-Operatoren, sehr
    praktisch!
  • Array-Extensions. Damit lassen sich
    tolle Dinge anstellen
    Design by Contract wird
    syntaktisch unterstützt

  • mixnins
  • delegates und events,
    zugegeben, das lässt sich auch in C++ ziemlich elegant implementieren

  • schneller Compiler (DMD)
    keine Header (*.h) Dateien (gibt es zwar wird aber meistens nicht benötigt
  • wer Java/C++/C#/C schon kann findnet sich schnell in D zurecht
  • assoziative
    arrays und arrays sind eingebaute Datentypen
  • D ist einfach zu lernen als C++, da viele Altlasten und probleme entfernt
    wurden
  • mächtige und einfache template syntax (viel einfacher als C++)
  • es gibt anonyme funktionen
  • sehr schneller binärcode
  • garbage collector (optional)
  • es ist z.B. nicht nötig das Semikolon hinter Klassedefinitionen zu setzen
  • strings können utf8 utf16 utf32 codiert sein
  • kein Präprozessor/ Makroprozessor, in D generell nicht nötig
  • volle UTF8 Unterstützung, d.h. z.B Variablen aus dem griechischen Alphabet oder deutsche äöü
  • Alle Variablen werden automatisch vorinitialisiert (hilft Fehler zu vermeiden), man kann aber auch
    explizit void zuweisen.
  • eingebaute Datentypenhaben eine feste
    Größe, ansonsten gibt es size_t (hat Größe eines Zeigers)

  • -> bei Klassen und Strukturen werden nicht mehr benötigt
Nachteile
  • z.Z. zwei inkompatible Standard
    Bibliotheken (Phobos, Tango); Phobos ist die offiziele.
  • Die Compiler haben deutlich mehr Bugs als C/C++ Compiler (keine im Alltag störenden)
  • D ist noch nicht sehr verbreitet, daher gibt es kaum Bücher
  • Der Garbage Collector und ein paar Features benötigen Typinformationen zur Laufzeit die die Binaries
    größer machen als bei C/C++
  • Linken von
    C-Code ist möglich, aber von C++-Code nur eingeschränkt
Bitte nur Kommentar abgeben, wenn man sich damit schon beschäftigt hat.
Vielen Dank im Voraus für produktive Kritik. :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Gamesjustforfun99« (11.10.2013, 18:39)


2

11.10.2013, 18:17

Ich mags. :)

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

11.10.2013, 18:31

Ich finde diese überdimensionierte Schriftgröße anstrengend. Muss das wirklich sein, Gamesjustforfun99? Wenn Dir das Forum zu klein ist, kannst Du es doch gern für Dich allein mit STRG+ und STRG- passend zurecht skalieren.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

11.10.2013, 19:19

Ich nutze D alltäglich und schreibe an einem Framework für 2D Spielentwicklung mit D.
Ich bin recht zufrieden damit, meckere aber regelmäßig in der Newsgroup und versuche den Kernentwicklern etwas Dampf zu machen. Ansonsten versuche ich mich auch selbst ab und an am Compiler Code, um Bugs zu finden oder seltener, versuchen diese zu fixen.
Also alles in allem bin ich zufriedener damit als z.B. mit C++, komme sehr gut zurecht und kenne mich nach den Jahren auch gut aus. In meinem Kurs habe ich über die Jahre auch einige meiner Kommilitonen dazu bewegt, mit D zu arbeiten.

Zu deinen Nachteilen: Phobos hat weit aufgeholt und somit Tango eig. den Rang abgelaufen. Es gibt kaum Gründe Tango zu nutzen und in der Regel geschieht dies auch nicht. Zumindest was D2 angeht, in D1 hast (hattest) du mit diesen Nachteil natürlich recht.

Zum Vorteil

Zitat

schneller Compiler (DMD)
: DMD ist zwar der Referenz Compiler, macht aber vieles nicht sonderlich effizient (z.B. inlinen). Er ist zwar nicht gerade langsam, aber im Vergleich zum GDC und LDC Compiler sieht DMD meist sehr schwach aus.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

5

11.10.2013, 19:34

ich hatte bei den Compilern eigentlich eher das gegengesetzte Gefühl,aber ich habe auch schon lang nicht mehr mit dem GDC gearbeitet. Könntest du dein 2d Libary Projekt mit d genauer beschreiben, da ich sehr interessiert wäre an so einem Projekt mitzuarbeiten.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

6

11.10.2013, 19:59

Was möchtest du denn beschrieben haben?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

7

11.10.2013, 20:50

Gar nicht mehr so viel wie ich eigentlich dachte, als ich dein Blog gelesen habe ich es selbst herausgefunden. Kann man sich bei dem dgame Projekt beteiligen, abgesehen von Git. Gibt es noch eine Liste von zu implementierenden Funktionen ?
Cooles Projekt habe es vor schon einmal angeschaut

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

8

11.10.2013, 21:46

Habe mit D2 den ein oder anderen Test gelaufen und Zeugs ausprobiert. Allerdings habe ich da drei gute Gründe, weiterhin bei C++ zu hocken:
  1. Eines meiner Projekte ist eine Virtuelle Maschine samt zugehöriger Skriptsprache. Da hätte ich gern selbst die Kontrolle über ABI und Speicherverwaltung. Der GC von D ist so ziemlich der Flaschenhals der Sprache und hinkt technisch - so weit ich mich nicht irre - dem kommenden von LuaJIT hinterher. Und bastelt man Zeugs ohne GC-Verwaltung, kann man in D oft Einiges aus der Standard-Bibliothek knicken.

  2. Das andere Projekt ist bereits so weit vorangeschritten, dass ich garantiert nicht nochmal alles in D umschreibe. Habe statt dessen große Teile auf ein anständiges C++11 refactored und die Kompatiblität zu MSVC++ gestrichen. Und glaubt mir, ich bin absolut kein Fan der Strategie "Basis in C++ und Rest in D", wie es einige Umsteiger tun.

  3. C++11, C++14, und C++17. Alle drei fügen und fügten so viel tolles Zeug zu C++ hinzu, dass es auch genügend Gründe gibt, bei der Sprache zu bleiben. Und mit GCC und Clang hat man bereits alles von C++11 in der Tasche, mit Ausnahme von für mich irrelevanten Kleinigkeiten wie __int128. (Gott, hinkt dieses nutzlose MSVC++ hinterher...!) Und wer unbedingt einen GC in C++ haben will, kann sich Boehm schnappen, der Teil von C++11 wurde / werden sollte. Ich bin im Übrigen eher der Fan von RAII.

Aber zu den Vorzügen von D2 :
  • Elegantere Template-Syntax
    Es will was heißen, wenn das fehlerfreie Parsen von C++ -Template-Klammern Teil des C++11 -Standards wurde... D:

  • Mixins für automatisch generierten Code
    Das geilste Zeugs überhaupt, wenn man sich Hacks wie Lookup-Tables bedient. Reduziert Fehlerquellen beim Copy-Pasten erheblich und macht den Quell-Code kleiner und verständlicher. Dieses Feature wird wahrscheinlich niemals Einzug in C++ finden, da es vom Compiler erfordert, den Code zu interpretieren - Etwas, das das C++-Komitee aus guten Gründen vermeiden möchte.

  • Einheitliche Assembly-Syntax
    Der Nachteil hierbei ist, dass D es nicht so mit anderen Prozessoren als der x86-Familie hat. Zudem ist dieses Feature eh' eher was für Hacks, die genauso gut mit Intrinsics funktionieren.

  • Structs und Classes
    Die sind in D nicht das gleiche. Structs werden by-value übergeben und haben keine Vererbungs-Mechanismen. Classes werden by-reference übergeben und ihre Funktionen sind immer virtual.

  • Modulsystem statt Header
    Ich mag precompiled Header nicht, also lebe ich munter damit, dass große Header-Hierarchien den Kompillationsvorgang erheblich verlangsamen. Habe ein paar Tricks angewandt, um die Header-Verkettungen klein zu halten, aber auch das hat so seine Grenzen. Module sind einfach besser.

  • Das scope-Schlüsselwort
    Lässt sich begrenzt in C++ mit RAII emulieren, aber das ist nicht ganz das gleiche.

  • Strikte Vorgaben für Compiler-Bauer
    Nie wieder Kompatiblitäts-Ärgernisse wie in C++ mit GCC/Clang und MSVC!

  • >>>
    Ernsthaft, so einfach kann es sein, zwischen arithmetischem und logischem Rechts-Shift zu unterscheiden. Erspart sooo viel Ärger.

Dinge, in denen ich keine Vorteile von D sehe:
  • Der GC
    Man braucht in C++ keinen GC, zumal eine der Stärken diese Sprache darin besteht, selbst die Kontrolle darüber zu haben, wann was konstruiert und destruiert wird. Leaks lassen sich u.A. durch Mechanismen wie RAII umgehen. RAII ist klasse! D:

  • Das version-Schlüsselwort
    version ist - wenn man so will - ein sowas wie ein Präprozessor-Befehl mit hübscherer Syntax. Sicher, der Präprozessor ist oft overused (z.B. als force-inline-Funktion ohne Typsicherheit) und version hat nochmal seine Vorteile, aber hey, ich sehe hier beide im Gleichstand.

Da waren noch ein paar Punkte, aber die sind mir jetzt im Laufe des Posts entfallen.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

11.10.2013, 22:22


Dinge, in denen ich keine Vorteile von D sehe:
Der GC
Man braucht in C++ keinen GC, zumal eine der Stärken diese Sprache darin besteht, selbst die Kontrolle darüber zu haben, wann was konstruiert und destruiert wird. Leaks lassen sich u.A. durch Mechanismen wie RAII umgehen. RAII ist klasse! D:

Dann dürfte dich die ARC Geschichte (http://forum.dlang.org/thread/l34lei$255v$1@digitalmars.com) und der -nogc switch (http://forum.dlang.org/thread/bsqqfmhgzn…forum.dlang.org) sicherlich interessieren. :)
Zudem wird eine neue GC Version in nächster Zeit erwartet. Die Implementierung steht afaik sogar schon, finde aber gerade den Thread nicht.

edit: Das hier fand ich auch ganz nett: http://forum.dlang.org/thread/l1nvn4$ca3$1@digitalmars.com
Nutze meine eigene Version davon, aber schon fein.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

LusH

Frischling

Beiträge: 13

Wohnort: /home/tim

Beruf: Schüler

  • Private Nachricht senden

10

13.10.2013, 15:50

Kurzum: Richtig geil :)
und ihre Funktionen sind immer virtual.
Sie sind by-default virtual, kannst sie aber schon non-virtual machen (nur so falls es nicht klar rausgekommen ist) :P


Ich habe vor kurzem angefangen mich mit D zu beschäftigen, und finde die Sprache einfach nur toll.
Sehr durchdachte Syntax mit einem größtenteils C++-ähnlichen Speed gibt einfach eine gute Kombi.

Ich bin auf jeden Fall gespannt wie sich D in Zukunft entwickeln wird..
W§ssten S#e, dass Tastat§tre#ber völl#g ?berflßssig s#ind ?
- Unbekannter Verfasser

Werbeanzeige