Dart - structured Web Language (neue Programmiersprache)

Simple Man schrieb:
Erfahrene und fähige JavaScript Entwickler wird man nicht hinter dem Offen locken können, aber C# oder Java Entwickler werden das cool finden.
Bin eben mal über dartlang.org geflogen und habe mir ein paar Vergleiche mit JS angesehen. Am interessantesten erscheint mir die bessere Integration in eine IDE. Offensichtlich ja auf Eclipse aufgebaut.
Sie sollten aber ein Eclipse-Plugin dafür anbieten, denn ich glaube nicht, dass ich mir nur für das bisschen JavaScript, was ich neben der eigentlichen Web-App brauche, eine zusätzliche IDE starte.
Die Frickelei beim Schreiben von JS im Vergleich zu Java stört mich aber schon am meisten beim Entwickeln. Vielleicht mach ich auch was falsch.
 
Mercsen schrieb:
richtige OOP wäre wünschenswert, aber das kann ja nichtmal PHP vollständig.
Sauber coden geht in JS auch, man muss nur besser aufpassen ;)

ice-breaker schrieb:
Irgendwie ist der Vergleich "sinnlos". Du kritisierst, dass JS kein OOP (deiner Meinung nach) hat, und suchst dann eine Sprache heraus, die auch "nichtmal vollständig" OOP kann. Wie definierst du vollständiges OOP? Denn imho würde auch Java oder C++ das nicht erfüllen, da es noch immer primitive Datentypen gibt.
Bitte kein "echtes OOP". Totaler Mist, es gibt gute Gründe, dass reines OOP, wie jeder reine Ideologie, nicht das Ende aller Weisheit ist:
http://youtu.be/OB-bdWKwXsU?t=50m18s
 
Zuletzt bearbeitet:
Mal ne blöde Frage:
Gibt es denn schon Browser mit Dart Engine? (Firefox, Chrome, Opera, whatever)
 
Wenn es einer kann, dann Chrome... aber wetten würd ich darauf nicht.
Aber selbst wenn: Die nächsten 4-5 Jahre kannst du nichts produktiv einsetzen, was der IE8 nicht kann. Die nächsten 7-8 Jahre kannst du nichts produktiv einsetzen, das der IE9 nicht kann. Wozu also drum kümmern, ob es der Chrome oder Opera kann?
 
Fortatus schrieb:
Bitte kein "echtes OOP". Totaler Mist, es gibt gute Gründe, dass reines OOP, wie jeder reine Ideologie, nicht das Ende aller Weisheit ist:
http://youtu.be/OB-bdWKwXsU?t=50m18s

Ehrlich gesagt finde ich das Beispiel ziemlich "schlecht". Der Vector als Klasse kann die gleichen Eigenschaften wie das "C++"-Beispiel haben, so ist die Vector-Klasse auch in Java implementiert, das ganze da war nur ein Beispiel einer schlechten Implementation.
Was die meisten Sprachen von reinem OOP unterscheidet, ist z.B. aber auch, dass es noch primitive Datentypen gibt. Ich habe Integer, Floats, Bytes und Co. Auf denen darf ich keine Operationen ausführen, es sind keine Objekte. Ja, das macht man wegen Parformance! Falsch! Scala hat ganz gut gezeigt, dass ein int.machwas() keine Performance kosten muss, weil der Compiler daraus IntHelper.machwas(int) machen kann. Es muss also kein Autoboxing stattfinden. Alles kein Problem. Genauso wie die Addition 1+1 eigentlich ein Methodenaufruf 1.+(1) ist. Kostet Performance? Nein! Denn das kann der Compiler inlinen, macht ein gcc seit Jahren. Zumal das hier sowieso ein Language-Konstrukt ist, denn auch die Methode kann keine Plus-Operation wenn die Sprache sie nicht implementiert.

Also gegen "echtes OOP" Performance anzuführen ist ein schwaches Argument, zumal in 99.9% der Fälle selbst ein Performanceunterschied von sagen wir 5% egal wäre, die wenigste Software ist wirklich zeitkritisch. Und da arbeitet man dann meist noch mit normalem C.
 
Zuletzt bearbeitet:
sacridex schrieb:
Mal ne blöde Frage:
Gibt es denn schon Browser mit Dart Engine? (Firefox, Chrome, Opera, whatever)
Da auf der Seite wird Dartium angeboten. Ein Chromium mit eingebauter Dart-VM.

