Laden...

Die D Programmiersprache!

Erstellt von zeus vor 20 Jahren Letzter Beitrag vor 20 Jahren 5.338 Views
zeus Themenstarter:in
445 Beiträge seit 2003
vor 20 Jahren
Die D Programmiersprache!

Hi,

Link: Die D Programmiersprache!
Besonders der Vergleich D, C, C++, Java und C# ist sehr interesant. Was haltet ihr davon?

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Function delegates: C++ = NO

Stimmt nicht. Delegaten sind nichts anderes als verbesserte Funktionszeiger und Funktionszeiger werden von C++ unterstützt.
Und mit C und seinen structs ist auch OOP möglich. Auch wenn OOP in C nicht so gut wie mit C++ möglich ist, der Vergleich ist sowieso so eine Sache für sich. Statt try-catch-finally hätte ich z.B. Exeption-Handling genommen das kann nämlich auch C++, wenn auch ohne Finallly.

Ansonsten was ich so von der Sprache gesehen habe bleibe ich lieber bei C++, C# und C. Das sieht mir so danach als hätte jemand versucht die perfekte Programmiersprache zu entwickeln. Das einzige was sie macht ist diverse Sprachen zu kapseln und dazu neue Features.

Code-Hacker

zeus Themenstarter:in
445 Beiträge seit 2003
vor 20 Jahren

Hi,

Erlich gesagt finde ich D auch nicht so gut. Es ist einfach eine total überladene, schlechte Kopie von C++. Auch ist vieles in die Sprache direkt integriert, was bei C++ durch die Standartbibliotek sehr viel eleganter gelößt werden kann. (z.B. verbesserte Mögllichkeiten für Arrays) Aber ich würde nicht sagen, dass C die Objektorientierung unterstützt. So ist z.B. keine Vererbung und Polymorphie möglich.

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Nagut, structs sind eher ein Ansatz zur OOP.

Allein die Schlüssewort-Liste für D ist der Wahnsinn. In die Sprache sind echt die unwichtigsten Dinge integriert worden. Und die 3 Sachen die es nicht sind, sind nur nicht drin damit es so aussieht, als solle die Sprache nicht alles können. Sprachen sind auf Probleme zugeschnitten, wobei auch das im allgemeinen nachlässt. Man kann mit vielen Sprachen und Bibliotheken und Frameworks vieles machen, es bleibt kaum eine Möglichkeit offen und wenn doch dann bedient man sich der anderen Sprache und integriert diese irgendwie in sein Programm.

Achja foreach gibt es auch in C++ (for_each). Ist zwar ein STL-Algorithmus und es werden Iteratoren benutzt aber es gibt diese Schleife. IMHO ist D ein Spielzeug und der Versuch die beste Sprache allerzeiten zu entwerfen.

Code-Hacker

zeus Themenstarter:in
445 Beiträge seit 2003
vor 20 Jahren

Hi,

die Typenliste ist auch der reinste Wahnsinn:
Da ist jeder Typ integriert in der Sprache, wie z.B. ein complex für int, double, ...
was in C++ wirklich viel besser gelößt wurde (durch Templates)

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

C
980 Beiträge seit 2003
vor 20 Jahren

Es gibt einen Unterschied zwischen dem "Unterstützen" und dem "Ermöglichen" eines Paradigmas ... C ermöglicht zwar gewisse OOP Elemente, unterstützt aber OOP sicher nicht.

D sieht interessant aus, werd ich mir mal genauer ansehen ... denn schon bei mehreren Projekten bin ich recht schnell an die Grenzen von C# gestossen - es unterstützt zwar schon viel mehr benötigte Paradigmas als C++, aber einige die ich z.b. für Math.NET benötigen würde ermöglicht es nur mit aufwändigen und unschönen Workarounds, oder gar nicht ...

btw: Die D Keyword list ist auch nicht viel grösser als die CLS Liste ...

C
980 Beiträge seit 2003
vor 20 Jahren

Original von Code-Hacker
Delegaten sind nichts anderes als verbesserte Funktionszeiger und Funktionszeiger werden von C++ unterstützt.