Zur OOP-Diskussion: das einzige Argument, was mich bisher wirklich überzeugt hat, ist, dass OOP nicht sonderlich ideal für parallele Ausführung ist. Das ständige synchronizen der Speicherzugriffe entschärft quasi den ganzen Vorteil von Parallelität. Daher finde ich Scala ja so interessant, weil es mit seiner hybriden Natur einen Ausweg durch FP bietet.
Genau das verschafft Scala aus meiner Sicht auch eine Daseinsberechtigung, über die man bei Dart wohl Zweifel haben darf.
 
Daaron schrieb:
Aber selbst wenn: Die nächsten 4-5 Jahre kannst du nichts produktiv einsetzen, was der IE8 nicht kann. Die nächsten 7-8 Jahre kannst du nichts produktiv einsetzen, das der IE9 nicht kann. Wozu also drum kümmern, ob es der Chrome oder Opera kann?
Der IE hat nicht mal annähernd mehr die Bedeutung, die er mal hatte...
Gibt immer mehr Smartphones/Tablets ganz ohne IE.

Tumbleweed schrieb:
Da auf der Seite wird Dartium angeboten. Ein Chromium mit eingebauter Dart-VM.
Ja, gut. Sowas dachte ich mir schon. Interessant wäre das ja nur, wenn es standardmäßig in Firefox, Chrome/Safari und Opera integriert werden würde.

Hab mal einen Blick in die "Library Tour" geworfen, hört sich recht interessant an. Vorallem, dass nicht nur Websockets sondern auch normale Sockets unterstützt werden! Womit dann "Webapps" eigentlich jede nur erdenkliche "normale" Applikation ersetzen könnten(ohne den Serverteil verändern zu müssen).
 
sacridex schrieb:
Der IE hat nicht mal annähernd mehr die Bedeutung, die er mal hatte...
Gibt immer mehr Smartphones/Tablets ganz ohne IE.
Je nachdem wie erfolgreich Win8 auf Tablets wird, wird der Marktanteil aber sogar steigen.

Außerdem: Der IE hat immer noch einen beachtlichen Marktanteil. Du kannst nicht mal eben 1/3 deiner Kunden ausschließen, das ist wirtschaftlicher Selbstmord.
 
Tumbleweed schrieb:
Zur OOP-Diskussion: das einzige Argument, was mich bisher wirklich überzeugt hat, ist, dass OOP nicht sonderlich ideal für parallele Ausführung ist. Das ständige synchronizen der Speicherzugriffe entschärft quasi den ganzen Vorteil von Parallelität.
Du beschreibst da aber nicht den Nachteil von OOP in Bezug auf Parallelität sondern den Shared State ;) Denn der ist das Übel! Die ganzen Locks, Mutexe, Monitors, Memory Visibility Guarantees sind das Problem an der Shared State Concurrency.

Tumbleweed schrieb:
Daher finde ich Scala ja so interessant, weil es mit seiner hybriden Natur einen Ausweg durch FP bietet.
Du beziehst dich hier auf das Aktorenmodell? Der Vorteil da ist ja, im Gegensatz zum Shared State, dass es keinen Shared State gibt und man durch Message Passing mit den Aktoren kommuniziert und jegliches Locking usw. nicht mehr benötigt wird. Also kinderleichte Parallelität. Und hier wird auch deutlich warum ich vorher angedeutet habe, dass es nicht am OOP liegt: Denn das Message Passing in Scala basiert auf Immutable Objects, also mit OOP. Nur in dem Vorbild Erlang gibt es gar keine Objekte, da wird dann alles über Tupel und Records gemacht. Und Erlang hat auch sonst wirklich einige geniale Sachen: die Supervisors, einen GC für jeden Aktor (kein Stop-the-World-GC wie in allen Sprachen), den Aktoren-Cluster über mehrere physikalische hinweg, Code zur Laufzeit austauschen, die verteilte Datenbank Mnesia und die Sprache hat einfach eine sehr kleine Syntax im Gegensatz zu vielen weiteren Sprachen. In Erlang baut einfach alles auf Pattern Matching auf, da kann man einige Dinge echt cool ausdrücken:
Code:
-module(listsum).
-export([listsum/1]).

listsum([]) -> 0;
listsum([H|T]) -> H + listsum(T). %% Wert des 1. Elementes + Summe vom Rest der Liste
Code:
Eshell V5.9.1  (abort with ^G)
1> listsum:listsum([1, 2, 3, 5, 8, 13]).
32
Die Namen waren echt doof gewählt :lol:
 
Wie ich das mitbekommen habe, ist für dieses Jahr noch eine erste Betaversion geplant.
 
Daaron schrieb:
Selbst wenn ein Dart-Programm 20% schneller als dasselbe in JS wäre: Was bringt es dir?
Wie oft hast du in JS bereits Anwendungen geschrieben, die dein Ziel-Gerät schlichtweg überfordert haben? Wie oft hat dein Dropdown-Menü geruckelt? Wie oft hast du beim Drag&Drop n Lag gehabt?
also diese genannten effekte habe ich schon sehr sehr oft erlebt bei dem was mir so untergekommen ist.
Ergänzung ()

ice-breaker schrieb:
Ehrlich gesagt finde ich das Beispiel ziemlich "schlecht". Der Vector als Klasse kann die gleichen Eigenschaften wie das "C++"-Beispiel haben, so ist die Vector-Klasse auch in Java implementiert, das ganze da war nur ein Beispiel einer schlechten Implementation.
Was die meisten Sprachen von reinem OOP unterscheidet, ist z.B. aber auch, dass es noch primitive Datentypen gibt. Ich habe Integer, Floats, Bytes und Co. Auf denen darf ich keine Operationen ausführen, es sind keine Objekte. Ja, das macht man wegen Parformance! Falsch! Scala hat ganz gut gezeigt, dass ein int.machwas() keine Performance kosten muss, weil der Compiler daraus IntHelper.machwas(int) machen kann. Es muss also kein Autoboxing stattfinden. Alles kein Problem. Genauso wie die Addition 1+1 eigentlich ein Methodenaufruf 1.+(1) ist. Kostet Performance? Nein! Denn das kann der Compiler inlinen, macht ein gcc seit Jahren. Zumal das hier sowieso ein Language-Konstrukt ist, denn auch die Methode kann keine Plus-Operation wenn die Sprache sie nicht implementiert.

Also gegen "echtes OOP" Performance anzuführen ist ein schwaches Argument
ich kann dir da im grunde ganz zustimmen. nur...
, zumal in 99.9% der Fälle selbst ein Performanceunterschied von sagen wir 5% egal wäre, die wenigste Software ist wirklich zeitkritisch.
davon abgesehen, dass die 99.9% an den haaren herbei gezogen ist, so bedeut nicht zeitkritisch noch lange nicht, dass wird noch verschwenderischer mit den ressourcen umgehen sollten als es sowieso die meisten bereits tun.

Und da arbeitet man dann meist noch mit normalem C.
das hat andere gründe! C code wird eigentlich nur aus einem einzigen grund noch verwendet: auf systemen mit speziellen compilern, die eben nur C brauchbar unterstützten. gcc gibt es nicht für viele platformen mit so restriktiven speicher und cpu anforderungen.
auf solchen systemen finden sich (fast) nur c-compiler die performanten code produzieren.

edit: natürlich wird c auch noch verwendet, weil manche es mögen ;)
 
Zuletzt bearbeitet:
Dese schrieb:
davon abgesehen, dass die 99.9% an den haaren herbei gezogen ist, so bedeut nicht zeitkritisch noch lange nicht, dass wird noch verschwenderischer mit den ressourcen umgehen sollten als es sowieso die meisten bereits tun.
Schwachsinn? Na wenn du meinst, es gibt zur Zeit quasi keine JavaScript-Anwendung die an mangelnder JavaScript-Performance scheitert.

Zudem spricht doch auch keiner davon, dass wir mit Ressourcen verschwenderischer umgehen sollen. Dart kann entweder streng typisiert werden oder gar nicht. Bei fehlender Typisierung haben wir einfach gar nichts gewonnen, dann kann man auch weiterhin JavaScript verwenden. Und ob die Typisierung zu wirklich effizienterem Code führt, lasse ich einfach mal dahingestellt.
Im Prinzip kommt es nachher nur auf die Intelligenz des Compilers an, und Google hat doch selbst mit der V8 Engine bewiesen, dass man JavaScript auch wirklich verdammt gut optimieren kann, wenn man es nur will. Dem Google Closure Compiler (JavaScript Obfuscator + Compressor) kann man über JsDoc sogar Hinweise über die Datentypen geben, wodurch der Google Closure Compiler in manchen Operationen noch kleineren Code erzeugen kann, genau diese Infos könnte auch die V8 Engine nutzen.
Und in dem Moment hätte Dart dann einfach keinen Effizienzvorteil mehr.