Seit wann kann man Function Pointers multicasten? Und seit wann gibt es in C++ lambda Funktionen (oder "Anonyme Delegates" wie sie MS bei C# neuerdings nennt)? Die C++ Function Pointers kannst du somit auch nicht wirklich für das anwenden für was sie in C# z.b. v.a. verwendet werden: Events. Ist also nicht wirklich vergleichbar ...

zeus Themenstarter:in
445 Beiträge seit 2003
vor 20 Jahren

Original von cdr
btw: Die D Keyword list ist auch nicht viel grösser als die CLS Liste ...

Aber die Complex-Typen hätte es sicherlich nicht gebraucht.

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

V
842 Beiträge seit 2003
vor 20 Jahren

Original von cdr

Original von Code-Hacker
Delegaten sind nichts anderes als verbesserte Funktionszeiger und Funktionszeiger werden von C++ unterstützt.

Seit wann kann man Function Pointers multicasten? Und seit wann gibt es in C++ lambda Funktionen (oder "Anonyme Delegates" wie sie MS bei C# neuerdings nennt)? Die C++ Function Pointers kannst du somit auch nicht wirklich für das anwenden für was sie in C# z.b. v.a. verwendet werden: Events. Ist also nicht wirklich vergleichbar ...

Richtig lesen. Ich habe geschrieben verbesserte Funktionszeiger. Die Delegaten wurde zumindest von den Funktionszeigern abgeguckt. Das man nen haufen Funktionen hat die mehr ermöglichen ist mir auch klar.

Also das mit der Typenliste ist irgendwie schon übertrieben. Was soll ich mit einem integriertem complex-Typen? C++ bietet doch die Möglichkeit eigene Typen zu behandeln wie built-in Typen.

Code-Hacker

zeus Themenstarter:in
445 Beiträge seit 2003
vor 20 Jahren

Und das ist ja nicht nur in der Typenliste: Die ganze Sprache ist total überladen. Das sieht man an den Arrays... wenn jemand ein "verbessertes Array" unter C++ haben will, nimmt er einen Vector.
[edit] genur gemeckert. Zählen wir doch mal die guten Dinge auf. Ich finde z.B. die GC und die foreach-Schleife gut.

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Ja, die GB finde ich auch gut. Das es Templates gibt ebenfalls, ist ja ein sehr schönes Mittel die Templates. Schade das es die in C# nicht gibt (oder habe ich etwas übersehen?).

Code-Hacker

F
529 Beiträge seit 2003
vor 20 Jahren

@Code Hacker
Wird in .net2 eingeführt,
Was bringen die eigentlich? Das sind doch nur Konstrukte, die schon vom Compiler gelöst werden, oder?

Besuchen sie das VisualC++ - Forum

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Bestes Beispiel eine Liste oder Stack, also irgendwas was Werte speichert. Damit kannst du angeben von welchem Typ die Liste sein soll und dementsprechend Werte dafür speichern. Vorteil ist du musst nicht für jeden Typen eine Liste schreiben sondern nur ein Klassen-Template, dem du sagst um welchen Typ es sich handelt. Klassen (mit dem selben Namen) gehen natürlich vor die Benutzung eines Templates beim Compiler. Für jeden aufruf eines Templates wird eine Klasse mit dem jeweiligen Typen erstellt vom Compiler.
Es gibt auch Funktionstemplates. Diesen sagt man von welchem Typ Typen bei der Parameterübergabe beispielsweise sein sollen.

Template-Funktion:
http://www.volkard.de/vcppkold/templatefunktionen.html
Template-Klassen:
http://www.volkard.de/vcppkold/templateklassen.html

Code-Hacker

C
980 Beiträge seit 2003
vor 20 Jahren

So ist's bei C++, nicht aber bei C# ... desshalb brauchts da auch Constraints weil sie da nicht schon zur compile time aufgelöst werden ... alles in allem ein sehr elegantes (und mächtiger als in C++, v.a. auch weniger empfindlich hoffe ich mal) Werkzeug das auch viel tipparbeit (und hässliche untypisierte Designs wie z.b. im aktuellen Collections Namespace) erspart. Ich bin wohl auch nicht der einzige, der sehnlichst darauf wartet, lassen sich doch viele Architekturen nur damit vernünftig realisieren ...

btw: in C#2 nennt man die Dinger häufiger Generics als Templates

zeus Themenstarter:in
445 Beiträge seit 2003
vor 20 Jahren

Original von Franknstein
Was bringen die eigentlich? Das sind doch nur Konstrukte, die schon vom Compiler gelöst werden, oder?

was heißt hier "nur"? Das kann dir viel Tipparbeit und vor allem Wartungsarbeit sparen.
@cdr: Ich warte auch schon drauf.

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

E
51 Beiträge seit 2003
vor 20 Jahren

also der vergleich ist ja voll der müll
von wegen weder c noch c++ noch c# noch java unterstützen resizable arrays (alle tun es)
das gleiche für arrays of bits
man kann sehrwohl aus java native code machen hab neulich n compiler dafür runtergeladen
und c# und java haben auch direct access to c, z.b. über dlls
c() hat glaubich auch struct member alignment control, also ich denk grad an #pragma pack was von fast jedem compiler unterstützt wird
java unterstützt auch seit 1.5 foreach und generics
mit c# kann man sehrwohl directx proggen oder unsafe functions machen also ist auch direct access to hardware gewährleistet
und c und c
unterstützen glaub ich auch kein unicode source oder?

Hafenstraße

C
980 Beiträge seit 2003
vor 20 Jahren

Der Vergleich stimmt schon ... denn er vergleicht die Sprachen, nicht irgendwelche Frameworks (macht auch wenig Sinn irgendwelche Frameworks zu vergleichen, denn schlussendlich kann man alles mit Frameworks bauem, und was jetzt alles genau zum Framework gehört und was nicht ist ohnehin unklar) ...

Bsp: C# unterstützt zwar Arrays (sogar jaggaed und mehrdimensionale), aber keine resizable Arrays (die ArrayList ist teil des Frameworks und nicht der Sprache), selbiges gilt auch für Java und C++ (für C sowieso).

Java 1.5 wurde offenbar noch nicht berücksichtigt, das ist afaik aber auch erst im alpha stadium, ähnlich wie C# 2.0 .. also noch nicht "verfügbar"

(ok, die Grenze zwischen Sprache und Framework ist auch nicht immer ganz klar...)

E
51 Beiträge seit 2003
vor 20 Jahren

aber ob die strings nun built-in sind oder in einem framework macht doch keinen unterschied insoweit das framework fester bestandteil der sprache ist, was zumindest bei c# und java so ist

Hafenstraße

4.207 Beiträge seit 2003
vor 20 Jahren

Das Framework ist NICHT fester Bestandteil der Sprache ... weder bei C# noch bei Java ...

Es gibt nämlich C# und Java als Sprache auf der einen Seite, aber das .net Framework, das .net Compact Framework, Mono sowie J2SE, J2ME und J2EE ... die Sprache ist definitiv nicht an ein Framework gebunden und es hindert Dich auch niemand, eine vollständige Sprachimplementierung für C# nach ISO zu entwickeln, OHNE ein Framework aufzubauen ...

C# ist eine Sprache, .net ist eine Architektur.

PS: Die Trennung zwischen Sprache und Framework geht ganz klar aus den ISO-Standards hervor ... da steht nämlich drin, was C# ausmacht und was nicht.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Stimmt! Aber string ist bei C++, dank ISO, fester Bestandtteil der Sprache, zu welcher alle Standardheader gehören.
Die ISO Dokumente zu ISO-C99 und ISO-C++ könnt ihr euch hier donloaden, wenn interessiert:
http://www.coder-welt.de/thread.php?threadid=92&boardid=15&sid=

Code-Hacker

C
980 Beiträge seit 2003
vor 20 Jahren

Nicht ganz. Laut dem zitierten ISO Dokument definiert die Sprache nur String Literals ("abc" etc. im sourcecode, aka char*). Der string der Standard Library wird erst weiter unten ab Kapitel 17 eingeführt, wo auch ganz am Anfang steht, dass die C++ Sprache gewisse Elemente der Bibliothek benötigt (z.b. bzgl. memory allocation) - sie sind aber nicht Teil der eigentlichen Sprache. std::string ist nicht Teil der C++ Sprache, sondern der C++ Standard Bibliothek, die allerdings auch im C++ Standard enthalten ist. Hätte mich auch gewundert, denn auch schon Bjarne Stroustrup hat zwischen der reinen Programmiersprache und den unterstützenden Bibliotheken unterschieden...

btw: C#: "string" = Sprache, "String" = Framework ...

H
704 Beiträge seit 2003
vor 20 Jahren

Original von elite01

und c und c++ unterstützen glaub ich auch kein unicode source oder?

moin moin
Unicode kann nur dann unterstützt werden, wenn das OS Unicode unterstützt

Unter Windows kann man mit speziellen Funktionen aus der WinAPI Unicode machen

[last.fm](http://www.last.fm/user/hauptmanAlpha/)