Dieses ganze Gehype um Dart ist imho "Schwachsinn". Bis auf Chrome wird es kein Browser können, und selbst wenn ein weiterer Browser es morgen nutzt kann man es trotzdem nicht flächendeckend nutzen. Also muss doch weiterhin in JavaScript entwickelt werden und man muss sich stattdessen Gedanken machen, wie man JavaScript optimiert. Wenn der Schritt geschen ist kann man auch Dart genauso wie CoffeeScript oder andere Sprachen in JavaScript transpilen.
 
Zuletzt bearbeitet:
Immerhin hab ich gestern tatsächlich eine JS-Animation gefunden, die einen i5-2400 (unter Ubuntu x64 mit aktuellem Chromium Build) auf allen Kernen auf 40% Last hält: ein kleines Background-Script, dass 40 "Fussel" auf recht zufälligen Bahnen durchs Bild schweben lässt.
 
ice-breaker schrieb:
Schwachsinn? Na wenn du meinst, es gibt zur Zeit quasi keine JavaScript-Anwendung die an mangelnder JavaScript-Performance scheitert.
komm mal wieder runter. ich hab nicht von "schwachsinn" gesprochen.
du sagtest 99% der anwendungen sind nicht zeitkritisch. zeitkritisch ist ein so weitreichender und schwamminger begriff, dass schon allein deswegen jede zahl an grundlage entbehrt.

performance zu verbessern sollte ausserdem nicht allein aus "zeitkritischen" gründen motiviert sein.
Zudem spricht doch auch keiner davon, dass wir mit Ressourcen verschwenderischer umgehen sollen.
wenn du die 5% performance verbesserung offenbar nur wegen "nicht zeitkritisch" ignorieren willst, dann klingt das sehr danach.

der rest deines posts hat nichts mit meinem zu tun. ich glaube du hast dich da in einer erwartungshaltung hineingesteigert und was in meinem post gesehen, was da weder drinn steht noch gemeint war. denk mal drüber nach.

edit: glatt vergessen: ne js-anwendung die meinen rechner lahmlegt ist mir noch nicht untergekommen. welche die aber einen für das gebotene lächerlich hohe cpu-auslastung verursacht begegnet mir fast täglich. js ist durch die verbesserungen der vms ENORM verbessert worden, von performant ist man aber noch weit entfernt. insbesondere ist es sehr sehr anfällig für performance-fallen. es gibt einfach zu vieles was auf den ersten blick als richtig aussieht aber brutalen performance-impact hat. das ist allerdings weniger ein problem der sprache ansich (syntax und semantik), als vielmehr des modells auf das es wirkt (die vm macht davon nur einen teils aus).
 
Zuletzt bearbeitet:
Es bleibt das Kernproblem:
Alle Browser können JS, aber wie viele aktuell können Dart? Wie viele werden in 2-3 Jahren Dart können? Einen Leistungsgewinn hast du nicht, wenn du Dart zu JS kompilierst. Für so etwas würde ich eher auf CoffeeScript setzen, dafür gibt es wenigstens bereits erfolgreiche reale Anwendungsfälle (z.B. Dropbox)

Denk mal daran, wie viel Prozent der tatsächlich genutzten Browser nicht einmal ansatzweise CSS3 und HTML5 beherrschen. Von guten 20% kannst du hier ausgehen.... und das, obwohl der IE9 nun nicht gerade brandneu ist.
 
Daaron schrieb:
Immerhin hab ich gestern tatsächlich eine JS-Animation gefunden, die einen i5-2400 (unter Ubuntu x64 mit aktuellem Chromium Build) auf allen Kernen auf 40% Last hält: ein kleines Background-Script, dass 40 "Fussel" auf recht zufälligen Bahnen durchs Bild schweben lässt.
das lag dann aber nicht daran, dass JavaScript zu langsam ist, sondern dass da wieder ein "Entwicklergenie" entwickelt hat. Und eventuell am Browser-Rendering, wenn man das nicht geschickt macht kann das echt kosten, also wenn die 40 Fussel einzelne Browser-Renderings sind und nicht batched gemacht werden.

Dese schrieb:
du sagtest 99% der anwendungen sind nicht zeitkritisch. zeitkritisch ist ein so weitreichender und schwamminger begriff, dass schon allein deswegen jede zahl an grundlage entbehrt.
ok, mit den Zahlen war doof, sehe ich ein. Dann verbessere ich mich: Solange kein Entwicklervollpfosten entwickelt, wird quasi keine JavaScript-Anwendung an die Performance-Grenzen von JavaScript stoßen, also keine Realworld-Anwendung.
Wer natürlich AES in JavaScript entwickelt und damit eine 1GB Datei verschlüsseln will....

Dese schrieb:
performance zu verbessern sollte ausserdem nicht allein aus "zeitkritischen" gründen motiviert sein.

wenn du die 5% performance verbesserung offenbar nur wegen "nicht zeitkritisch" ignorieren willst, dann klingt das sehr danach.
Ich sage nicht, dass man nicht an der Performance arbeiten soll, dann hast du mich gründlich falsch verstanden. Aber einfach eine neue Sprache zu designen mit der Behauptung als Ziel, dass es dann schneller als JavaScript ist, ist einfach nur sinnlos. Jede Sprache ist nur so gut wie ihr Compiler.
Googles V8 Engine ist sogar im Language Shoout Game (wirklich kein absoluter Vergleich, aber ein netter Anhaltspunkt) schneller als Googles strikt typisierte Sprache Go. Es hängt vom Compiler ab und da kann bei JavaScript immernoch mehr als genug tun und das macht Google auch.

Dese schrieb:
der rest deines posts hat nichts mit meinem zu tun. ich glaube du hast dich da in einer erwartungshaltung hineingesteigert und was in meinem post gesehen, was da weder drinn steht noch gemeint war. denk mal drüber nach.
dann entschuldige ich mich, aber deine Aussage klingt absolut provokativ in die Richtung, dass man doch bitte Dart nehmen soll weil JavaScript langsam wie die Hölle ist und wir etwas effizienteres brauchen.


Dese schrieb:
welche die aber einen für das gebotene lächerlich hohe cpu-auslastung verursacht begegnet mir fast täglich. js ist durch die verbesserungen der vms ENORM verbessert worden, von performant ist man aber noch weit entfernt.
nur weil ein dämlicher Entwickler irgendwelchen Mist macht, ist doch noch nicht JavaScript infperformant. Ich kann dir auch Assembler-Code schreiben, der dir deinen Rechner voll auslastet.

Dese schrieb:
es gibt einfach zu vieles was auf den ersten blick als richtig aussieht aber brutalen performance-impact hat. das ist allerdings weniger ein problem der sprache ansich (syntax und semantik), als vielmehr des modells auf das es wirkt (die vm macht davon nur einen teils aus).
Da muss ich eben wehement widersprechen ;)
Ich entwicklere unter anderem in Node.js also auch Software auf Basis von JavaScript mit Sockets und allem drum und dran. Und ich kann dir sagen, dass bei Node.js auf lange Zeiten JavaScript nicht limitiert. Auf einem einzigen Core (da singlethreaded) bekomme ich 3500 HTTP Request/Sekunde, also langsam kann das nicht sein und das sind keine Hello World Ausgaben.
Und im Browser wird noch weit weniger JavaScript ausgeführt, als in so einer Node.js-Anwendung. Wenn es da soviel Leistung frisst, ist es fast immer das Browser-Rendering. Da werden dann in einer Schleife 50 Elemente des DOM modifiziert, statt alles in einer Operation zu machen und den ganzen betreffenden DOM-Baum auszutauschen. Es sind also im Endeffekt 50 Zeichenoperationen für den Browser, DAS killt die Leistung und DAS verursacht die hohe CPU-Last. Die JavaScript-Operationen laufen immer nur einen Bruchteil einer Millisekund, mal abgesehen von genialen Konstrukten wie diesem (da sind aber die Entwickler Schuld):
Code:
function sleep(ms) {
  var start = new Date().getTime();
  while(start + ms > new Date().getTime());
}



Wie gesagt: JavaScript hat wie Java aus den Urzeiten immernoch diesen "Bad Taste" es sei langsam wie sonstetwas. Aber die Technik hat sich entwickelt und es ist mitlerweile schnell genug für fast alles, eben bis auf Spezialfälle. Und wenn dann wiedermal eine Webseite Leistung frisst dann ist JavaScript Schuld, aber das muss es gar nicht sein wie ich schon sagte, das Browser-Rendering ist viel wahrscheinlicher oder man hat eben einen Programmierergott gehabt der sich irgendwo verewigt hat.
 
Zuletzt bearbeitet:
Zurück
Oben