Discussion:
Java -> ActionScript?
(zu alt für eine Antwort)
Stefan Matthias Aust
2007-10-22 10:05:51 UTC
Permalink
Hi,

Googles GWT-Compiler kann Java in JavaScript übersetzen, damit ein
Java-Entwickler sich um das Lernen von JavaScript drücken kann ;)
(Offizielles Argument ist wohl, dass statische Typen, bessere IDE, usw.
schöner sind, dabei ist JavaScript eigentlich eine recht elegante
funktionale Sprache.)

Gibt es ein vergleichbares Projekt für ActionScript 3? Wäre so etwas
sinnvoll? Möchte jemand so ein Projekt starten?

Ich würde gerne eine Java-Anwendung (z.B. meinen Python-Interpreter) für
Flash portieren, möchte aber nicht alles manuell umschreiben.

AS3 ist im Unterschried zu JS recht ähnlich zu Java, hat es doch "echte"
Klassen, Namensräume usw. Die Transformation müsste daher recht einfach
sein. Da es so ähnlich ist, braucht man leider auch eine bessere IDE als
bei JavaScript, wo ich mit Textmate und Firebug recht gut klar komme.
Und eine Java-IDE kenne ich schon...

Ich würde daher vorziehen, den Code weiterhin in Java zu entwickeln und
dann Java-Quelltext in ActionScript-Quelltext automatisch zu transformieren.

Oder wäre es der bessere Ansatz, Java direkt in ActionScript-Bytecode
(ABC) zu konvertieren? Scheint mir aufwendiger, doch man sollte entweder
bei MTASC oder Tamarin abgucken können, wie man SWF-Dateien mit ABC drin
erzeugt. Die AVM2-Spec beschreibt das ABC-Dateiformat, welches
verteufelt ähnlich zu Java Classfiles ist ;) Da Flex doch wohl inklusive
Kommandozeilenwerkzeuge opensource'd werden soll und diese in Java
geschrieben sind, hätte man in näherer Zukunft auch hier ein Vorbild zum
abgucken.
--
Stefan Matthias Aust
Jochen Theodorou
2007-10-22 13:26:01 UTC
Permalink
Post by Stefan Matthias Aust
Hi,
Googles GWT-Compiler kann Java in JavaScript übersetzen, damit ein
Java-Entwickler sich um das Lernen von JavaScript drücken kann ;)
(Offizielles Argument ist wohl, dass statische Typen, bessere IDE, usw.
schöner sind, dabei ist JavaScript eigentlich eine recht elegante
funktionale Sprache.)
ich denke das Argument ist eher, dass man für eine hohe Adoption sorgen
will und die meisten Javaentwickler sind ganz froh wenn sie nicht
nochwas lernen müssen. Letztlich also Bequemlichkeit ;) Sowas für Groovy
zu schreiben war auch schon mal im Gespräch, aber scheinbar brauchen
die Grailsleute das im Moment eher nicht.
Post by Stefan Matthias Aust
Gibt es ein vergleichbares Projekt für ActionScript 3? Wäre so etwas
sinnvoll? Möchte jemand so ein Projekt starten?
bin kein so grosser Fan von Flash, könnte sich allerdings lohnen.
Post by Stefan Matthias Aust
Ich würde gerne eine Java-Anwendung (z.B. meinen Python-Interpreter) für
Flash portieren, möchte aber nicht alles manuell umschreiben.
Ich dachte der wäre recht klein.
Post by Stefan Matthias Aust
AS3 ist im Unterschried zu JS recht ähnlich zu Java, hat es doch "echte"
Klassen, Namensräume usw. Die Transformation müsste daher recht einfach
sein. Da es so ähnlich ist, braucht man leider auch eine bessere IDE als
bei JavaScript, wo ich mit Textmate und Firebug recht gut klar komme.
Und eine Java-IDE kenne ich schon...
Ich würde daher vorziehen, den Code weiterhin in Java zu entwickeln und
dann Java-Quelltext in ActionScript-Quelltext automatisch zu transformieren.
sofern du alles brauchbar abbilden kannst ist das kein Problem. Das
Actionscript muss ja kein echtes Java sein, es muss nur hinreichend den
Erwartungen entsprechen.
Post by Stefan Matthias Aust
Oder wäre es der bessere Ansatz, Java direkt in ActionScript-Bytecode
(ABC) zu konvertieren? Scheint mir aufwendiger, doch man sollte entweder
bei MTASC oder Tamarin abgucken können, wie man SWF-Dateien mit ABC drin
erzeugt. Die AVM2-Spec beschreibt das ABC-Dateiformat, welches
verteufelt ähnlich zu Java Classfiles ist ;) Da Flex doch wohl inklusive
Kommandozeilenwerkzeuge opensource'd werden soll und diese in Java
geschrieben sind, hätte man in näherer Zukunft auch hier ein Vorbild zum
abgucken.
hmm.... wenn es ein Tool gibt das Javascript übersetzt und Javascript
hinreichend ähnlich zu Actionscript ist, dann könnte man einen dieser
Compiler nutzen um den Interpreter nach Flashbytecode zu übersetzen...
achne... moment, du wolltest ja allgemeines Java nutzen... Ok, mal gnaz
dumm gefragt... kann man da nicht mit dem GWT und einigen
Neudefinitionen/Textersetzungen schon ausreichend Funktionalität bekommen?

Im Allgemeinen empfehle ich jedenfalls nicht unbedingt das Generieren
von Bytecode, es ist umständlich und fehlerträchtig... jedenfalls wenn
es dem Bytecode der JVM ähnelt.

Gruss theo
--
Jochen "blackdrag" Theodorou
Groovy Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
<a href="http://www.g2one.com/">G2One</a>
Stefan Matthias Aust
2007-10-22 14:41:27 UTC
Permalink
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Googles GWT-Compiler kann Java in JavaScript übersetzen, damit ein
Java-Entwickler sich um das Lernen von JavaScript drücken kann ;)
(Offizielles Argument ist wohl, dass statische Typen, bessere IDE, usw.
schöner sind, dabei ist JavaScript eigentlich eine recht elegante
funktionale Sprache.)
ich denke das Argument ist eher, dass man für eine hohe Adoption sorgen
will und die meisten Javaentwickler sind ganz froh wenn sie nicht
nochwas lernen müssen. Letztlich also Bequemlichkeit ;)
Sag ich doch...
Post by Jochen Theodorou
Sowas für Groovy
zu schreiben war auch schon mal im Gespräch, aber scheinbar brauchen
die Grailsleute das im Moment eher nicht.
Groovy nach ActionScript? Ist dachte, Grails ist Servertechnologie?
Wollte man da direkt SWFs für RIAs (auch, ich liebe diese ganzen
Abkürzungen) bauen?
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Gibt es ein vergleichbares Projekt für ActionScript 3? Wäre so etwas
sinnvoll? Möchte jemand so ein Projekt starten?
bin kein so grosser Fan von Flash, könnte sich allerdings lohnen.
Die Flash-VM bietet bei einem 1/50 der Größe mehr als Java für Applets
je konnte. Flex für UIs ist Swing und co. haushoch überlegen, was
Entwicklungsgeschwindigkeit angeht. Und Webanwendungen mit HTML + CSS +
JavaScript + Canvas + Ajax usw zu bauen, ist auch nicht gerade angenehm.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ich würde gerne eine Java-Anwendung (z.B. meinen Python-Interpreter) für
Flash portieren, möchte aber nicht alles manuell umschreiben.
Ich dachte der wäre recht klein.
Und leider auch nicht fertig :( Und da ist das Problem: Ich will nicht
zwei Codebasen pflegen müssen. Als proof of concept habe ich mal
versucht, eine Python-artige Laufzeitumgebung in JavaScript zu bauen,
das funktioniert erstaunlich bequem - allerdings garantiert nicht
schnell. Sowas hätte ich jetzt gerne für ActionScript, ohne es nochmal
machen zu müssen.

Ich verspreche mir von ActionScript eigentlich eine bessere
Ausführungsgeschwindigkeit. Leider kann ich wohl keinen Code zur
Laufzeit erzeugen - JIT wie es Rhino, JRuby oder wohl auch Groovvy
machen geht in Flash leider nicht.
Post by Jochen Theodorou
sofern du alles brauchbar abbilden kannst ist das kein Problem. Das
Actionscript muss ja kein echtes Java sein, es muss nur hinreichend den
Erwartungen entsprechen.
Es gibt Namensräume, Klassen, Methoden, die üblichen primitiven
Datentypen, ich würde da keine größeren Probleme erwarten.

Doch bevor ich mir jetzt den javac-Source nehme, und schaue, ob ich aus
einem AST mit Hilfe von toAS3()-Methoden AS3 mache wollte ich fragen, ob
es sowas schon gibt und ob es vielleicht doch Probleme gibt, die ich
durch oberflächliches draufschauen nicht erkannt habe.
Post by Jochen Theodorou
hmm.... wenn es ein Tool gibt das Javascript übersetzt und Javascript
hinreichend ähnlich zu Actionscript ist, dann könnte man einen dieser
Compiler nutzen um den Interpreter nach Flashbytecode zu übersetzen...
Von Java nach JS ist das Problem, dass man Klassen und insbesondere
Vererbung simulieren muss. AS3 hat bereits Klassen (die vielleicht auch
simuliert werden, aber das passiert im AS3-Compiler, ich würde ja
AS3-Quelltext erzeugen wollen), das macht es schon mal einfacher. AS3
hat auch primitive Datentypen ähnlich wie Java - JavaScript kennt ja nur
String und Number und kein char, int, long, byte, usw.
Post by Jochen Theodorou
achne... moment, du wolltest ja allgemeines Java nutzen... Ok, mal gnaz
dumm gefragt... kann man da nicht mit dem GWT und einigen
Neudefinitionen/Textersetzungen schon ausreichend Funktionalität bekommen?
Ich denke nicht. Mir erscheint es einfacher, direkt aus einem Java-AST
das AS3 zu erzeugen. Dazu muss man dann genug von java.lang und
java.util für AS3 neu schreiben, bis alles da ist, was man so
üblicherweise braucht. Dies ist IMHO die eigentliche Arbeit, denn mir
fehlen Methoden in Character und String, für Streams und natürlich
Collections.
--
Stefan Matthias Aust
Jochen Theodorou
2007-10-22 15:29:12 UTC
Permalink
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Googles GWT-Compiler kann Java in JavaScript übersetzen, damit ein
Java-Entwickler sich um das Lernen von JavaScript drücken kann ;)
(Offizielles Argument ist wohl, dass statische Typen, bessere IDE, usw.
schöner sind, dabei ist JavaScript eigentlich eine recht elegante
funktionale Sprache.)
ich denke das Argument ist eher, dass man für eine hohe Adoption sorgen
will und die meisten Javaentwickler sind ganz froh wenn sie nicht
nochwas lernen müssen. Letztlich also Bequemlichkeit ;)
Sag ich doch...
Post by Jochen Theodorou
Sowas für Groovy
zu schreiben war auch schon mal im Gespräch, aber scheinbar brauchen
die Grailsleute das im Moment eher nicht.
Groovy nach ActionScript?
ne, sorry... nach Javascript ;) Was nicht heissen soll das ein
Actionscriptplugin keine chance hätte bei Grails ;)
Post by Stefan Matthias Aust
Ist dachte, Grails ist Servertechnologie?
jein... natürlich ist es hauptsächlich Servertechnologie, aber für Web
2.0 reicht das nicht.
Post by Stefan Matthias Aust
Wollte man da direkt SWFs für RIAs (auch, ich liebe diese ganzen
Abkürzungen) bauen?
eventuell schon.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Gibt es ein vergleichbares Projekt für ActionScript 3? Wäre so etwas
sinnvoll? Möchte jemand so ein Projekt starten?
bin kein so grosser Fan von Flash, könnte sich allerdings lohnen.
Die Flash-VM bietet bei einem 1/50 der Größe mehr als Java für Applets
je konnte. Flex für UIs ist Swing und co. haushoch überlegen, was
Entwicklungsgeschwindigkeit angeht. Und Webanwendungen mit HTML + CSS +
JavaScript + Canvas + Ajax usw zu bauen, ist auch nicht gerade angenehm.
stimmt natürlich
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ich würde gerne eine Java-Anwendung (z.B. meinen Python-Interpreter) für
Flash portieren, möchte aber nicht alles manuell umschreiben.
Ich dachte der wäre recht klein.
Und leider auch nicht fertig :( Und da ist das Problem: Ich will nicht
zwei Codebasen pflegen müssen.
kann ich verstehen ;)
Post by Stefan Matthias Aust
Als proof of concept habe ich mal
versucht, eine Python-artige Laufzeitumgebung in JavaScript zu bauen,
das funktioniert erstaunlich bequem - allerdings garantiert nicht
schnell. Sowas hätte ich jetzt gerne für ActionScript, ohne es nochmal
machen zu müssen.
ist das denn viel schneller?
Post by Stefan Matthias Aust
Ich verspreche mir von ActionScript eigentlich eine bessere
Ausführungsgeschwindigkeit. Leider kann ich wohl keinen Code zur
Laufzeit erzeugen - JIT wie es Rhino, JRuby oder wohl auch Groovvy
machen geht in Flash leider nicht.
kommt darauf an was Code und was Daten sind ;) Im Prinzip optimiert ein
JIT ja iene Datenstruktur zur Laufzeit, diese muss nicht unbedingt als
Bytecode vorliegen... jedenfalls nicht die ganze Zeit.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
sofern du alles brauchbar abbilden kannst ist das kein Problem. Das
Actionscript muss ja kein echtes Java sein, es muss nur hinreichend den
Erwartungen entsprechen.
Es gibt Namensräume, Klassen, Methoden, die üblichen primitiven
Datentypen, ich würde da keine größeren Probleme erwarten.
die Unterschiede leigen dann wahrschienlich in den Details... Muss
nicht unbedingt Probleme zur Folge haben ;)
Post by Stefan Matthias Aust
Doch bevor ich mir jetzt den javac-Source nehme, und schaue, ob ich aus
einem AST mit Hilfe von toAS3()-Methoden AS3 mache wollte ich fragen, ob
es sowas schon gibt und ob es vielleicht doch Probleme gibt, die ich
durch oberflächliches draufschauen nicht erkannt habe.
kann ich dir leider nicht beantworten
Post by Stefan Matthias Aust
Post by Jochen Theodorou
hmm.... wenn es ein Tool gibt das Javascript übersetzt und Javascript
hinreichend ähnlich zu Actionscript ist, dann könnte man einen dieser
Compiler nutzen um den Interpreter nach Flashbytecode zu übersetzen...
Von Java nach JS ist das Problem, dass man Klassen und insbesondere
Vererbung simulieren muss. AS3 hat bereits Klassen (die vielleicht auch
simuliert werden, aber das passiert im AS3-Compiler, ich würde ja
AS3-Quelltext erzeugen wollen), das macht es schon mal einfacher. AS3
hat auch primitive Datentypen ähnlich wie Java - JavaScript kennt ja nur
String und Number und kein char, int, long, byte, usw.
ohne jemals den Output eines GWT für ein normales Javaprogramm gesehen
zu haben ist es ein wenig schwer. Aber wenn es stimmt das sich
Actionscript und Javascript syntaktisch nicht sonderlich unterscheiden
und wenn Actionscript nur zusätzliche Komponenten hat, dann geht es
vielleicht doch mit einfacher Textersetzung. Man müsste sich halt mal
einfache Beispiele anschauen und dann prüfen welche Änderungen man
machen müsste.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
achne... moment, du wolltest ja allgemeines Java nutzen... Ok, mal ganz
dumm gefragt... kann man da nicht mit dem GWT und einigen
Neudefinitionen/Textersetzungen schon ausreichend Funktionalität bekommen?
Ich denke nicht. Mir erscheint es einfacher, direkt aus einem Java-AST
das AS3 zu erzeugen. Dazu muss man dann genug von java.lang und
java.util für AS3 neu schreiben, bis alles da ist, was man so
üblicherweise braucht. Dies ist IMHO die eigentliche Arbeit, denn mir
fehlen Methoden in Character und String, für Streams und natürlich
Collections.
dann wird das aber so klein nicht mehr werden. Ich meine ok an eine
normal Javadistribution kommt man wohl nicht heran, aber wenn es
wirklich eine 4MB-Version der JVM geben wird, dann wird aus 1/50 schnell
ein 1/4 und dann auch dabei bleibt es nicht wenn man dann noch halb
java.lang und java.util nachliefern muss.

Gruss theo
--
Jochen "blackdrag" Theodorou
Groovy Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Stefan Matthias Aust
2007-10-23 11:11:44 UTC
Permalink
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Groovy nach ActionScript?
ne, sorry... nach Javascript ;) Was nicht heissen soll das ein
Actionscriptplugin keine chance hätte bei Grails ;)
Sowas wie RJS bei Rails? Das ermöglicht es, kleine JS-Snippets in
vertrauter Ruby-Syntax zu schreiben. Da die aber keinen Parser benutzen,
sondern nur etwas Metamagie, geben bereits if oder while nicht.

Da ich aber gerade den ECMAScript 4 aka JavaScript 2 Overview
durchgelesen habe, frage ich mich gerade, ob man nicht statt Sprache-X
in JS zu übersetzen, auf JS2 in X übersetzen loslaufen sollte, denn ES 4
scheint eine ziemlich coole Sprache zu werden. Das meiste von AS3 ist da
drin und noch mehr. Und Adobe hat sich committed, AS4 kompatibel zu ES4
zu machen.

Wenn ich auf dem Client eh JS2 bzw. ES4 bzw. AS4 programmieren muss,
dann kann ich das doch auch auf dem Server benutzen. Leider wird es noch
1-2 Jahre dauern, bis es einen Firefox mit JS2 gibt, so befürchte ich.

Jochen, wenn du schon Groovy gemacht hast, wie wäre es mit ES4 als neue
Herausforderung? Der Sprachstandard wird gerade geschrieben, Testfälle
gibt es wohl auch schon oder sind am entstehen und eine Referenz-
implementierung soll es in ML geben.

Das ist ein IMHO solides Fundament. Die Sprache könnte auf der
Java-Plattform durchaus Erfolgschancen haben.

Als Teaser:

- objects, xml elements
- prototypen, classes, interfaces
- optional types, polymorphic, nullable
- generic functions w/ multimethods, operator overloading
- packages, namespaces
- closures
- generators
- proper tail calls
- reflections, meta classes
- no continuations to support efficient hosted implementations
- instance, class, property meta functions
- default, rest parameter

Z.B.

class A {
var i
function add(n) { return i + n }
}

let a = new A

oder

public class B {
private var _i:int
function get i():int { return _i; }
}

oder

dynamic class C extends A {
override function add(n) { ... }
}

oder

class C {
meta function get(name) { ... // catch all getter
}

oder

var x:like {x:int, s:string}
// dieser Variable kann man nur etwas zuweisen, wenn
// es ein x und ein s mit den passenden Typen hat

oder

return 10 + let (a = f(x)) a * (a - 1)
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Und leider auch nicht fertig :( Und da ist das Problem: Ich will nicht
zwei Codebasen pflegen müssen.
kann ich verstehen ;)
Daher denke ich jetzt gerade, vielleicht will ich ja in AS3 schreiben
und dann nach Java kompilieren... könnte bequemer sein, denn zumindest
ES4 bietet deutlich mehr als Java...
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Als proof of concept habe ich mal
versucht, eine Python-artige Laufzeitumgebung in JavaScript zu bauen,
das funktioniert erstaunlich bequem - allerdings garantiert nicht
schnell. Sowas hätte ich jetzt gerne für ActionScript, ohne es nochmal
machen zu müssen.
ist das denn viel schneller?
Keine Ahnung, habe keinen Benchmark.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ich verspreche mir von ActionScript eigentlich eine bessere
Ausführungsgeschwindigkeit. Leider kann ich wohl keinen Code zur
Laufzeit erzeugen - JIT wie es Rhino, JRuby oder wohl auch Groovvy
machen geht in Flash leider nicht.
kommt darauf an was Code und was Daten sind ;) Im Prinzip optimiert ein
JIT ja iene Datenstruktur zur Laufzeit, diese muss nicht unbedingt als
Bytecode vorliegen... jedenfalls nicht die ganze Zeit.
Etwas wie Python ist hochgradig interaktiv. Neue Funktionen, die über
die Kommandozeile eingegeben werden, will man doch auch in Bytecode
übersetzen und vom JIT dann kompilieren lassen, oder?
Post by Jochen Theodorou
Post by Stefan Matthias Aust
üblicherweise braucht. Dies ist IMHO die eigentliche Arbeit, denn mir
fehlen Methoden in Character und String, für Streams und natürlich
Collections.
dann wird das aber so klein nicht mehr werden. Ich meine ok an eine
normal Javadistribution kommt man wohl nicht heran, aber wenn es
wirklich eine 4MB-Version der JVM geben wird, dann wird aus 1/50 schnell
ein 1/4 und dann auch dabei bleibt es nicht wenn man dann noch halb
java.lang und java.util nachliefern muss.
Der Flash-Installer ist je nach Plattform 1-2 MB groß. Flex fügt für das
UI nochmal 400k hinzu, was bislang jede Flex-Anwendung mitschleppen
muss, mit der nächsten Flash-VM aber gecacht wird. Flex-Anwendungen sind
ca. 20-100k groß (plus Bilder, Fonts, usw).

Der Java-Installer ist etwa 15 MB groß, wenn er nur 4 MB erreicht, muss
man dort aber nochmal Swing nachladen, oder? Die 1/50 orientieren sich
zugegeben an der gefühlten Größe der Laufzeitumgebung auf der Platte,
doch Swing ist mindestens 5x größer als Flex.

Das Consumer JRE wird übrigens kleiner werden als Adobes neue
AIR-Runtime. Mal schauen, ob man dort dann Adobe vorwerfen wird, zu groß
zu sein :)
--
Stefan Matthias Aust
Jochen Theodorou
2007-10-23 15:56:09 UTC
Permalink
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Groovy nach ActionScript?
ne, sorry... nach Javascript ;) Was nicht heissen soll das ein
Actionscriptplugin keine chance hätte bei Grails ;)
Sowas wie RJS bei Rails? Das ermöglicht es, kleine JS-Snippets in
vertrauter Ruby-Syntax zu schreiben. Da die aber keinen Parser benutzen,
sondern nur etwas Metamagie, geben bereits if oder while nicht.
ne, ich dachte schon daran das zu übersetzen.
Post by Stefan Matthias Aust
Da ich aber gerade den ECMAScript 4 aka JavaScript 2 Overview
durchgelesen habe, frage ich mich gerade, ob man nicht statt Sprache-X
in JS zu übersetzen, auf JS2 in X übersetzen loslaufen sollte, denn ES 4
scheint eine ziemlich coole Sprache zu werden. Das meiste von AS3 ist da
drin und noch mehr. Und Adobe hat sich committed, AS4 kompatibel zu ES4
zu machen.
warum sollte ich den JS2 in etwas anderes übersetzen?
Post by Stefan Matthias Aust
Wenn ich auf dem Client eh JS2 bzw. ES4 bzw. AS4 programmieren muss,
dann kann ich das doch auch auf dem Server benutzen. Leider wird es noch
1-2 Jahre dauern, bis es einen Firefox mit JS2 gibt, so befürchte ich.
warum? Naja gut, wahrscheinlich ist die Sprache noch nicht fix genug.
Post by Stefan Matthias Aust
Jochen, wenn du schon Groovy gemacht hast, wie wäre es mit ES4 als neue
Herausforderung? Der Sprachstandard wird gerade geschrieben, Testfälle
gibt es wohl auch schon oder sind am entstehen und eine Referenz-
implementierung soll es in ML geben.
naja, im Moment bin ich mit Groovy ziemlich ausgelastet. 1.1 kommt
demnächst raus (2-3 Wochen), ich bin jetzt bei G2One (www.g2one.com)
sicher auch bald gut eingedeckt und dann startet die Entwicklung für
Groovy 2.0. Da wird es ein neues MetaClass System geben, das ich
entwickeln darf und das möglichst besser als das alte sein sollte ;)
Kurz gesagt, ich schätze bis zum Frühling habe ich mehr als genug zu tun
erstmal.
Post by Stefan Matthias Aust
Das ist ein IMHO solides Fundament. Die Sprache könnte auf der
Java-Plattform durchaus Erfolgschancen haben.
mag schon sein, aber es wäre taktisch unklug von mir... oder würdest du
umsonst für die Konkurrenz arbeiten?
Post by Stefan Matthias Aust
- objects, xml elements
xml elements? also XML direkt in der Syntax? Hatte ich schon erwähnt
dass Ich XML hasse?
Post by Stefan Matthias Aust
- prototypen, classes, interfaces
prototypen finde ich cool, allerdings bekomme ich sowas ähnliches mit
Expando in Groovy auch. Klassen und Interfaces eh.
Post by Stefan Matthias Aust
- optional types, polymorphic, nullable
nullable hat Groovy nicht direkt... das andere schon.
Post by Stefan Matthias Aust
- generic functions w/ multimethods, operator overloading
- packages, namespaces
- closures
hat Groovy
Post by Stefan Matthias Aust
- generators
das hat Groovy noch nicht... naja, man kann es simulieren.
Post by Stefan Matthias Aust
- proper tail calls
sobald die VM das bietet wird Groovy das auch haben... allerdings, wie
sollte eine Umsetzung von tail calls auf der JVM für JS2 aussehen, wenn
die VM das nicht kann? Bliebe nur eine VM in der VM zu basteln und dann
das zu simulieren, allerdings muss man dann auch einen JIT schreiben usw.
Post by Stefan Matthias Aust
- reflections, meta classes
hat Groovy.. wobei diese Fähigkeiten ein ziemlich weites Feld sind.
Post by Stefan Matthias Aust
- no continuations to support efficient hosted implementations
verstehe ich nicht... was soll das sein?
Post by Stefan Matthias Aust
- instance, class, property meta functions
was ist eine property meta function? getter/setter?
Post by Stefan Matthias Aust
- default, rest parameter
hat Groovy.


[...]
Post by Stefan Matthias Aust
dynamic class C extends A {
override function add(n) { ... }
}
ist override pflicht? wäre unschön. Und was bewirkt das dynamic?

[...]
Post by Stefan Matthias Aust
class C {
meta function get(name) { ... // catch all getter
}
hat Groovy schon.

[...]
Post by Stefan Matthias Aust
var x:like {x:int, s:string}
// dieser Variable kann man nur etwas zuweisen, wenn
// es ein x und ein s mit den passenden Typen hat
wenn das auch mit Methoden geht, dann braucht es ja keine Interfaces mehr...

[...]
Post by Stefan Matthias Aust
return 10 + let (a = f(x)) a * (a - 1)
ich fühle mich irgendwie an LISP erinnert ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Und leider auch nicht fertig :( Und da ist das Problem: Ich will nicht
zwei Codebasen pflegen müssen.
kann ich verstehen ;)
Daher denke ich jetzt gerade, vielleicht will ich ja in AS3 schreiben
und dann nach Java kompilieren... könnte bequemer sein, denn zumindest
ES4 bietet deutlich mehr als Java...
du meinst Java als Quelltext? Hmm... das hat seine Vorzüge, aber
schränkt dich auf Verrenkungen in der Javasyntax ein. Wenn du es in Java
wegen der Integration haben willst, dann musst du aber auch sehen, dass
Elemente gefordert sind, die im normalen JS2 nicht vorkommen. Es kommt
auch darauf an wie hoch die Integration sein soll. Mit Groovy kann ich
zum Beispiel Klassen schreiben und JPA nutzen.. soll das diese JS2 auch
können? usw.

[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ich verspreche mir von ActionScript eigentlich eine bessere
Ausführungsgeschwindigkeit. Leider kann ich wohl keinen Code zur
Laufzeit erzeugen - JIT wie es Rhino, JRuby oder wohl auch Groovvy
machen geht in Flash leider nicht.
kommt darauf an was Code und was Daten sind ;) Im Prinzip optimiert ein
JIT ja iene Datenstruktur zur Laufzeit, diese muss nicht unbedingt als
Bytecode vorliegen... jedenfalls nicht die ganze Zeit.
Etwas wie Python ist hochgradig interaktiv. Neue Funktionen, die über
die Kommandozeile eingegeben werden, will man doch auch in Bytecode
übersetzen und vom JIT dann kompilieren lassen, oder?
eben hier kommt es darauf an. Wenn du den JIT von Java benutzen willst,
dann musst du schon ein paar Verrenkungen machen. Groovy zum Beispiel
profitiert ausserordentlich von der server VM, aber der JIT fliegt
sozusagen nur mit einem Flügel (eine Aufgabe für Groovy 2.0). Der JIt
kann in Groovy zum Beispiel praktisch keine callsite Optimierungen
machen, wenn diese sich im von Groovy compilierten Code befindet... die
Infrastruktur passt einfach nicht.... noch nicht.

Wenn du jetzt aber zum Beispiel einen Interpreter schreibst, mit eigenem
JIT, dann sieht die Sache schon wieder ganz anders aus.... und so schlau
ist der JIT der JVM ja nun auch wieder nicht.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
üblicherweise braucht. Dies ist IMHO die eigentliche Arbeit, denn mir
fehlen Methoden in Character und String, für Streams und natürlich
Collections.
dann wird das aber so klein nicht mehr werden. Ich meine ok an eine
normal Javadistribution kommt man wohl nicht heran, aber wenn es
wirklich eine 4MB-Version der JVM geben wird, dann wird aus 1/50 schnell
ein 1/4 und dann auch dabei bleibt es nicht wenn man dann noch halb
java.lang und java.util nachliefern muss.
Der Flash-Installer ist je nach Plattform 1-2 MB groß. Flex fügt für das
UI nochmal 400k hinzu, was bislang jede Flex-Anwendung mitschleppen
muss, mit der nächsten Flash-VM aber gecacht wird. Flex-Anwendungen sind
ca. 20-100k groß (plus Bilder, Fonts, usw).
stimmt, ist nicht gerade aufwendig ;)
Post by Stefan Matthias Aust
Der Java-Installer ist etwa 15 MB groß, wenn er nur 4 MB erreicht, muss
man dort aber nochmal Swing nachladen, oder?
naja, das Ziel war halt für JavaFX etwas mit 4MB zu bekommen. Ob da
Swing mit reinpasst oder nicht, kann ich nicht sagen.
Post by Stefan Matthias Aust
Die 1/50 orientieren sich
zugegeben an der gefühlten Größe der Laufzeitumgebung auf der Platte,
doch Swing ist mindestens 5x größer als Flex.
stimmt natürlich
Post by Stefan Matthias Aust
Das Consumer JRE wird übrigens kleiner werden als Adobes neue
AIR-Runtime. Mal schauen, ob man dort dann Adobe vorwerfen wird, zu groß
zu sein :)
*g*

Gruss theo
--
Jochen "blackdrag" Theodorou
Groovy Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Stefan Matthias Aust
2007-10-24 07:49:15 UTC
Permalink
Post by Jochen Theodorou
warum sollte ich den JS2 in etwas anderes übersetzen?
JS2 könnte eine sehr interessante Sprache werden, die so manch andere
Sprache - inklusive Java - in den Schatten stellen könnte. Somit, das
wollte ich postulieren, sollte man lieber auf diese Sprache setzen und
sie dann auf "Legacy-Plattformen" wie Java zum Laufen bringen.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Wenn ich auf dem Client eh JS2 bzw. ES4 bzw. AS4 programmieren muss,
dann kann ich das doch auch auf dem Server benutzen. Leider wird es noch
1-2 Jahre dauern, bis es einen Firefox mit JS2 gibt, so befürchte ich.
warum? Naja gut, wahrscheinlich ist die Sprache noch nicht fix genug.
Nicht fix genug sind die Entwickler. Erst Firefox 4 soll JS2 enthalten
und wann der erscheint, steht in den Sternen. Die Mozilla-Seiten sind
voll von Aussagen wie Firefox 3 erscheint Q1 2007, was offensichtlich zu
optimistisch war. Und wenn die da schon fast ein Jahr hängen, dann
wird's mit der 4er Version nicht vor 2009...
Post by Jochen Theodorou
naja, im Moment bin ich mit Groovy ziemlich ausgelastet. 1.1 kommt
demnächst raus (2-3 Wochen), ich bin jetzt bei G2One (www.g2one.com)
Oh, ein Startup für Groovy-Support?
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Das ist ein IMHO solides Fundament. Die Sprache könnte auf der
Java-Plattform durchaus Erfolgschancen haben.
mag schon sein, aber es wäre taktisch unklug von mir... oder würdest du
umsonst für die Konkurrenz arbeiten?
Ich wollte suggerieren, dass JS2 die Chance hat, die anderen Sprachen
inklusive Groovy zu verdrängen. Sie wird - wenn sie tatsächlich in Flash
und Firefox eingebaut wird - eine extrem große Verbreitung bekommen und
damit wichtig als Entwicklungssprache für Webanwendungen werden.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- objects, xml elements
xml elements? also XML direkt in der Syntax? Hatte ich schon erwähnt
dass Ich XML hasse?
Falsche Antwort :) E4X ist bereits in AS3 eingebaut und eine schicke
Sache, um XML zu bearbeiten. Diese JS-Erweiterung trägt wesentlich dazu
bei, dass man mit Flex sehr einfach UIs bauen kann, die vom Server
kommende XML-Dokumente visualisieren.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- prototypen, classes, interfaces
prototypen finde ich cool, allerdings bekomme ich sowas ähnliches mit
Expando in Groovy auch. Klassen und Interfaces eh.
Es ging mir nicht so sehr um den Vergleich mit Groovy sondern darum,
dass JS2 deutlich mehr Stoff enthält als JS1. Man kann schon fast
argumentieren, dass diese Sprache jetzt viel zu kompliziert wird und der
Erfolg von JS1 in deren Einfachheit begründet lag. JS2 ist deutlich
komplexer und größer als Java.

Andererseits, wenn du sagst, dass Groovy das auch alles kann und damit
größer und komplexer als Java ist und dennoch erfolgreich, dann besteht
ja auch Hoffnung für JS2.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- optional types, polymorphic, nullable
nullable hat Groovy nicht direkt... das andere schon.
Ist IMHO für ein praktikables Typsystem wichtig, da es
null-Referenz-Fehler statisch vermeiden hilft.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- generic functions w/ multimethods, operator overloading
- packages, namespaces
- closures
hat Groovy
Groovy hat Multimethoden?
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- generators
das hat Groovy noch nicht... naja, man kann es simulieren.
Wie würde denn folgendes aussehen? Ich finde, Generator-Funktionen
erlauben eleganten und kurzen Code:

function traverse(node) {
if (node.isLeaf()) yield node
else traverse(node.left), traverse(node.right)
}

for (var n in travese(tree)) print (n)
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- proper tail calls
sobald die VM das bietet wird Groovy das auch haben... allerdings, wie
sollte eine Umsetzung von tail calls auf der JVM für JS2 aussehen, wenn
die VM das nicht kann? Bliebe nur eine VM in der VM zu basteln und dann
das zu simulieren, allerdings muss man dann auch einen JIT schreiben usw.
Das ist eine Herausforderung. Es gibt mehrere Möglichkeiten, keine ist
wirklich effizient. Pragmatisch ist vielleicht, was Scala macht. Die
werfen ab und zu eine Exception, um so den Stack wieder zu schrumpfen.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- no continuations to support efficient hosted implementations
verstehe ich nicht... was soll das sein?
Stand so in der Übersicht :) Man hat explizit darauf verzichtet, um die
Implementierung für CLR und JVM einfacher zu machen. Ich vermute, die
Aussage wurde gemacht, weil einige im Kommitee dafür waren, andere
dagegen, es gab streit und man hat die Entscheidung dokumentieren wollen.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- instance, class, property meta functions
was ist eine property meta function? getter/setter?
Da fehlt ein Komma. Ich meinte instance functions, static functions,
property functions und meta functions. Letztes ist, was man bei Python
mit diesen vielen __ __ kennt, also z.B.

def __call__(self)

um ein Objekt wie eine Funktion aussehen zu lassen. Das geht bei JS2
auch. Finde ich extrem praktisch.
Post by Jochen Theodorou
[...]
Post by Stefan Matthias Aust
dynamic class C extends A {
override function add(n) { ... }
}
ist override pflicht? wäre unschön. Und was bewirkt das dynamic?
Das override finde ich sehr gut (haben C# und Scala auch). Das dynamic
sorgt dafür, dass man zu Exemplaren von Klassen zur Laufzeit noch
properties hinzufügen kann - wie man jetzt bei JavaScript bei jedem
Objekt kann. Normalerweise erlauben das Klassen nicht.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Daher denke ich jetzt gerade, vielleicht will ich ja in AS3 schreiben
und dann nach Java kompilieren... könnte bequemer sein, denn zumindest
ES4 bietet deutlich mehr als Java...
du meinst Java als Quelltext?
Nein, ich meinte, AS3 als Quelle und daraus erzeuge ich dann Java. Statt
anders herum wie ich mir ursprünglich dachte.
Post by Jochen Theodorou
Hmm... das hat seine Vorzüge, aber
schränkt dich auf Verrenkungen in der Javasyntax ein. Wenn du es in Java
wegen der Integration haben willst, dann musst du aber auch sehen, dass
Elemente gefordert sind, die im normalen JS2 nicht vorkommen. Es kommt
auch darauf an wie hoch die Integration sein soll. Mit Groovy kann ich
zum Beispiel Klassen schreiben und JPA nutzen.. soll das diese JS2 auch
können? usw.
Wäre mir persönlich nicht wichtig, ist aber wahrscheinlich interessant.
Rhino kann's ja auch. Daher würde ich diese Integration als prinzipiell
gelöst betrachten :)
Post by Jochen Theodorou
Wenn du jetzt aber zum Beispiel einen Interpreter schreibst, mit eigenem
JIT, dann sieht die Sache schon wieder ganz anders aus.... und so schlau
ist der JIT der JVM ja nun auch wieder nicht.
Ich sprach von dem JIT der Flash-VM und klagte, dass ich für Flash (also
AS3) keinen Interpreter schreiben kann, der zur Laufzeit Bytecode (ABC)
erzeugt, der dann ge-JIT-et wird. Bei Java geht das ja durch geschickten
Einsatz von ClassLoadern.
Post by Jochen Theodorou
naja, das Ziel war halt für JavaFX etwas mit 4MB zu bekommen. Ob da
Swing mit reinpasst oder nicht, kann ich nicht sagen.
Ist aber JavaFX ist schon tot gewesen, als es angekündigt wurde? Ich
glaube ja, der Kampf wird zwischen Microsoft (Silverlight) und Adobe
(Flash) ausgetragen.
--
Stefan Matthias Aust
Jochen Theodorou
2007-10-24 15:29:31 UTC
Permalink
[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Wenn ich auf dem Client eh JS2 bzw. ES4 bzw. AS4 programmieren muss,
dann kann ich das doch auch auf dem Server benutzen. Leider wird es noch
1-2 Jahre dauern, bis es einen Firefox mit JS2 gibt, so befürchte ich.
warum? Naja gut, wahrscheinlich ist die Sprache noch nicht fix genug.
Nicht fix genug sind die Entwickler. Erst Firefox 4 soll JS2 enthalten
und wann der erscheint, steht in den Sternen. Die Mozilla-Seiten sind
voll von Aussagen wie Firefox 3 erscheint Q1 2007, was offensichtlich zu
optimistisch war. Und wenn die da schon fast ein Jahr hängen, dann
wird's mit der 4er Version nicht vor 2009...
das ist aber eine verdammt lange Zeit.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
naja, im Moment bin ich mit Groovy ziemlich ausgelastet. 1.1 kommt
demnächst raus (2-3 Wochen), ich bin jetzt bei G2One (www.g2one.com)
Oh, ein Startup für Groovy-Support?
yepp ;)

witzig finde ich ja die Gründerzusammensetzung... Guillaume ist der
Projektmanager von Groovy und Initiator von Grails, Grame ist der
Projektmanager von Grails und hat es aus den Kinderschuhen herausgeführt
, und Alex... der ist noch ganricht lange dabei, hat aber die
Performance in Groovy aufs Korn genommen... er war vorher bei JetBrains.
Ich bin sozusagen, der erste den sie dann angestellt haben und weitere
wichtige Enwickler werden folgen.

G2One bietet dann Training und kommerziellen Support für Firmen im
Bereich Groovy und Grails. Wir haben festgestellt dass man im
professionellen Bereich einfach besser damit fährt wenn es eine Firma
gibt die man dann auch mittels eines Vertrages zur Verantwortung ziehen
kann ;) Die Firma ist noch ganz neu, aber auf der Grails eXchange 2007
schienen viele darüber sehr erfreut zu sein. Tja, wird sicher
interessant, ist das erste Startup bei dem ich bin...

ähm... ich glaube ich mache gerade Werbung .. sorry ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Das ist ein IMHO solides Fundament. Die Sprache könnte auf der
Java-Plattform durchaus Erfolgschancen haben.
mag schon sein, aber es wäre taktisch unklug von mir... oder würdest du
umsonst für die Konkurrenz arbeiten?
Ich wollte suggerieren, dass JS2 die Chance hat, die anderen Sprachen
inklusive Groovy zu verdrängen. Sie wird - wenn sie tatsächlich in Flash
und Firefox eingebaut wird - eine extrem große Verbreitung bekommen und
damit wichtig als Entwicklungssprache für Webanwendungen werden.
ok, dann mal die Gegenfrage... warum hat das Javascript nicht geschafft?
Warum ist Javascript nicht Actionscript? Was wird Adobe daran hindern
JS2 in Action Script 4 abzuwandeln? Warum glaubst du sollte JS2 in der
Lage sein Java zu verdrängen? Warum sollte JS2 zum Beispiel in der Lage
sein Ruby zu verdrängen?
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- objects, xml elements
xml elements? also XML direkt in der Syntax? Hatte ich schon erwähnt
dass Ich XML hasse?
Falsche Antwort :) E4X ist bereits in AS3 eingebaut und eine schicke
Sache, um XML zu bearbeiten. Diese JS-Erweiterung trägt wesentlich dazu
bei, dass man mit Flex sehr einfach UIs bauen kann, die vom Server
kommende XML-Dokumente visualisieren.
dazu brauche ich aber doch keine XML syntax direkt in der Sprache!?
Groovy benutzt dazu GPath, was XPath ein wenig ähnelt (aber nicht nur
auf XML funktioniert) und entsprechende builder. Damit bekommt man zwar
kein E4X, aber nur weil die Buildersyntax nicht XML ist.... was auch gut
so ist ;) Ausserdem sind beides allgemeine Konzepte der
Programmiersprache, die nicht nur mit XML genutzt werden können.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- prototypen, classes, interfaces
prototypen finde ich cool, allerdings bekomme ich sowas ähnliches mit
Expando in Groovy auch. Klassen und Interfaces eh.
Es ging mir nicht so sehr um den Vergleich mit Groovy sondern darum,
dass JS2 deutlich mehr Stoff enthält als JS1. Man kann schon fast
argumentieren, dass diese Sprache jetzt viel zu kompliziert wird und der
Erfolg von JS1 in deren Einfachheit begründet lag. JS2 ist deutlich
komplexer und größer als Java.
was ja eigentlich gegen den Trend spricht, denn der geht eigentlich
wieder zur flachen Lernkurve, zur einfachen Handhabung und zur geringen
Komplexität. Javascript wurde gerne benutzt weil a) die meisten Browser
es unterstützen und b) weil man es verwqenden kann ohne es wirklich zu
verstehen.

mein erster Gedanke war das man versucht hat Javascript zu
"javasieren"... ich weiss kein echtes Wort, aber warum sonst bringt man
da statische Typen ein, Klassen und auch Interfaces? Interessant wäre
auch die Frage ob ein Javascript programm auch auf einem Javascript2
System läuft.

Man muss sich mal anschauen wie eine von den jüngeren
Programmiersprachen gross geworden ist. Ruby hatte Ruby on Rails. Ich
bezweifle dass Railsfans ihr Ruby gegen Javascript eintauschen möchten.
Und wo wäre Ruby heute ohne Rails? Groovy ist noch nicht sonderlich
gross, aber wir haben es immer als Teil einer Javatoolbox verkauft. Eben
um das Leben mit Java einfacher zu machen. Wir wollten es nie als das
neue Java verkaufen. Würdest du zum Beispiel Scott Davis
(http://www.nofluffjuststuff.com/speaker_view.jsp?speakerId=18) fragen,
dann würde er dir sagen, dass er die Zukunft nicht bei einer einzelnen
Sprache, sondern bei einer Kooperation sieht. Eben die richtige Sprache
für den richtigen Einsatzzweck. Das sieht man ja auch an der JVM zum
Beispiel.

Wer an Javascript2 herangeht mit dem Gedanken dass es die anderen
Sprachen verdrängen wird sollte sich meiner Meinung nach einiges an Zeit
nehmen, denn das wird es brauchen. Ich will nicht behaupten dass es
keine Chance hat, es wird wahrscheinlich nur nicht so schnell gehen...
So blöd es auch klingen mag, das hängt auch von der Geschwindigkeit der
Implementierungen ab. Es wird wohl JS1 vom Browser verdrängen, aber ob
es auch darüber hinaus erfolgreich sein wird ist jetzt schwer zu sagen.
Kommt auf das Marketing an.
Post by Stefan Matthias Aust
Andererseits, wenn du sagst, dass Groovy das auch alles kann und damit
größer und komplexer als Java ist und dennoch erfolgreich, dann besteht
ja auch Hoffnung für JS2.
Groovy wurde für Javaentwickler geschaffen. Die können Javaprogramme
fast 1:1 einfach mal in Groovy testen. Die Lernkurve für diese
Programmierer ist extrem flach. Und auch Neueinsteiger kommen damit gut
zurecht, weil man nicht gleich mit Klassen anfangen muss, sondern
erstmal rein funktional vorgehen kann. Es gibt mindestens einen
Professor der Groovy als Lernsprache einsetzt. Auch hier kann man wieder
langsam anfangen und sich dann beständig steigern. Ja, es ist komplexer
als Java, weil es mehr Syntax hat und weil es mehr Konzepte hat, aber
man wird halt nicht gleich ins kalte Wasser geschmissen. Wie das jetzt
bei JS2 sein wird.. keine Ahnung.

Ich denke es kommt wirklich mehr auf das Marketing an... ich glaube zum
Beispiel das ausserhalb des Javabereichs kaum einer Groovy kennen wird.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- optional types, polymorphic, nullable
nullable hat Groovy nicht direkt... das andere schon.
Ist IMHO für ein praktikables Typsystem wichtig, da es
null-Referenz-Fehler statisch vermeiden hilft.
hmm... ich stimme dir nicht zu. Muss dass denn statisch sein? Sicher...
Compilerzentrisch gedacht hat man mehr davon wenn es statisch ist, aber
das setzt auch ein Typsystem vorraus, das sich mal gerne in den
Vordergrund schiebt. Also nehmen wir mal Typ! als Notation dafür dass es
nicht null sein darf.... nur zur Veranschaulichung:

def foo(x) {bar(x)}
def bar(X! x) {1}

soll bedeuten foo bekommt ein Argument mit unbekannten Typ und ruft bar
auf, welches ein X nimmt und das argument für bar darf nicht null sein.
so die erste Frage wäre hier nun ob ein solcher Aufruf ohne das !
erlaubt wäre. in Groovy ist es das, hat das argument den falschen Typ,
gibt es eben eine MissingMethodException zur Laufzeit und gut ist. Wir
haben uns zu diesem Verhalten entschieden weil es vieles innerhalb der
Sprache einfacher macht, sowohl in der Implementierung, als auch im
Verständniss. Wenn ich aber einen statischen check haben will ob der
Aufruf bar(x) zuulässig ist, oder nicht, dann wird daraus nichts. Dann
muss man das prüfen. Und weil man nicht weiss was das x von foo(x) ist,
ist folglich der Aufruf bar(x) illegal... selbst wenn x ein X ist und
auch nicht null ist. Das bedeutet wiederum ich muss foo diesen Typen
geben usw. Und wenn ich das umgehen will, dann muss ich diese komischen
strukturellen Typen benutzen... die auch ganz schön kompliziert werden,
wenn man auch noch unions braucht. Eine Frage wäre auch ob sowas erlaubt
ist:

def foo(x) {bar((X!)x)}
def bar(X! x) {1}

also ein cast zu X! Würde zwar nicht die Bevölkerung des dynamischen
Codes mit unnützen Typen so sehr nach sich ziehen wie der
Compilierfehler wäre aber hässlich. Aber mal angenommen der Test wird
statisch gemacht, wenn eine statische Information vorliegt, als x in foo
einen statischen Typen hat und ansonsten einfach zur Laufzeit, dann wäre
das ok. Keine Ahnung wie der Standard das da sieht. Jedefalls müsste
entweder die Methode oder das Laufzeitsystem dann den Check zur Laufzeit
machen... ein bischen inkonsistentes Verhalten. Ausserdem wird es Leute
dazu animieren das statische Typsystem auszuschöpfen.... was ich nicht
gut finde.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- generic functions w/ multimethods, operator overloading
- packages, namespaces
- closures
hat Groovy
Groovy hat Multimethoden?
kommt auf die Definition an...

class A{
def foo(x){bar(x)}
def bar(Object x){1}
}

class B extends A {
def bar(String y) {super.bar(x)+2}
}

def a = new A()
assert a.foo(new Object()) == 1
assert a.foo("String!!!") == 3

das deckt zumindest einen Teil der mir bekannten Definitionen ab ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- generators
das hat Groovy noch nicht... naja, man kann es simulieren.
Wie würde denn folgendes aussehen? Ich finde, Generator-Funktionen
function traverse(node) {
if (node.isLeaf()) yield node
else traverse(node.left), traverse(node.right)
}
for (var n in travese(tree)) print (n)
naja, ist schon sehr hässlich... es gibt einen Patch, der das each auf
MethodClosure zu einem Generator machen soll... aber wir haben uns
bisher noch nicht dazu entschieden das auch so zu machen... siehe
http://groovy.codehaus.org/Iterator+Tricks

sollten wir uns dazu entschliessen Generatoren wirklich zu unterstützen,
dann würden wir wohl auch yield verwenden und den Stackframe der
momentanen Funktion/Methode sichern. Den kompletten Stack brauchen wir
ja nicht, nur den einzelnen Stackframe. Dann müsste man auch keine
Threads missbrauchen ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- proper tail calls
sobald die VM das bietet wird Groovy das auch haben... allerdings, wie
sollte eine Umsetzung von tail calls auf der JVM für JS2 aussehen, wenn
die VM das nicht kann? Bliebe nur eine VM in der VM zu basteln und dann
das zu simulieren, allerdings muss man dann auch einen JIT schreiben usw.
Das ist eine Herausforderung. Es gibt mehrere Möglichkeiten, keine ist
wirklich effizient. Pragmatisch ist vielleicht, was Scala macht. Die
werfen ab und zu eine Exception, um so den Stack wieder zu schrumpfen.
die haben tail callsohne den Compiler die Tranformationen machen zu
lassen? Und die haben auch tail calls wo man zwischendurch eine
Bibliothek aufrufen kann ohne dass man dann alles instrumentieren muss?
Bezweifle ich irgendwie, aber ich werde mir das bei Gelegenheit nochmal
ansehen.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- no continuations to support efficient hosted implementations
verstehe ich nicht... was soll das sein?
Stand so in der Übersicht :) Man hat explizit darauf verzichtet, um die
Implementierung für CLR und JVM einfacher zu machen. Ich vermute, die
Aussage wurde gemacht, weil einige im Kommitee dafür waren, andere
dagegen, es gab streit und man hat die Entscheidung dokumentieren wollen.
ne, ok... ich meinte mehr... heisst das jetzt man hat sich explizit
gegen continuations entschieden und sieht das als einen Vorteil an? Und
als Grund gibt man die Effizienz an? hmm.... klingt nach einer seltsamen
Entscheidung.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
- instance, class, property meta functions
was ist eine property meta function? getter/setter?
Da fehlt ein Komma. Ich meinte instance functions, static functions,
property functions und meta functions. Letztes ist, was man bei Python
mit diesen vielen __ __ kennt, also z.B.
def __call__(self)
um ein Objekt wie eine Funktion aussehen zu lassen. Das geht bei JS2
auch. Finde ich extrem praktisch.
ach das... ja sowas hat groovy indirekt auch... naja... indirekt ist
falsch... man kann ein Objekt wie eine Funktion benutzen, wenn das
Objekt eine call Methode hat... zumindest wenn wir das nicht
versehentlich auf "Closures" irgendwo spezialisiert haben.. weil
eigentlich benutzen wir das nur für die... hat Vor- und Nachteile.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
[...]
Post by Stefan Matthias Aust
dynamic class C extends A {
override function add(n) { ... }
}
ist override pflicht? wäre unschön. Und was bewirkt das dynamic?
Das override finde ich sehr gut (haben C# und Scala auch). Das dynamic
sorgt dafür, dass man zu Exemplaren von Klassen zur Laufzeit noch
properties hinzufügen kann - wie man jetzt bei JavaScript bei jedem
Objekt kann. Normalerweise erlauben das Klassen nicht.
ich finde override nicht so schön, weil es die Deklaration länger macht.
Wenn es optional ist, ok, wenn nicht... naja, Geschmackssache. Das mit
den Properties ist... schon wieder ein dynamisches Element, das man
explizit aktivieren muss und sich mit der statischen Sicht beisst... Da
kommt wieder eine ähnliche Frage auf wie bei Nullable:

int x = foo.y

unter welchen Umständen compiliert das? Compiliert es wenn foo eine
"statische" Klasse hat und ein entsprechendes Property/Feld (wie auch
immer das da heisst) namens y und muss dieses y den Typ int haben, oder
kann es auch Typenlos sein? Compiliert es auch wenn foo eine dynamische
Klasse hat und kein Feld/Property y? Oder wenn es eines hat, muss das
dann ein int sein? Kann man in einer dynamischen Klasse ein vorhandenes
Feld "überschreiben"? usw. Wenn das da oben nur geht wenn y als int
deklariert ist (egal ob dynamische Klasse oder nicht), dann wäre das
traurig. Zumindest wüsste ich dann, dass diese Sprache nicht meinem
Geschmack entspricht. Wenn das wirklich so wäre, dann wird man pausenlos
zu statischer Programmierung gezwungen.... dann hätten sie die
dynamischen Teile auch gleich ganz rausschmeissen können, denn das mit
dem "optionale Typen" ist dann nur ein Alibi.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Daher denke ich jetzt gerade, vielleicht will ich ja in AS3 schreiben
und dann nach Java kompilieren... könnte bequemer sein, denn zumindest
ES4 bietet deutlich mehr als Java...
du meinst Java als Quelltext?
Nein, ich meinte, AS3 als Quelle und daraus erzeuge ich dann Java. Statt
anders herum wie ich mir ursprünglich dachte.
äh... ja... ich meinte Javaquelltext erzeugen, oder irgendwas was
"direkt" auf der JVM läuft, also Bytecode ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Hmm... das hat seine Vorzüge, aber
schränkt dich auf Verrenkungen in der Javasyntax ein. Wenn du es in Java
wegen der Integration haben willst, dann musst du aber auch sehen, dass
Elemente gefordert sind, die im normalen JS2 nicht vorkommen. Es kommt
auch darauf an wie hoch die Integration sein soll. Mit Groovy kann ich
zum Beispiel Klassen schreiben und JPA nutzen.. soll das diese JS2 auch
können? usw.
Wäre mir persönlich nicht wichtig, ist aber wahrscheinlich interessant.
Rhino kann's ja auch. Daher würde ich diese Integration als prinzipiell
gelöst betrachten :)
was kann Rhino? Eine Klasse in Bytecodeerzeugen, verziert mit den
passenden Annotationen? Hast du ein Beispiel? Das würde ich gerne mal sehen.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Wenn du jetzt aber zum Beispiel einen Interpreter schreibst, mit eigenem
JIT, dann sieht die Sache schon wieder ganz anders aus.... und so schlau
ist der JIT der JVM ja nun auch wieder nicht.
Ich sprach von dem JIT der Flash-VM und klagte, dass ich für Flash (also
AS3) keinen Interpreter schreiben kann, der zur Laufzeit Bytecode (ABC)
erzeugt, der dann ge-JIT-et wird. Bei Java geht das ja durch geschickten
Einsatz von ClassLoadern.
achso.... halt ne... was hat das mit ClassLoadern zu tun?
Post by Stefan Matthias Aust
Post by Jochen Theodorou
naja, das Ziel war halt für JavaFX etwas mit 4MB zu bekommen. Ob da
Swing mit reinpasst oder nicht, kann ich nicht sagen.
Ist aber JavaFX ist schon tot gewesen, als es angekündigt wurde? Ich
glaube ja, der Kampf wird zwischen Microsoft (Silverlight) und Adobe
(Flash) ausgetragen.
sicherlich hat JavaFX keinen leichten Stand. Aber als tot würde ich es
nicht bezeichnen. Und wenn der einzige Erfolg ist, dass man eine
minimalisierte JVM bekommt, dann war es das schon wert ;) Immerhin hat
JavaFX bewirkt dass der SwingBuilder in Groovy plötzlich 3 neue
committer gefunden hat und die den gründlich gesäubert haben und auch
ein wenig binding Funktionalitäten eingebaut haben. Aus meiner Sicht
hatte dadurch JavaFX schon ein paar positive Impulse.

Ich denke Flash wird wie üblich daran kranken, dass Adobe die Tools
nicht freigeben will und auch versucht das Basteln neuer Tools durch
andere zu verhindern (Lizenz und Patente). Zu Silverlight gibt es
immerhin schon Plugins für Firefox und es gibt Moonlight für Linuxer.
Wenn es jetzt noch eine alternative freie Entwicklungsumgebnug geben
wird, dann sieht die Zukunft für Flash schlecht aus meiner Meinung nach.

Ich denke allerdings JavaFX hat dann im Bereich Mobiltelefone noch
Chancen denke ich... wie lange weiss ich aber nicht. Flash wird
sicherlich auch nicht einfach verschwinden.... die Vor- und Nachteile
kommen ja erst so nach und nach hoch...

Gruss theo
--
Jochen "blackdrag" Theodorou
Groovy Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Stefan Matthias Aust
2007-10-25 10:38:20 UTC
Permalink
Post by Jochen Theodorou
witzig finde ich ja die Gründerzusammensetzung... Guillaume ist der
Projektmanager von Groovy und Initiator von Grails, Grame ist der
Projektmanager von Grails und hat es aus den Kinderschuhen herausgeführt
, und Alex... der ist noch ganricht lange dabei, hat aber die
Performance in Groovy aufs Korn genommen... er war vorher bei JetBrains.
Was ist daran witzig? Das es nur Techniker gibt und keine
Vollblut-Kaufleute? ;)
Post by Jochen Theodorou
G2One bietet dann Training und kommerziellen Support für Firmen im
[...]
schienen viele darüber sehr erfreut zu sein. Tja, wird sicher
interessant, ist das erste Startup bei dem ich bin...
Ich wünsche euch Erfolg... das klingt doch nach einem Traumjob.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ich wollte suggerieren, dass JS2 die Chance hat, die anderen Sprachen
inklusive Groovy zu verdrängen. Sie wird - wenn sie tatsächlich in Flash
und Firefox eingebaut wird - eine extrem große Verbreitung bekommen und
damit wichtig als Entwicklungssprache für Webanwendungen werden.
ok, dann mal die Gegenfrage... warum hat das Javascript nicht geschafft?
Was? Das verdrängen anderer Scriptsprachen auf der JVM? Nun, Rhino war
und ist erfolgreich. Eine stabile Software, vollständig und nicht nur
ein halber proof-of-principle wie 90% der anderen Sprachen. JS ist ja
sogar als default bei Java 6 dabei. Das nenne ich geschafft...
Post by Jochen Theodorou
Warum ist Javascript nicht Actionscript? Was wird Adobe daran hindern
JS2 in Action Script 4 abzuwandeln?
Sie selbst. Das erklärte Ziel ist Kompatibilität, damit sie sagen
können, dass man Flash genauso einfach wie Webseiten programmieren kann.
Denen ist an noch einem Dialekt nicht gelegen. Der Einstieg in
ActionScript war einfach, da ich JavaScript und Java kannte. Dennoch
gibt es in AS3 Unterschiede zu JS1, da sie eben Konzepte aus Java für
das "programming in the large" übernommen haben.
Post by Jochen Theodorou
Warum glaubst du sollte JS2 in der
Lage sein Java zu verdrängen?
Nein, nicht Java, sondern andere Scriptsprachen für Java.
Post by Jochen Theodorou
Warum sollte JS2 zum Beispiel in der Lage
sein Ruby zu verdrängen?
Weil Ruby einen überraschenden Erfolg nur Rails zu verdanken hat. Ein
"Rails" in JavaScript könnte viele Leute zu JavaScript bringen (wie ihr
es ja auch mit Groovy und Grails macht). Als Steve Yegge erwähnte, dass
er als internes Projekt Rails auf Rhino portiert hatte, was das
Interesse riesig.
Post by Jochen Theodorou
dazu brauche ich aber doch keine XML syntax direkt in der Sprache!?
Es ist praktisch. Wenn ich dem Server ein XML-Dokument schicken muss und
einfach

http.Send(<foo>{name}</foo>)

schreiben kann, ist das bequem und besser als Strings zu benutzen, wo
ich auch leicht man ein End-Tag vergessen könnte. Natürlich kann ich XML
auch bequem parsen, etwa

var list = doc..name(@staff == 'true')

was mir dann ein Array aller der <name>-Elemente gibt, die ein Attribut
"staff='true'" haben. Der Vorteil ist, die Syntax ist ähnlich zu XPath
und kommt auch mit Namensräumen klar, die wahrscheinlich bei etwas wie
GPath, das mit Java bzw. Groovy-Syntax auskommen muss, zu Problemen
führen könnten. Oder wie würdest du angeben, dass du nur Elemente

<x:name xmlns:x="urn:example:1"/>

finden willst, nicht aber andere Elemente mit dem lokalen Namen "name"?
Post by Jochen Theodorou
so ist ;) Ausserdem sind beides allgemeine Konzepte der
Programmiersprache, die nicht nur mit XML genutzt werden können.
Das ist definitiv ein Vorteil. Ich würde aber sagen, etwas wie GPath
oder Builder sollten noch nicht einmal Konzepte der Sprache sein,
sondern diese sollte so flexibel sein, dass man sich das als Library
selbst bauen kann (was vielleicht in Groovy geht). In JS1 oder AS3 hast
du da keine Chance, aber durch die Meta-Funktionen in JS2 könnte es gehen.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Es ging mir nicht so sehr um den Vergleich mit Groovy sondern darum,
dass JS2 deutlich mehr Stoff enthält als JS1. Man kann schon fast
argumentieren, dass diese Sprache jetzt viel zu kompliziert wird und der
Erfolg von JS1 in deren Einfachheit begründet lag. JS2 ist deutlich
komplexer und größer als Java.
was ja eigentlich gegen den Trend spricht, denn der geht eigentlich
wieder zur flachen Lernkurve, zur einfachen Handhabung und zur geringen
Komplexität.
Sag das C# 3.0 :) Ich denke, es geht eher in Richtung "erwachsene"
Sprachen, d.h. die existierenden User wollen immer mehr und daher
wachsen die Sprachen - auch Java.

Weniger wäre IMHO natürlich mehr, aber dann kommen wie zu Sprachen wie
Python oder Scheme und die sind irgendwie nie so beliebt wie die fetten
Sprachen. Groovy ist als Superset von Java ja auch komplexer.
Post by Jochen Theodorou
Javascript wurde gerne benutzt weil a) die meisten Browser
Wieso Vergangenheitsform?
Post by Jochen Theodorou
es unterstützen und b) weil man es verwqenden kann ohne es wirklich zu
verstehen.
Das kann man mit fast jeder Sprache :)

Vergiss die Hobby-User, die irgendwas mit JavaScript irgendwie
zusammenfummeln. Die Sprache ist IMHO wichtig, weil man versucht, immer
komplexere Webanwendungen im Browser zu realisieren und da kommt man
eben nicht um JavaScript herum. Und die Bibliotheken wachsen - man
schaue sich man Dojo (ugg) an, oder YUI oder Ext oder auch nur den
Quelltext von Google Maps. Viel JavaScript. Und da haben sich die Macher
von JS2 gesagt, Klassen, Typen, usw. sind hilfreich.
Post by Jochen Theodorou
mein erster Gedanke war das man versucht hat Javascript zu
"javasieren"... ich weiss kein echtes Wort, aber warum sonst bringt man
da statische Typen ein, Klassen und auch Interfaces? Interessant wäre
Das habe ich auch so verstanden.
Post by Jochen Theodorou
auch die Frage ob ein Javascript programm auch auf einem Javascript2
System läuft.
Das ist das Ziel.

Aus dem Grund reparier man dann auch nicht so Dinge wie "typeof null ==
'object'" oder spezifiziert gewisse Dinge so, wie der IE es macht, passt
also die Spec an die Realität der Browser an.
Post by Jochen Theodorou
Man muss sich mal anschauen wie eine von den jüngeren
Programmiersprachen gross geworden ist. Ruby hatte Ruby on Rails. Ich
bezweifle dass Railsfans ihr Ruby gegen Javascript eintauschen möchten.
Ich weiß nicht, Ruby ist sicherlich nicht die beste Sprache. Ich finde
z.B. Python deutlich eleganter. Mich stört der Ansatz, den andere
sicherlich lieben, dass es immer mehr als einen Weg gibt. Rails ist
nett, aber hat viel, viel Magie und ist vergleichsweise schwer zu lernen.

Das Argument, Client- und Server-Seite in der selben Sprache entwickeln
zu können, ist IMHO recht stark und könnte helfen. Allerdings befürchte
ich, eher wird es eine Lösung (Silverlight) geben, mit der man Ruby auf
dem Client machen kann, als dass JS2 fertig wird...
Post by Jochen Theodorou
Und wo wäre Ruby heute ohne Rails?
Ein Exot wie Smalltalk...
Post by Jochen Theodorou
Groovy ist noch nicht sonderlich
gross, aber wir haben es immer als Teil einer Javatoolbox verkauft. Eben
um das Leben mit Java einfacher zu machen. Wir wollten es nie als das
neue Java verkaufen.
Was auch schlau ist. Dennoch: Ruby ist da sicherlich - aufgrund des
Sun-Blessing - ein großer Konkurrent. Es scheint mir, ihr habt
inzwischen die kritische Masse erreicht, dass IDE-Hersteller es als
Vorteil ansehen, Groovy zu unterstützen. Damit wird natürlich die
Sprache auch bekannter... leider finde ich sie vom Design noch
schlechter als Ruby, was auch schon zu sehr ein gequirltes Perl mit
einem Schuss Smalltalk und Python ist.

Würdest du zum Beispiel Scott Davis
Post by Jochen Theodorou
(http://www.nofluffjuststuff.com/speaker_view.jsp?speakerId=18) fragen,
dann würde er dir sagen, dass er die Zukunft nicht bei einer einzelnen
Sprache, sondern bei einer Kooperation sieht.
Mit diesem Argument bin ich schon vor Jahren losgezogen und dennoch es
funktionierte schon vor 10 Jahren nicht. Warum jetzt? Weil die Welt
komplizierter geworden ist? Der 80%-Programmierer ist glaube ich froh,
wenn er eine Sprache leidlich beherrscht und ihm fehlt typischerweise
das Abstraktionsvermögen, etwa VB.NET und C# als die selbe Sprache zu
erkennen...
Post by Jochen Theodorou
Eben die richtige Sprache
für den richtigen Einsatzzweck. Das sieht man ja auch an der JVM zum
Beispiel.
An der JVM sehe ich nur, dass es Java sein muss. Alles andere ist ein
Krampf. Wäre die VM gut, müsste es zwei Monate und nicht zwei Jahre
dauern, eine neue Sprache wie Groovy auf die VM aufzusetzen.

Das DLR-Rahmenwerk von Microsoft ist wahrscheinlich der bislang beste
Versuch, das Implementieren neuer Sprachen zu vereinfachen, indem sie
alles, das, was es so verdammt schwer macht, die Dynamik einer modernen
Sprache auf die starre VM zu zwingen, übernehmen.
Post by Jochen Theodorou
Wer an Javascript2 herangeht mit dem Gedanken dass es die anderen
Sprachen verdrängen wird sollte sich meiner Meinung nach einiges an Zeit
nehmen, denn das wird es brauchen. Ich will nicht behaupten dass es
keine Chance hat, es wird wahrscheinlich nur nicht so schnell gehen...
Naja, mit "nette sprache, hat vielleicht eine zukunft" kann ich ja gar
nicht provozieren. Und selbst jetzt ist es ja nur ein Dialog zwischen
und beiden geworden :)
Post by Jochen Theodorou
langsam anfangen und sich dann beständig steigern. Ja, es ist komplexer
als Java, weil es mehr Syntax hat und weil es mehr Konzepte hat, aber
man wird halt nicht gleich ins kalte Wasser geschmissen. Wie das jetzt
bei JS2 sein wird.. keine Ahnung.
Wieso? Du kannst da alles benutzen, was du von JS1 kennst - oder von
Java. Und dann mehr lernen. Oder dich da nähern die die
20%-Programmierer und sagen, oh schick, die haben jetzt dieses und jedes
Konzept endlich auch. Sagen wir es so: Der Abstand zu Haskell wird
kleiner ;)
Post by Jochen Theodorou
Ich denke es kommt wirklich mehr auf das Marketing an... ich glaube zum
Beispiel das ausserhalb des Javabereichs kaum einer Groovy kennen wird.
Ist das ein langfristiges Ziel?
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ist IMHO für ein praktikables Typsystem wichtig, da es
null-Referenz-Fehler statisch vermeiden hilft.
hmm... ich stimme dir nicht zu. Muss dass denn statisch sein? Sicher...
Compilerzentrisch gedacht hat man mehr davon wenn es statisch ist, aber
das setzt auch ein Typsystem vorraus, das sich mal gerne in den
Vordergrund schiebt. Also nehmen wir mal Typ! als Notation dafür dass es
def foo(x) {bar(x)}
def bar(X! x) {1}
soll bedeuten foo bekommt ein Argument mit unbekannten Typ und ruft bar
auf, welches ein X nimmt und das argument für bar darf nicht null sein.
so die erste Frage wäre hier nun ob ein solcher Aufruf ohne das !
erlaubt wäre. in Groovy ist es das, hat das argument den falschen Typ,
gibt es eben eine MissingMethodException zur Laufzeit und gut ist.
Das finde ich verwirrend. Ich erwarte einen TypeAssertionError oder
ähnliches. Also etwas das mir sagt "hey, die Methode will einen
non-null-Wert und du hast - böse, böse - null übergeben, jetzt musst du
mit dem Laufzeitfehler leben" Aber wieso fehlt die Methode?

Wenigstens sollte dann die Fehlermeldung lauten "für die existierende
generische Funktion 'bar' finde ich leider für den Typ 'Null' keine
Methode. Es gibt nur Methoden für ...es folgt eine Auflistung aller
Methoden mit ihren Typen..."
Post by Jochen Theodorou
Verständniss. Wenn ich aber einen statischen check haben will ob der
Aufruf bar(x) zuulässig ist, oder nicht, dann wird daraus nichts. Dann
muss man das prüfen. Und weil man nicht weiss was das x von foo(x) ist,
ist folglich der Aufruf bar(x) illegal...
Für mich wäre

def bar(X! x) { ... }

die Kurzform für

def bar(X x) {
assert x != null;
...
}

Ich würde das "!" definitiv nicht in den statischen Methodendispatch von
Java hineinziehen, sodass man bar(X) und bar(X!) als getrennte Methoden
haben kann. Was ginge (siehe oben), wäre bar(X:Null) und
bar(X:SomeType), doch "null" als Singleton von "Null" zu betrachen, ist
nicht Java und würde die Semantik komplett ändern und Schwierigkeiten
mit existierenden Mehoden machen.

Wichtig bei !-Annotationen ist IMHO eher, dass ich die
Standardbibliothek nachtypisieren kann, also etwa

class Object {
def toString():String!
}

damit der Compiler wissen kann, dass

def x(s: String!) {...}
x(o.toString())

immer geht und anderfalls eine Warnung oder sogar ein Fehler gemeldet wird.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Groovy hat Multimethoden?
kommt auf die Definition an...
Die Definition ist, dass es mehr als einen Parameter gibt, über den
dispatcht wird, also sowas:

def add(a:Int, b:Int) { a + b }
def add(a:String, b:String) { a.concat(b) }
def add(a:Int, b: String) { add(a.toString(), b) }
Post by Jochen Theodorou
class A{
def foo(x){bar(x)}
def bar(Object x){1}
}
class B extends A {
def bar(String y) {super.bar(x)+2}
}
def a = new A()
assert a.foo(new Object()) == 1
assert a.foo("String!!!") == 3
Du meinst bestimmt "new B()" denn dein A hat die zweite bar-Methode ja
gar nicht.

Was passiert bei

Object x = "String";
b.bar(x)

Ist das Ergebnis 1 (wie bei Java) oder 3 (wenn der Dispatch zur Laufzeit
ausgeführt wird)? Wenn es 3 ist, würde ich sagen, ja, das sind
Multimethoden, da sie ja zusätzlich über "this" dispatchen.
Post by Jochen Theodorou
sollten wir uns dazu entschliessen Generatoren wirklich zu unterstützen,
dann würden wir wohl auch yield verwenden und den Stackframe der
momentanen Funktion/Methode sichern. Den kompletten Stack brauchen wir
ja nicht, nur den einzelnen Stackframe. Dann müsste man auch keine
Threads missbrauchen ;)
Ich finde Generation (in Python) extrem praktisch. Gerade zusammen mit
comprehensions, also sowas

[a.x() for a in some_generator if 0 < a < 10]

was noch ein bisschen kompakter ist als

some_array.filter(lambda a: 0 < a < 10).map(lambda a: a.x())

und gar nicht für generatoren ohne extra itertools-Lib geht...
Post by Jochen Theodorou
ne, ok... ich meinte mehr... heisst das jetzt man hat sich explizit
gegen continuations entschieden und sieht das als einen Vorteil an? Und
als Grund gibt man die Effizienz an? hmm.... klingt nach einer seltsamen
Entscheidung.
Finde ich auch... daher erwähnte ich es.
Post by Jochen Theodorou
den Properties ist... schon wieder ein dynamisches Element, das man
explizit aktivieren muss und sich mit der statischen Sicht beisst... Da
int x = foo.y
unter welchen Umständen compiliert das? Compiliert es wenn foo eine
"statische" Klasse hat und ein entsprechendes Property/Feld (wie auch
immer das da heisst) namens y und muss dieses y den Typ int haben, oder
kann es auch Typenlos sein?
Gute Frage. Ich würde aus dem Bauch heraus sagen, in einem strict-mode
kompiliert das nur, wenn y den Typ "int" hat (egal ob ! implizit in int
enthalten ist oder nicht). In einem anderen Modus kompiliert das mit
einem Test, der zur Laufzeit prüft, dass y bitte keine null oder
undefined (was es auch noch in JavaScript gibt) enthält und wirft einen
entsprechenden Fehler, also etwas wie

let x:int = assert_int(foo.y)

mit

function assert_int(x:*):int {
if (x === null) throw TypeAssertionError("must not be null");
if (x === undefined) throw TypeAssertionError("must exist");
return x;
}
Post by Jochen Theodorou
Compiliert es auch wenn foo eine dynamische
Klasse hat und kein Feld/Property y?
Ja. Denn foo.y ohne y ist undefined.
Post by Jochen Theodorou
Oder wenn es eines hat, muss das
dann ein int sein? Kann man in einer dynamischen Klasse ein vorhandenes
Feld "überschreiben"? usw.
Ja. Du kannst folgendes machen:

a.foo = 4;
a.foo = function() { ... }
a.foo()
a.foo = Foo
new a.foo

das macht die Sprache ja gerade so schick :)

Ein pragmatischer Ansatz ist wahrscheinlich der von Python 3k. Die
erlauben, wenn ich's richtig verstanden habe, dass man jetzt

def foo(a:int, b:str) as Foo:
...

schreiben kann doch alles, was da passiert ist, dass int, str und Foo
jetzt im Funktionsobejekt abgelegt werden, sodass man zur Laufzeit
darauf zugreifen kann. Es ist also einfach eine zusätzliche Annotation.

Wer jetzt eine statische Typprüfung haben will, schreibe sich etwas,
dass den AST abläuft und Dinge und Sachen macht. Wer Typprüfung zur
Laufzeit haben will, schreibe sich z.B. sowas:


@strict
def foo(a:int, b:str) as Foo:
...

und "strict" ist eine Funktion, zur Übersetzungszeit von foo aufgerufen
wird und dort eine weitere Funktion wrappt, die dann folgenden Effekt hat:

def foo(a, b):
check(a, int)
check(b, str)
...
return check(..., Foo)

Der eigentliche Interpreter ist so gut wie gar nicht aufwendiger
geworden, das Laufzeitsystem schleppt ein paar Referenzen auf Typen mehr
mit sich herum und jeder kann sich bauen, was er möchte. Was damit auch
geht, sind natürlich Multimethoden

@multimethod
def add(a:int, b:str)

@multimethod
def add(a:str, b:int)

Die Funktion "multimethod" muss jetzt "add" derart wrappen, dass es
Methoden in einer generischen Funktion werden und diese muss ungefähr so
aussehen:

class GF:
def __init__(self): self.methods = []
def __add__(self, func): self.methods.append(func); return self
def __call__(*args):
atypes = (type(a) for a in args)
def match(mtypes): ...
for m in self.methods:
if match(m.types, args): return m(*args)

wobei match prüfen kann, ob die Typen der Methodenparameter auf die
Typen der Argumente passen. Leider ist das nicht ganz so einfach, da man
die speziellste Methode finden muss und nicht nur eine, die passt.
Dieser Algorithmus ist wohldokumentiert, doch ist kenne ihn nicht
auswendig und werde ihn jetzt nicht suchen.

Außerdem haben das Python-Entwickler schon mehr als einmal gebaut :)
Post by Jochen Theodorou
Geschmack entspricht. Wenn das wirklich so wäre, dann wird man pausenlos
zu statischer Programmierung gezwungen.... dann hätten sie die
dynamischen Teile auch gleich ganz rausschmeissen können, denn das mit
dem "optionale Typen" ist dann nur ein Alibi.
Ich glaube, es ist letztlich ein ganz oder gar nicht. Nur 100% statische
Typisierung garantiert keine Typfehler zur Laufzeit. Es ist eher so,
dass man beiden Gruppen von Entwicklern etwas bieten möchte. Die einen
können statisch typisieren (und sich einschränken) und die anderen
können es lassen (und mit dem Risiko von Exceptions zur Laufzeit leben).
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Nein, ich meinte, AS3 als Quelle und daraus erzeuge ich dann Java. Statt
anders herum wie ich mir ursprünglich dachte.
äh... ja... ich meinte Javaquelltext erzeugen, oder irgendwas was
"direkt" auf der JVM läuft, also Bytecode ;)
Java wäre wohl einfacher, weil man das besser debuggen kann. Muss dann
ggf. bei jump und so aber mit fiesen label-Tricks arbeiten.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Wäre mir persönlich nicht wichtig, ist aber wahrscheinlich interessant.
Rhino kann's ja auch. Daher würde ich diese Integration als prinzipiell
gelöst betrachten :)
was kann Rhino?
Mit Java interagieren.

Ich glaube allerdings, ich hatte dich nicht richtig verstanden und nicht
geschaltet, dass du Annotationen meintest. Ich denke, die gehen nicht,
weil Rhino eher stiefmütterlich gepflegt wird und die noch nicht bei
Java 1.5 angekommen sind... so traurig...
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ich sprach von dem JIT der Flash-VM und klagte, dass ich für Flash (also
AS3) keinen Interpreter schreiben kann, der zur Laufzeit Bytecode (ABC)
erzeugt, der dann ge-JIT-et wird. Bei Java geht das ja durch geschickten
Einsatz von ClassLoadern.
achso.... halt ne... was hat das mit ClassLoadern zu tun?
Na ohne ClassLoader kein dynamisches Nachladen von Code zur Laufzeit.
Post by Jochen Theodorou
Ich denke Flash wird wie üblich daran kranken, dass Adobe die Tools
nicht freigeben will und auch versucht das Basteln neuer Tools durch
andere zu verhindern (Lizenz und Patente). Zu Silverlight gibt es
immerhin schon Plugins für Firefox und es gibt Moonlight für Linuxer.
Wie lange wird Novell Microsoft das Plattform-übergreifend-Alibi
bescheinigen, wenn sie davon nix haben. Silverlight ist ja die Angel für
WPF und damit Vista und damit wieder Windows-only. Eigentlich kann es
Microsoft nicht recht sein, wenn das Betriebssystem egal wird.
Post by Jochen Theodorou
Wenn es jetzt noch eine alternative freie Entwicklungsumgebnug geben
wird, dann sieht die Zukunft für Flash schlecht aus meiner Meinung nach.
Du kannst heute mit Flash machen, worauf die bei Silverlight noch
wartest. Es gibt fertige VMs für Windows, Linux und Mac, es gibt gute
kommerzielle und einge okay-IDEs in frei. Mit Flex kannst du heute mit
IDEA anfangen, Code zu schreiben. Der ganze Flex-Code ist einsehbar und
irgendwann auch opensource. Die VM ist spezifiert und es gibt eine
Referenzimplementierung.

Was du nicht hast, ist die Grafikengine von Flash aber die wirst du bei
Silverlight auch nicht bekommen. Flash kann nur JavaScript und
ActionScript - das aber Browserübergreifend identisch und Silverlight
nutzt das JavaScript des Browsers. Irgendwann kann Silverlight auch
Python und Ruby und C#, gleiches wurde prompt für Firefox auch
angekündigt (aber das ist AFAIK noch eine reine Luftnummer). Bei
Microsoft musst du die IDE VS2008 ebenfalls kaufen - kostenlose
Alternativen sind Magelware.
Post by Jochen Theodorou
Ich denke allerdings JavaFX hat dann im Bereich Mobiltelefone noch
Chancen denke ich... wie lange weiss ich aber nicht. Flash wird
sicherlich auch nicht einfach verschwinden.... die Vor- und Nachteile
kommen ja erst so nach und nach hoch...
Das iPhone ist bereits so mächtig, das hat kein spezielles Phone-OS
(Symbian, die ganzen propriäteren System wie Series 40 und was es sonst
noch so gibt) und Motorola selbst auf Linux - da kann man dann auch
einfach existierende Sprachen portieren und braucht keine gekrippelten
Java-Versionen mehr...
--
Stefan Matthias Aust
Jochen Theodorou
2007-10-25 14:07:40 UTC
Permalink
Post by Stefan Matthias Aust
Post by Jochen Theodorou
witzig finde ich ja die Gründerzusammensetzung... Guillaume ist der
Projektmanager von Groovy und Initiator von Grails, Grame ist der
Projektmanager von Grails und hat es aus den Kinderschuhen herausgeführt
, und Alex... der ist noch ganricht lange dabei, hat aber die
Performance in Groovy aufs Korn genommen... er war vorher bei JetBrains.
Was ist daran witzig? Das es nur Techniker gibt und keine
Vollblut-Kaufleute? ;)
och... du kennst die nicht ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
G2One bietet dann Training und kommerziellen Support für Firmen im
[...]
schienen viele darüber sehr erfreut zu sein. Tja, wird sicher
interessant, ist das erste Startup bei dem ich bin...
Ich wünsche euch Erfolg... das klingt doch nach einem Traumjob.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ich wollte suggerieren, dass JS2 die Chance hat, die anderen Sprachen
inklusive Groovy zu verdrängen. Sie wird - wenn sie tatsächlich in Flash
und Firefox eingebaut wird - eine extrem große Verbreitung bekommen und
damit wichtig als Entwicklungssprache für Webanwendungen werden.
ok, dann mal die Gegenfrage... warum hat das Javascript nicht geschafft?
Was? Das verdrängen anderer Scriptsprachen auf der JVM?
ne, das Verdrängen anderer Sprachen auf der JVM, nicht nur
Skriptsrpachen. Wenn du eine Nischensprache durch eine andere ersetzt
macht das in der Regel nicht viel Wirbel.
Post by Stefan Matthias Aust
Nun, Rhino war
und ist erfolgreich. Eine stabile Software, vollständig und nicht nur
ein halber proof-of-principle wie 90% der anderen Sprachen. JS ist ja
sogar als default bei Java 6 dabei. Das nenne ich geschafft...
das wollte ich ja auch nicht bestreiten. Aber gegen Java selbst hat es
eben keine Chance. JS2 scheint versuchen zu wollen in den statischen
Sektor vorzudringen... mal schauen wie gut das klappt... Das ist auch
irgendwie der umgekehrte Weg den Groovy geht. wir gehen vom Statischen
zum Dynamischen, während JS2 wohl versucht vom Dynamischen zum
Statischen zu gehen. In beiden Fällen bekommst du einen Hybrid... aber
die Motivation ist anders.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Warum ist Javascript nicht Actionscript? Was wird Adobe daran hindern
JS2 in Action Script 4 abzuwandeln?
Sie selbst. Das erklärte Ziel ist Kompatibilität, damit sie sagen
können, dass man Flash genauso einfach wie Webseiten programmieren kann.
Denen ist an noch einem Dialekt nicht gelegen. Der Einstieg in
ActionScript war einfach, da ich JavaScript und Java kannte. Dennoch
gibt es in AS3 Unterschiede zu JS1, da sie eben Konzepte aus Java für
das "programming in the large" übernommen haben.
ahh, ok, verstehe. Wenn die jetzt noch Alternativen zu ihrem Player
erlauben ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Warum glaubst du sollte JS2 in der
Lage sein Java zu verdrängen?
Nein, nicht Java, sondern andere Scriptsprachen für Java.
du meinst andere Skriptsprachen auf der JVM. Bleibt abzuwarten wie
erfolgreich das sein wird.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Warum sollte JS2 zum Beispiel in der Lage
sein Ruby zu verdrängen?
Weil Ruby einen überraschenden Erfolg nur Rails zu verdanken hat.
Das mag schon sein, Java hat seinen überraschenden Erfolg auch nur den
Applets zu verdanken ;)
Post by Stefan Matthias Aust
Ein
"Rails" in JavaScript könnte viele Leute zu JavaScript bringen (wie ihr
es ja auch mit Groovy und Grails macht). Als Steve Yegge erwähnte, dass
er als internes Projekt Rails auf Rhino portiert hatte, was das
Interesse riesig.
wobei Grails ja nicht einfach ein Groovyport von Rails ist. Ein paar
Ideen wurden übernommen, aber da jetzige Grails ist schon was ganz anderes.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
dazu brauche ich aber doch keine XML syntax direkt in der Sprache!?
Es ist praktisch. Wenn ich dem Server ein XML-Dokument schicken muss und
einfach
http.Send(<foo>{name}</foo>)
in Groovy könnte man folgendes haben:

http.send { foo(name) }
Post by Stefan Matthias Aust
schreiben kann, ist das bequem und besser als Strings zu benutzen, wo
ich auch leicht man ein End-Tag vergessen könnte. Natürlich kann ich XML
auch bequem parsen, etwa
was mir dann ein Array aller der <name>-Elemente gibt, die ein Attribut
"staff='true'" haben. Der Vorteil ist, die Syntax ist ähnlich zu XPath
und kommt auch mit Namensräumen klar, die wahrscheinlich bei etwas wie
GPath, das mit Java bzw. Groovy-Syntax auskommen muss, zu Problemen
führen könnten.
ok, hast recht... allerdings heisst das nicht dass das do bleiben muss..
Ich könnte das in Groovy so ausdrücken:

doc."**name" { it."@staff" == "true" }

das wäre eine Änderung die ich in 10 Minuten machen kann.... ohne die
Runtime zu verändern versteht sich, nur durch Änderungen an groovy.util.Node
Post by Stefan Matthias Aust
Oder wie würdest du angeben, dass du nur Elemente
<x:name xmlns:x="urn:example:1"/>
finden willst, nicht aber andere Elemente mit dem lokalen Namen "name"?
also bisher müsste man sowas schreiben:

node."**".findAll {it.name() == "name" && it.lookupNamespace("x")}

bzw, wenn man nicht einfach schauen will ob x gesetzt ist, sondern ob x
richtig gesetzt ist:

node."**".findAll {it.name() == "name" &&
it.lookupNamespace("x")=="urn:example:1"}

wenn ich das oben implementiere, dann wäre das:

node."**name" {it.lookupNamespace("x")=="urn:example:1"}

mir scheint eine Method namespaceURI zu fehlen...
Post by Stefan Matthias Aust
Post by Jochen Theodorou
so ist ;) Ausserdem sind beides allgemeine Konzepte der
Programmiersprache, die nicht nur mit XML genutzt werden können.
Das ist definitiv ein Vorteil. Ich würde aber sagen, etwas wie GPath
oder Builder sollten noch nicht einmal Konzepte der Sprache sein,
sondern diese sollte so flexibel sein, dass man sich das als Library
selbst bauen kann (was vielleicht in Groovy geht). In JS1 oder AS3 hast
du da keine Chance, aber durch die Meta-Funktionen in JS2 könnte es gehen.
Viele builder sind in Java geschrieben, ich denke das qualifiziert das
als Builder ;) Bei GPath ist es im wesentlichen das gleiche.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Es ging mir nicht so sehr um den Vergleich mit Groovy sondern darum,
dass JS2 deutlich mehr Stoff enthält als JS1. Man kann schon fast
argumentieren, dass diese Sprache jetzt viel zu kompliziert wird und der
Erfolg von JS1 in deren Einfachheit begründet lag. JS2 ist deutlich
komplexer und größer als Java.
was ja eigentlich gegen den Trend spricht, denn der geht eigentlich
wieder zur flachen Lernkurve, zur einfachen Handhabung und zur geringen
Komplexität.
Sag das C# 3.0 :) Ich denke, es geht eher in Richtung "erwachsene"
Sprachen, d.h. die existierenden User wollen immer mehr und daher
wachsen die Sprachen - auch Java.
nunja, ich sprach von den Leuten, die es zu den Skriptsprachen zieht.
Post by Stefan Matthias Aust
Weniger wäre IMHO natürlich mehr, aber dann kommen wie zu Sprachen wie
Python oder Scheme und die sind irgendwie nie so beliebt wie die fetten
Sprachen. Groovy ist als Superset von Java ja auch komplexer.
Groovy is kein komplettes Superset von Java. Semantsich gleich garnicht,
syntaktisch stimmt es bis auf Kleinigkeiten. Python wäre mit einer mehr
C-Syntax IMHO viel erfolgreicher gewesen. Und Scheme... die Syntax mag
ja einfach sein, aber ich habe auch gelernt, dass etwas nur dann
wirklich gut ist, wenn man auch die Grenzen erkennen kann. Und das ist
bei Scheme nun wirklich nciht gerade leicht. Die sprache ist einfach zu
flexibel.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Javascript wurde gerne benutzt weil a) die meisten Browser
Wieso Vergangenheitsform?
äh... sorry ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
es unterstützen und b) weil man es verwenden kann ohne es wirklich zu
verstehen.
Das kann man mit fast jeder Sprache :)
ja, aber in javascript kopiert man sich wirklich nur einen teil von hier
und von dort und es geht. Mach das mal in Java ohne zu wissen was eine
Klasse ist.
Post by Stefan Matthias Aust
Vergiss die Hobby-User, die irgendwas mit JavaScript irgendwie
zusammenfummeln.
Die bleiben aber nicht alle Hobbyuser
Post by Stefan Matthias Aust
Die Sprache ist IMHO wichtig, weil man versucht, immer
komplexere Webanwendungen im Browser zu realisieren und da kommt man
eben nicht um JavaScript herum.
gibt es dafür nicht Codegeneratoren und Bibliotheken? Meinst du wirklich
das schreiben viele selbst?
Post by Stefan Matthias Aust
Und die Bibliotheken wachsen - man
schaue sich man Dojo (ugg) an, oder YUI oder Ext oder auch nur den
Quelltext von Google Maps. Viel JavaScript. Und da haben sich die Macher
von JS2 gesagt, Klassen, Typen, usw. sind hilfreich.
gut, kann ich verstehen. Aber mich interessiert eher die Nutzung dieser
Bibliotheken.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
mein erster Gedanke war das man versucht hat Javascript zu
"javasieren"... ich weiss kein echtes Wort, aber warum sonst bringt man
da statische Typen ein, Klassen und auch Interfaces? Interessant wäre
Das habe ich auch so verstanden.
Post by Jochen Theodorou
auch die Frage ob ein Javascript programm auch auf einem Javascript2
System läuft.
Das ist das Ziel.
Aus dem Grund reparier man dann auch nicht so Dinge wie "typeof null ==
'object'" oder spezifiziert gewisse Dinge so, wie der IE es macht, passt
also die Spec an die Realität der Browser an.
ah, ok, also wird sich für die meisten nicht wirklich was ändern...
Natürlich wird JS2 dann eine Menge Altlasten mitbringen....
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Man muss sich mal anschauen wie eine von den jüngeren
Programmiersprachen gross geworden ist. Ruby hatte Ruby on Rails. Ich
bezweifle dass Railsfans ihr Ruby gegen Javascript eintauschen möchten.
Ich weiß nicht, Ruby ist sicherlich nicht die beste Sprache. Ich finde
z.B. Python deutlich eleganter. Mich stört der Ansatz, den andere
sicherlich lieben, dass es immer mehr als einen Weg gibt. Rails ist
nett, aber hat viel, viel Magie und ist vergleichsweise schwer zu lernen.
also bist du gegen Programming by Convention?
Post by Stefan Matthias Aust
Das Argument, Client- und Server-Seite in der selben Sprache entwickeln
zu können, ist IMHO recht stark und könnte helfen. Allerdings befürchte
ich, eher wird es eine Lösung (Silverlight) geben, mit der man Ruby auf
dem Client machen kann, als dass JS2 fertig wird...
warum?
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Und wo wäre Ruby heute ohne Rails?
Ein Exot wie Smalltalk...
denke ich auch ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Groovy ist noch nicht sonderlich
gross, aber wir haben es immer als Teil einer Javatoolbox verkauft. Eben
um das Leben mit Java einfacher zu machen. Wir wollten es nie als das
neue Java verkaufen.
Was auch schlau ist. Dennoch: Ruby ist da sicherlich - aufgrund des
Sun-Blessing - ein großer Konkurrent. Es scheint mir, ihr habt
inzwischen die kritische Masse erreicht, dass IDE-Hersteller es als
Vorteil ansehen, Groovy zu unterstützen. Damit wird natürlich die
Sprache auch bekannter... leider finde ich sie vom Design noch
schlechter als Ruby, was auch schon zu sehr ein gequirltes Perl mit
einem Schuss Smalltalk und Python ist.
Ich denke das ist Ansichtssache. Das Ziel war besser als Java zu sein,
nicht schön zu sein ;)
Post by Stefan Matthias Aust
Würdest du zum Beispiel Scott Davis
Post by Jochen Theodorou
(http://www.nofluffjuststuff.com/speaker_view.jsp?speakerId=18) fragen,
dann würde er dir sagen, dass er die Zukunft nicht bei einer einzelnen
Sprache, sondern bei einer Kooperation sieht.
Mit diesem Argument bin ich schon vor Jahren losgezogen und dennoch es
funktionierte schon vor 10 Jahren nicht. Warum jetzt?
vor 10 Jahren waren die Anforderungen meiner Meinung nach andere. Heute
sind DSLs modern, damals wollte man sowas eher nicht, oder mit XML
ausdrücken.
Post by Stefan Matthias Aust
Weil die Welt
komplizierter geworden ist? Der 80%-Programmierer ist glaube ich froh,
wenn er eine Sprache leidlich beherrscht und ihm fehlt typischerweise
das Abstraktionsvermögen, etwa VB.NET und C# als die selbe Sprache zu
erkennen...
das mag stimmen. das wird sich sicher auch nciht so schnell ändern.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Eben die richtige Sprache
für den richtigen Einsatzzweck. Das sieht man ja auch an der JVM zum
Beispiel.
An der JVM sehe ich nur, dass es Java sein muss. Alles andere ist ein
Krampf. Wäre die VM gut, müsste es zwei Monate und nicht zwei Jahre
dauern, eine neue Sprache wie Groovy auf die VM aufzusetzen.
ich denke wenn ich heute eine fertig spezifiziete Sprache auf die JVM
umsetzen müsste, dann würde ich das vielleicht nicht in 2 Monaten
schaffen, aber 2 Jahre bräuchte ich sicher nicht. Kommt auch darauf an
was die Sprache können soll und ob es eine fertige Grammatik gibt. Aber
es ist nunmal was anderes wenn du eine Sprache fortwährend
weiterentwicklest, diskussionen zu führen hast wie das und das zu
funktionieren hat usw.
Post by Stefan Matthias Aust
Das DLR-Rahmenwerk von Microsoft ist wahrscheinlich der bislang beste
Versuch, das Implementieren neuer Sprachen zu vereinfachen, indem sie
alles, das, was es so verdammt schwer macht, die Dynamik einer modernen
Sprache auf die starre VM zu zwingen, übernehmen.
Solange das Framework meinen Bedarf abdeckt ist alles bestens. Und die
Infrastruktur hilft sicher auch schneller zu einem Ergebnis zu kommen.
Aber meistens sind es all die kleinen Details, die dann doch einen
Strich durch die Rechnung machen. Zum Beispiel, nehmen wir an deine
Sprache unterstützt eine Methoden mit einer variablen Anzal von
argumenten als ersten Parameter. Und nehmen wir an deine VM tut das
auch.... nur leider als letzten Parameter. Pech gehabt.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Wer an Javascript2 herangeht mit dem Gedanken dass es die anderen
Sprachen verdrängen wird sollte sich meiner Meinung nach einiges an Zeit
nehmen, denn das wird es brauchen. Ich will nicht behaupten dass es
keine Chance hat, es wird wahrscheinlich nur nicht so schnell gehen...
Naja, mit "nette sprache, hat vielleicht eine zukunft" kann ich ja gar
nicht provozieren. Und selbst jetzt ist es ja nur ein Dialog zwischen
und beiden geworden :)
hehe, sicher.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
langsam anfangen und sich dann beständig steigern. Ja, es ist komplexer
als Java, weil es mehr Syntax hat und weil es mehr Konzepte hat, aber
man wird halt nicht gleich ins kalte Wasser geschmissen. Wie das jetzt
bei JS2 sein wird.. keine Ahnung.
Wieso? Du kannst da alles benutzen, was du von JS1 kennst - oder von
Java. Und dann mehr lernen. Oder dich da nähern die die
20%-Programmierer und sagen, oh schick, die haben jetzt dieses und jedes
Konzept endlich auch. Sagen wir es so: Der Abstand zu Haskell wird
kleiner ;)
oh.. bleib mir mit Haskell weg... Ich konnte mit der Sprache nie viel
anfangen ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Ich denke es kommt wirklich mehr auf das Marketing an... ich glaube zum
Beispiel das ausserhalb des Javabereichs kaum einer Groovy kennen wird.
Ist das ein langfristiges Ziel?
Im Moment eher nicht, im Moment wäre es shcon super, wenn jeder der Java
kennt auch Groovy kennt ;) Zumindest bei den ernsthafteren
Entwicklern... ich glaube der Markt wäre schon gross genug ;) Man könnte
natürlich versuchen Groovy auch ausserhalb der Javawelt bekannt zu
machen... amn könnte zum Beipsiel... ähh... einen Flashclon machen ;)
Also ein plugin für die browser schreiben mit reduzierter VM usw... darf
man jetzt ja alles.... da könnte man sogar die VM auf Groovy
optimieren... wäre bestimmt spassig. Ob es erfolgreich wäre? Keine Ahnung.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ist IMHO für ein praktikables Typsystem wichtig, da es
null-Referenz-Fehler statisch vermeiden hilft.
hmm... ich stimme dir nicht zu. Muss dass denn statisch sein? Sicher...
Compilerzentrisch gedacht hat man mehr davon wenn es statisch ist, aber
das setzt auch ein Typsystem vorraus, das sich mal gerne in den
Vordergrund schiebt. Also nehmen wir mal Typ! als Notation dafür dass es
def foo(x) {bar(x)}
def bar(X! x) {1}
soll bedeuten foo bekommt ein Argument mit unbekannten Typ und ruft bar
auf, welches ein X nimmt und das argument für bar darf nicht null sein.
so die erste Frage wäre hier nun ob ein solcher Aufruf ohne das !
erlaubt wäre. in Groovy ist es das, hat das argument den falschen Typ,
gibt es eben eine MissingMethodException zur Laufzeit und gut ist.
Das finde ich verwirrend. Ich erwarte einen TypeAssertionError oder
ähnliches. Also etwas das mir sagt "hey, die Methode will einen
non-null-Wert und du hast - böse, böse - null übergeben, jetzt musst du
mit dem Laufzeitfehler leben" Aber wieso fehlt die Methode?
weil es keine Methode mit passender Signatur gibt. Es gibt ja nicht
/die/ Methode, es gibt immer eine Auswahl an Methoden, die passen, oder
eben nicht. Hier ging es auch noch um bar(X), nicht bar(X!). Im Falle
von bar(X!) wäre sowas vielleicht sinnvoller, ja...
Post by Stefan Matthias Aust
Wenigstens sollte dann die Fehlermeldung lauten "für die existierende
generische Funktion 'bar' finde ich leider für den Typ 'Null' keine
Methode. Es gibt nur Methoden für ...es folgt eine Auflistung aller
Methoden mit ihren Typen..."
das macht Groovy schon... dh, wenn das nicht jemand verbuggt hätte.
sigh... bug report ist draussen, da habe ich heute Abend noch was zu fixen.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Verständniss. Wenn ich aber einen statischen check haben will ob der
Aufruf bar(x) zuulässig ist, oder nicht, dann wird daraus nichts. Dann
muss man das prüfen. Und weil man nicht weiss was das x von foo(x) ist,
ist folglich der Aufruf bar(x) illegal...
Für mich wäre
def bar(X! x) { ... }
die Kurzform für
def bar(X x) {
assert x != null;
...
}
Ich würde das "!" definitiv nicht in den statischen Methodendispatch von
Java hineinziehen, sodass man bar(X) und bar(X!) als getrennte Methoden
haben kann. Was ginge (siehe oben), wäre bar(X:Null) und
bar(X:SomeType), doch "null" als Singleton von "Null" zu betrachen, ist
nicht Java und würde die Semantik komplett ändern und Schwierigkeiten
mit existierenden Mehoden machen.
wenn du dynamische Typen für dne Methodenaufruf benutzt, dann ist die
Semantik sowieso dahin. ich ahtte mir überlegt sowas zu machen:

def bar(NullObject o) {...}

NullObject gibt es schnon, aber bisher nur um Methoden auf null
auszuführen, nicht um einen Methodenparameter zu matchen.
Post by Stefan Matthias Aust
Wichtig bei !-Annotationen ist IMHO eher, dass ich die
Standardbibliothek nachtypisieren kann, also etwa
class Object {
def toString():String!
}
damit der Compiler wissen kann, dass
def x(s: String!) {...}
x(o.toString())
immer geht und anderfalls eine Warnung oder sogar ein Fehler gemeldet wird.
stimmt... wie macht das Scala?
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Groovy hat Multimethoden?
kommt auf die Definition an...
Die Definition ist, dass es mehr als einen Parameter gibt, über den
def add(a:Int, b:Int) { a + b }
def add(a:String, b:String) { a.concat(b) }
def add(a:Int, b: String) { add(a.toString(), b) }
das ist die nicht Objektorientierte Variante. Das hat ja zum Beipsiel
Java auch schon.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
class A{
def foo(x){bar(x)}
def bar(Object x){1}
}
class B extends A {
def bar(String y) {super.bar(x)+2}
}
def a = new A()
assert a.foo(new Object()) == 1
assert a.foo("String!!!") == 3
Du meinst bestimmt "new B()" denn dein A hat die zweite bar-Methode ja
gar nicht.
äh, ja , sorry.
Post by Stefan Matthias Aust
Was passiert bei
Object x = "String";
b.bar(x)
Ist das Ergebnis 1 (wie bei Java) oder 3 (wenn der Dispatch zur
Laufzeit ausgeführt wird)? Wenn es 3 ist, würde ich sagen, ja, das
sind Multimethoden, da sie ja zusätzlich über "this" dispatchen.
da wir dynamisch Typisierren, es sei denn du erzwingst es anders, gibt
das wieder 3. Es gilt auch

assert b.bar((Object) x) == 1

allerdings würde ein Aufruf über foo hier anders laufen, weil foo den
spezifizierten Typ verliert..

assert b.foo((Object) x) == 3

Das "Object x" hat in Groovy eine leicht andere Bedeutung als in Java.
Es garantiert das x garantiert vom Typ Object ist, man also eine
ClassCastException erhält, wenn man was anderes reinsteckt... was bei
Object keinen Sinn macht, da Groovy primitive Werte in Objekte
konvertiert. Was zum bEispiel nicht geht ist:

int i = "2"

ein String ist kein int bzw. Integer, also geht die Zuweisung schief...
aber abgesehen davon passiert nichts.

Ok, jedenfalls habe ich jetzt die "offizielle SMA Bestätigung" das
Groovy Multimethoden hat *g*

[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Compiliert es auch wenn foo eine dynamische
Klasse hat und kein Feld/Property y?
Ja. Denn foo.y ohne y ist undefined.
ach da gibt es einen eigenen statischen typen interessant.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Oder wenn es eines hat, muss das
dann ein int sein? Kann man in einer dynamischen Klasse ein vorhandenes
Feld "überschreiben"? usw.
a.foo = 4;
a.foo = function() { ... }
a.foo()
a.foo = Foo
new a.foo
das macht die Sprache ja gerade so schick :)
das meinte ich weniger, wenn man mal die casts ausblendet und mit Object
arbeitet geht das ja schon fast in Java so.... nicht dass die Casts
unwichtig wären ;) Nein, ich meinte, dass wenn du ein Feld in der Klasse
A hast und die Klasse A ist dynamisch, hat aber ein Feld als Tiel der
Klassendefinition... also

dynamic class A {
foo:int
}

oder so ähnlich.... ob man diesem foo neue Logic geben kann, sodass es
es zum Beipsiel auch Strings nimmt, statt nur ints.

[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Geschmack entspricht. Wenn das wirklich so wäre, dann wird man pausenlos
zu statischer Programmierung gezwungen.... dann hätten sie die
dynamischen Teile auch gleich ganz rausschmeissen können, denn das mit
dem "optionale Typen" ist dann nur ein Alibi.
Ich glaube, es ist letztlich ein ganz oder gar nicht. Nur 100% statische
Typisierung garantiert keine Typfehler zur Laufzeit. Es ist eher so,
dass man beiden Gruppen von Entwicklern etwas bieten möchte. Die einen
können statisch typisieren (und sich einschränken) und die anderen
können es lassen (und mit dem Risiko von Exceptions zur Laufzeit leben).
was mich bei einer Skriptsprache hier halt stört ist das Laufzeit und
Compilezeit ja miteinander verschmelzen.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Nein, ich meinte, AS3 als Quelle und daraus erzeuge ich dann Java. Statt
anders herum wie ich mir ursprünglich dachte.
äh... ja... ich meinte Javaquelltext erzeugen, oder irgendwas was
"direkt" auf der JVM läuft, also Bytecode ;)
Java wäre wohl einfacher, weil man das besser debuggen kann. Muss dann
ggf. bei jump und so aber mit fiesen label-Tricks arbeiten.
und GOTO hatte doch einen Sinn ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Wäre mir persönlich nicht wichtig, ist aber wahrscheinlich interessant.
Rhino kann's ja auch. Daher würde ich diese Integration als prinzipiell
gelöst betrachten :)
was kann Rhino?
Mit Java interagieren.
Ich glaube allerdings, ich hatte dich nicht richtig verstanden und nicht
geschaltet, dass du Annotationen meintest. Ich denke, die gehen nicht,
weil Rhino eher stiefmütterlich gepflegt wird und die noch nicht bei
Java 1.5 angekommen sind... so traurig...
naja, ich denke weil Groovy fast alles von java5 unterstützt wird
demnächst JRuby kommen und dann kommt Rhino sicher auch bald nach ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ich sprach von dem JIT der Flash-VM und klagte, dass ich für Flash (also
AS3) keinen Interpreter schreiben kann, der zur Laufzeit Bytecode (ABC)
erzeugt, der dann ge-JIT-et wird. Bei Java geht das ja durch geschickten
Einsatz von ClassLoadern.
achso.... halt ne... was hat das mit ClassLoadern zu tun?
Na ohne ClassLoader kein dynamisches Nachladen von Code zur Laufzeit.
das ist schon klar, aber mit dem JIT hat das doch erstmal weniger zu tun.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Ich denke Flash wird wie üblich daran kranken, dass Adobe die Tools
nicht freigeben will und auch versucht das Basteln neuer Tools durch
andere zu verhindern (Lizenz und Patente). Zu Silverlight gibt es
immerhin schon Plugins für Firefox und es gibt Moonlight für Linuxer.
Wie lange wird Novell Microsoft das Plattform-übergreifend-Alibi
bescheinigen, wenn sie davon nix haben. Silverlight ist ja die Angel für
WPF und damit Vista und damit wieder Windows-only. Eigentlich kann es
Microsoft nicht recht sein, wenn das Betriebssystem egal wird.
hehe, vielleicht ist genau das der Grund warum es Moonlight gibt ;) Wenn
nicht schon jetzt, so wird Silverlight sicherlich bald genug
Erweiterungen haben die spezifisch für Windows sind.. allerdings haben
die es da zunehmend schwieriger mit Wine und Mono.

Allerdings ist es wie so oft auch nicht die Qualität, die darüber
entscheidet wleches System benutzt werden wird. Manchmal geht es nur
darum zur richtigen Zeit am richtigen Ort zu sein. So ungerecht das auch
sein mag. Allerdings fällt es mir schwer zu glauben das Flash komplett
von Silverlight verdrängt wird... selbst wenn Silverlight relatic
erfolgreich sein würde.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Wenn es jetzt noch eine alternative freie Entwicklungsumgebnug geben
wird, dann sieht die Zukunft für Flash schlecht aus meiner Meinung nach.
Du kannst heute mit Flash machen, worauf die bei Silverlight noch
wartest. Es gibt fertige VMs für Windows, Linux und Mac, es gibt gute
kommerzielle und einge okay-IDEs in frei. Mit Flex kannst du heute mit
IDEA anfangen, Code zu schreiben. Der ganze Flex-Code ist einsehbar und
irgendwann auch opensource. Die VM ist spezifiert und es gibt eine
Referenzimplementierung.
Was du nicht hast, ist die Grafikengine von Flash aber die wirst du bei
Silverlight auch nicht bekommen. Flash kann nur JavaScript und
ActionScript - das aber Browserübergreifend identisch und Silverlight
nutzt das JavaScript des Browsers.
ahh... ok, dann nehme ich alles zurück und sage Flash ist besser...
besonders wegen letzterem ;)
Post by Stefan Matthias Aust
Irgendwann kann Silverlight auch
Python und Ruby und C#, gleiches wurde prompt für Firefox auch
angekündigt (aber das ist AFAIK noch eine reine Luftnummer). Bei
Microsoft musst du die IDE VS2008 ebenfalls kaufen - kostenlose
Alternativen sind Magelware.
das stimmt, das ist ein Manko. Wenn Silverlight eine "Visual Studio
only" Verantstaltung bleibt, dann wrid nix draus werden.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Ich denke allerdings JavaFX hat dann im Bereich Mobiltelefone noch
Chancen denke ich... wie lange weiss ich aber nicht. Flash wird
sicherlich auch nicht einfach verschwinden.... die Vor- und Nachteile
kommen ja erst so nach und nach hoch...
Das iPhone ist bereits so mächtig, das hat kein spezielles Phone-OS
(Symbian, die ganzen propriäteren System wie Series 40 und was es sonst
noch so gibt) und Motorola selbst auf Linux - da kann man dann auch
einfach existierende Sprachen portieren und braucht keine gekrippelten
Java-Versionen mehr...
deswegen schireb ich ja "wie lange weiss ich aber nicht" ;)

Gruss theo
--
Jochen "blackdrag" Theodorou
Groovy Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Stefan Matthias Aust
2007-10-26 11:42:23 UTC
Permalink
Post by Jochen Theodorou
[Adobe und Flash]
ahh, ok, verstehe. Wenn die jetzt noch Alternativen zu ihrem Player
erlauben ;)
Das Gnash-Projekt versucht eine Clean-Room-Implementierung zu liefern.
Sind allerdings "nur" auf Flash-7-Niveau. Gab es nicht auch mal einen
Flash-Player in Java? Außerdem enthält Squeak-Smalltalk einen Player,
allerdings für Flash-5 oder so. Wie legal diese Player sind: Keine
Ahnung. Wenn man sich jedenfalls von Adobe die SWF-Spec zieht, liest
man: "his license does not permit the usage of the specification to
create software which supports SWF file playback."

Man findet zwar auch genug Informationen für SWF im Netz (z.B.
http://www.digitalpreservation.gov/formats/fdd/fdd000248.shtml) doch
Adobe könnte natürlich immer noch die Patent-Keule ziehen...

Aber was wäre besser, wenn jeder einen Player bauen könnte? Gäbe es dann
etwas besseres als Flash-7 für die Wii? Oder einen in Java geschriebenen
Flash-9-Player? Solange der Player von Adobe kostenlos ist, ist das
alles nicht so schlimm. Und Geld dafür werden sie nicht nehmen, sonst
könnten sie sich gleich einsargen. Dann hätte Microsoft gewonnen.
Post by Jochen Theodorou
Post by Jochen Theodorou
Warum glaubst du sollte JS2 in der
Lage sein Java zu verdrängen?
Nein, nicht Java, sondern andere Scriptsprachen für Java.
du meinst andere Skriptsprachen auf der JVM. Bleibt abzuwarten wie
erfolgreich das sein wird.
Ja, ich meine JVM :)
Post by Jochen Theodorou
Weil Ruby einen überraschenden Erfolg nur Rails zu verdanken hat.
Das mag schon sein, Java hat seinen überraschenden Erfolg auch nur den
Applets zu verdanken ;)
Jein. Wenn's Java dank guter Socket-Bibliotheken und der Einfachkeit,
Server zu bauen nicht auf diese Seite geschafft hätte, wäre die Sprache
heute nur noch Geschichte.
Post by Jochen Theodorou
http.send { foo(name) }
Was ich bei den Buildern nicht verstehe - wie funktioniert das Binden.
Ich vermute, {} ist eine Closure, die auch freie Variablen haben kann.
Dies liefert z.B. 5 (falls ich die Syntax richtig treffe):

def a(c) { return c.call() }
def n = 5
pprint (a { n })

Was würde bei deinem Beispiel da oben passieren, wenn ich foo als freie
Variable in dem Block { foo(name) } habe. Ich hätte gedacht, der Builder
funktioniert mit Hilfe eines "undefined method" Hooks, aber das kann es
nicht alleine sein.
Offenbar kann man auch Strings und nicht nur Namen hinter dem "."
benutzen, wo mir die Bedeutung gar nicht klar ist. Ich hätte gedacht,
"." wird wie bei Java zu Übersetzungszeit gebunden. Offenbar ist es aber
nur wie bei JavaScript eine andere Syntax für [[getproperty]].

Hätte ich auch

doc["**name"] { it["@staff"] == "true" }

schreiben können?
Post by Jochen Theodorou
Das ist definitiv ein Vorteil. Ich würde aber sagen, etwas wie GPath
oder Builder sollten noch nicht einmal Konzepte der Sprache sein,
sondern diese sollte so flexibel sein, dass man sich das als Library
selbst bauen kann (was vielleicht in Groovy geht). In JS1 oder AS3 hast
du da keine Chance, aber durch die Meta-Funktionen in JS2 könnte es gehen.
Viele builder sind in Java geschrieben, ich denke das qualifiziert das
als Builder ;) Bei GPath ist es im wesentlichen das gleiche.
Aber das ist entgegengesetzt zu meinen Punkt. Wenn die Builder nur
funktionieren, wenn man sie in Java schreibt, ist es Magie. Wenn man sie
in Groovy schreiben könnte dann wäre es so wie ich es mir wünsche - ein
Zeichen für eine ausdrucksstarke Sprache. In Ruby geht das ja, vgl. Markaby.
Post by Jochen Theodorou
nunja, ich sprach von den Leuten, die es zu den Skriptsprachen zieht.
Die Unterscheidung ist IMHO eh willkürlich. IMHO sollte es zu
ausdrucksstärkeren Sprachen gehen. Java ist das nicht gerade. Groovy
bessert hier nach. Andere Sprachen wie Python oder auch Ruby sind eh
schon deutlich ausdruckstärker. Wobei ich hier wieder die Sprachen -
siehe oben - mit einem kleinen Kern vorziehe. Der Kern von Python ist
z.B. viel kleiner und viel regelmäßiger als der von Ruby, das von
Ausnahmen und Sonderfällen nur so wimmelt. Bei Groovy habe ich das
Gefühl - und daher bin ich leider kein so großer Fan davon - das ist
noch extremer als bei Ruby, weil man so nah an Java sein will wie
möglich und trotzdem besser.
Post by Jochen Theodorou
Groovy is kein komplettes Superset von Java. Semantsich gleich garnicht,
syntaktisch stimmt es bis auf Kleinigkeiten. Python wäre mit einer mehr
C-Syntax IMHO viel erfolgreicher gewesen.
Geschweifte Klammern werden total überbewertet. Ich finde es total
befreiend, Python machen zu können. Wer eine Sprache nur dann versteht,
wenn sie geschweifte Klammern hat ... ach, ich spar's mir...
Post by Jochen Theodorou
Und Scheme... die Syntax mag
ja einfach sein, aber ich habe auch gelernt, dass etwas nur dann
wirklich gut ist, wenn man auch die Grenzen erkennen kann. Und das ist
bei Scheme nun wirklich nciht gerade leicht. Die sprache ist einfach zu
flexibel.
Da stimme ich dir zu. Konzeptionell toll, aber manchmal ist es schon
schön, wenn ein bisschen Syntax aus dem Code zur Orientierung
heraussticht. Die Syntax sollte jedoch das Programm nicht begraben. Wenn
ich einen 5-Zeiler brauche, nur um ein "map" oder "collect"
auszudrücken, dann nervt das genau wie zu wenig Syntax.
Post by Jochen Theodorou
Post by Jochen Theodorou
es unterstützen und b) weil man es verwenden kann ohne es wirklich zu
verstehen.
Das kann man mit fast jeder Sprache :)
Bei manchen scheitert man dann aber schon an der ersten komischen
Fehlermeldung des Compilers und nix läuft. Bei JavaScript bekommt man's
jedenfalls zum Zucken und die Sprache ist recht verzeihend.
Post by Jochen Theodorou
Vergiss die Hobby-User, die irgendwas mit JavaScript irgendwie
zusammenfummeln.
Die bleiben aber nicht alle Hobbyuser
Dennoch zielt JS2 nicht auf diese Gruppe. Und: Bei den meisten wäre es
besser, sie bieben es :)
Post by Jochen Theodorou
Die Sprache ist IMHO wichtig, weil man versucht, immer
komplexere Webanwendungen im Browser zu realisieren und da kommt man
eben nicht um JavaScript herum.
gibt es dafür nicht Codegeneratoren und Bibliotheken? Meinst du wirklich
das schreiben viele selbst?
Ja. Siehe z.B. Extjs. Warum auch nicht. JavaScript ist eigentlich eine
recht elegante Sprache und es macht IMHO Spass, damit was zu machen.

Ich hatte spaßeshalber mal ausprobiert, wie man einen AST zum Auswerten
von Programmen in JS realisieren könnte und fand meine Lösung mit
Konstruktorfunktionen für eval-Funktionen schick:

function Lit(v) {
return function(env) { return v; }
}
function Var(n) {
return function(env) { return env[n]; }

function Add(e1, e2) {
return function(env) { return e1(env) + e2(env); }
}

Add(Var("a"), Lit(4))({a: 3})

Kannst du in Groovy oder Python genauso machen - aber nicht in Java. Was
ich ein bisschen schade finde ist, dass ich [] nicht überschreiben kann.
Das hat Python vor 16 Jahren schon besser gelöst.
Post by Jochen Theodorou
Und die Bibliotheken wachsen - man
schaue sich man Dojo (ugg) an, oder YUI oder Ext oder auch nur den
Quelltext von Google Maps. Viel JavaScript. Und da haben sich die Macher
von JS2 gesagt, Klassen, Typen, usw. sind hilfreich.
gut, kann ich verstehen. Aber mich interessiert eher die Nutzung dieser
Bibliotheken.
Da helfen Typen doch auch. Denk an Code Completion in der IDE.
Post by Jochen Theodorou
Aus dem Grund reparier man dann auch nicht so Dinge wie "typeof null ==
'object'" oder spezifiziert gewisse Dinge so, wie der IE es macht, passt
also die Spec an die Realität der Browser an.
ah, ok, also wird sich für die meisten nicht wirklich was ändern...
Natürlich wird JS2 dann eine Menge Altlasten mitbringen....
Die Last der Rückwärtskompatibilität...
Post by Jochen Theodorou
Ich weiß nicht, Ruby ist sicherlich nicht die beste Sprache. Ich finde
z.B. Python deutlich eleganter. Mich stört der Ansatz, den andere
sicherlich lieben, dass es immer mehr als einen Weg gibt. Rails ist
nett, aber hat viel, viel Magie und ist vergleichsweise schwer zu lernen.
also bist du gegen Programming by Convention?
Ich bin gegen Programming by Magic. Es kommt auf die richtige Menge an.
Ist schwer genau zu sagen, was zu viel ist und was geht. Bei Rails gibt
es häufig drei oder mehr Wege, etwas auszudrücken. Das fängt bei Ruby
schon an, dass man auf mindestens 4 Wege etwas zurückgeben kann:

if cond then return 1
return 1 if cond
unless not cond; return 1; end
1 unless !cond

Usw. Mag für den Schreiber nett sein, hier seine Kreativität auszuleben,
aber als Leser muss man alle Varianten kennen, um das Programm zu
verstehen. Das kann es unnötig schwer machen, auch wenn die
verschiedenen Versionen eigentlich die Lesbarkeit erhöhen helfen sollen.
Post by Jochen Theodorou
Das Argument, Client- und Server-Seite in der selben Sprache entwickeln
zu können, ist IMHO recht stark und könnte helfen. Allerdings befürchte
ich, eher wird es eine Lösung (Silverlight) geben, mit der man Ruby auf
dem Client machen kann, als dass JS2 fertig wird...
warum?
Weil Microsoft schneller sein wird bzw. Mozilla/Adobe zu langsam. Wie
gesagt, für Ende 2008 ist die JS2 Spec angekündigt und dann muss Mozilla
das noch in den Firefox einbauen, denn die Referenzimplementierung in
Standard-ML werden sie nicht integrieren sondern wahrscheinlich
Spidermonkey und Tamarin irgendwie verheiraten - beides C-Programme.

Möglicherweise könnte man da was mit PyPy machen. Ich hatte da gerade
ein paar Papers gelesen. PyPy ist der Versuch, einen Python in Python zu
schreiben und damit das Ergebnis effizent läuft, kompilieren sie
letztlich in eine Niedrigsprache, z.B. C oder Bytecode für .NET, JVM und
die LLVM. Da es komplexes Python zu schwer ist, effizient zu
kompilieren, gibt es RPython (R=Restricted), ein Subset, welches sich
effizient übersetzen lässt. Quasi ein C oder Java mit der Syntax von
Python.

Der interessante Unterschied ist jedoch, sie haben das normale Python,
um erstmal das RPython-Programm zu schreiben (ich erwähnte letztes Mal
ja schon so Metaprogrammierung für Multimethoden, die Python beherrscht)
und all sowas kann man nutzen.

Die Macher ziehen daher von Konferenz zu Konferenz und preisen ihr
System als ideale Basis für diverse Sprachen an, denn natürlich kann man
damit nicht nur Python übersetzen. Ich meine, es gibt einen JavaScript,
Scheme und Prolog-Interpreter als PoC und gerade diese Tage läuft (oder
lief) ein Sprint, die Squeak-VM in Python zu bauen, um sie dann mit PyPy
zu übersetzen.

Finde ich total spannend :)

Das schicke ist wie gesagt, wenn's einmal in Python existiert, können
sie auf .NET und JVM und LLVM (und damit diverse andere OSes)
übersetzen. Das JVM-Backend ist aber wohl leider rudimentär. Man hat
sich (sicherlich, um Aufmerksamkeit und Fördergelder von Microsoft zu
bekommen) auf .NET konzentriert wie es aussieht.
Post by Jochen Theodorou
Ich denke das ist Ansichtssache. Das Ziel war besser als Java zu sein,
nicht schön zu sein ;)
Falsches Ziel, wenn du mich fragst. Bzw. falsche Reihenfolge. Ich will
beides: Eine elegante Sprache die auch noch besser ist als Java.
Post by Jochen Theodorou
An der JVM sehe ich nur, dass es Java sein muss. Alles andere ist ein
Krampf. Wäre die VM gut, müsste es zwei Monate und nicht zwei Jahre
dauern, eine neue Sprache wie Groovy auf die VM aufzusetzen.
ich denke wenn ich heute eine fertig spezifiziete Sprache auf die JVM
umsetzen müsste, dann würde ich das vielleicht nicht in 2 Monaten
schaffen, aber 2 Jahre bräuchte ich sicher nicht. Kommt auch darauf an
was die Sprache können soll und ob es eine fertige Grammatik gibt. Aber
es ist nunmal was anderes wenn du eine Sprache fortwährend
weiterentwicklest, diskussionen zu führen hast wie das und das zu
funktionieren hat usw.
Ich hatte ja JS2 angeboten ;)
Post by Jochen Theodorou
Das DLR-Rahmenwerk von Microsoft ist wahrscheinlich der bislang beste
Versuch, das Implementieren neuer Sprachen zu vereinfachen, indem sie
alles, das, was es so verdammt schwer macht, die Dynamik einer modernen
Sprache auf die starre VM zu zwingen, übernehmen.
Solange das Framework meinen Bedarf abdeckt ist alles bestens. Und die
Infrastruktur hilft sicher auch schneller zu einem Ergebnis zu kommen.
Aber meistens sind es all die kleinen Details, die dann doch einen
Strich durch die Rechnung machen. Zum Beispiel, nehmen wir an deine
Sprache unterstützt eine Methoden mit einer variablen Anzal von
argumenten als ersten Parameter. Und nehmen wir an deine VM tut das
auch.... nur leider als letzten Parameter. Pech gehabt.
Du hast im Prinzip recht, aber da Microsoft die DLR aus IronPython
ableitet und auch sicherstellt, das JS und Ruby damit gehen, ist schon
recht viel abgedeckt. Spannend wäre vielleicht noch, etwas wie Erlang
auszuprobieren oder gleich Prolog, aber eigentlich würde ich da wenig
Probleme erwarten.
Post by Jochen Theodorou
def bar(NullObject o) {...}
NullObject gibt es schnon, aber bisher nur um Methoden auf null
auszuführen, nicht um einen Methodenparameter zu matchen.
Wichtig bei !-Annotationen ist IMHO eher, dass ich die
Standardbibliothek nachtypisieren kann, also etwa
class Object {
def toString():String!
}
damit der Compiler wissen kann, dass
def x(s: String!) {...}
x(o.toString())
immer geht und anderfalls eine Warnung oder sogar ein Fehler gemeldet wird.
stimmt... wie macht das Scala?
Scala kennt keine non-null-Typen (falls sie das nicht geändert haben)
aus Kompatibität zu den Hostsprachen JVM und CLR.
Post by Jochen Theodorou
das meinte ich weniger, wenn man mal die casts ausblendet und mit Object
arbeitet geht das ja schon fast in Java so.... nicht dass die Casts
unwichtig wären ;) Nein, ich meinte, dass wenn du ein Feld in der Klasse
A hast und die Klasse A ist dynamisch, hat aber ein Feld als Tiel der
Klassendefinition... also
dynamic class A {
foo:int
}
oder so ähnlich.... ob man diesem foo neue Logic geben kann, sodass es
es zum Beipsiel auch Strings nimmt, statt nur ints.
Weiß ich nicht. Ich hoffe, man kann's nicht ändern und foo nicht
überschreiben. Sonst wird's extrem komisch.
Post by Jochen Theodorou
was mich bei einer Skriptsprache hier halt stört ist das Laufzeit und
Compilezeit ja miteinander verschmelzen.
Seit Jahren sage ich ja schon, es sollte den Unterschied zwischen
Laufzeit und Compilezeit gar nicht geben. Das ist künstlich und
verhindert Metaprogrammierung.
Post by Jochen Theodorou
Allerdings ist es wie so oft auch nicht die Qualität, die darüber
entscheidet wleches System benutzt werden wird. Manchmal geht es nur
darum zur richtigen Zeit am richtigen Ort zu sein. So ungerecht das auch
sein mag. Allerdings fällt es mir schwer zu glauben das Flash komplett
von Silverlight verdrängt wird... selbst wenn Silverlight relatic
erfolgreich sein würde.
Wenn Youtube auch Silverlight statt Flash für das Anzeigen von Videos
unterstützen würde, dann hätte Microsoft eine Chance. Diese Plattform
ist IMHO ein wesentlicher Grund, warum jeder Flash installiert und meist
auch aktiviert hat.
--
Stefan Matthias Aust
Frank Buss
2007-10-26 12:08:25 UTC
Permalink
Post by Stefan Matthias Aust
Das Gnash-Projekt versucht eine Clean-Room-Implementierung zu liefern.
Sind allerdings "nur" auf Flash-7-Niveau. Gab es nicht auch mal einen
Flash-Player in Java? Außerdem enthält Squeak-Smalltalk einen Player,
allerdings für Flash-5 oder so. Wie legal diese Player sind: Keine
Ahnung. Wenn man sich jedenfalls von Adobe die SWF-Spec zieht, liest
man: "his license does not permit the usage of the specification to
create software which supports SWF file playback."
Wahrscheinlich möchten die verhindern, daß es viele inkompatible und
fehlerhafte Player gibt und nur ihren eigenen Player als Standard sehen,
damit sich das Format selbst besser durchsetzt. Wo ich letztens mal
nachgesehen habe, gab es aber auch ein Player SDK, was aber scheinbar nur
an ausgewählte Kunden vergeben wird. Mein Lizenzantrag, das in eigenen
Programmen einzubauen, wurde einfach ignoriert. Ist wohl nur für große
Hersteller, wenn die den Player auf andere Platformen konvertieren wollen.
--
Frank Buss, ***@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Stefan Matthias Aust
2007-10-27 14:43:35 UTC
Permalink
Post by Frank Buss
Wahrscheinlich möchten die verhindern, daß es viele inkompatible und
fehlerhafte Player gibt und nur ihren eigenen Player als Standard sehen,
damit sich das Format selbst besser durchsetzt.
Mag sein. Das Argument hat Sun ja auch jahrelang benutzt. Und auf einmal
ist Java OSS und es interessiert trotzdem keinen und es poppen nicht 100
verschiedene inkompatible Versionen hoch. Ich denke daher, man verdient
daran, den Flash-Player strategisch zu lizensieren und das Geschäft will
man nicht ohne Grund aufgeben.
Post by Frank Buss
Wo ich letztens mal
nachgesehen habe, gab es aber auch ein Player SDK, was aber scheinbar nur
an ausgewählte Kunden vergeben wird.
Das Flash-7-SDK gibt es nicht mehr, sagt die Webseite, sondern man kann
jetzt als Gerätehersteller FlashLite-3 lizensieren. Andere als
Gerätehersteller können offenbar gar keine Flash-VM bekommen...
Post by Frank Buss
Mein Lizenzantrag, das in eigenen
Programmen einzubauen, wurde einfach ignoriert.
Du bist halt unbedeutend ;)
Post by Frank Buss
Ist wohl nur für große
Hersteller, wenn die den Player auf andere Platformen konvertieren wollen.
Nenne dich N. Okia, dann klappst vielleicht... :)
--
Stefan Matthias Aust
Wanja Gayk
2007-11-10 16:47:48 UTC
Permalink
Stefan Matthias Aust said...
Post by Stefan Matthias Aust
Post by Frank Buss
Wahrscheinlich möchten die verhindern, daß es viele inkompatible und
fehlerhafte Player gibt und nur ihren eigenen Player als Standard sehen,
damit sich das Format selbst besser durchsetzt.
Mag sein. Das Argument hat Sun ja auch jahrelang benutzt. Und auf einmal
ist Java OSS und es interessiert trotzdem keinen und es poppen nicht 100
verschiedene inkompatible Versionen hoch.
a) Der derzeitige Standard-Dialekt und Umfang von Java hat sich
etabliert, das hat lange gedauert, war aber bitter nötig, um überhaiupt
den Sprung zu wagen, ich erinnere an die Microsoft-Implementation.

b) abwarten.
Post by Stefan Matthias Aust
Ich denke daher, man verdient
daran, den Flash-Player strategisch zu lizensieren und das Geschäft will
man nicht ohne Grund aufgeben.
Davon kann man ausgehen, denke ich.

Gruß,
-Wanja-
--
"Gewisse Schriftsteller sagen von ihren Werken immer: 'Mein Buch, mein
Kommentar, meine Geschichte'. [..] Es wäre besser, wenn sie sagten:
'unser Buch, unser Kommentar, unsere Geschichte'; wenn man bedenkt, dass
das Gute darin mehr von anderen ist als von ihnen." [Blaise Pascal]
Jochen Theodorou
2007-10-26 14:02:02 UTC
Permalink
[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
http.send { foo(name) }
Was ich bei den Buildern nicht verstehe - wie funktioniert das Binden.
Ich vermute, {} ist eine Closure, die auch freie Variablen haben kann.
def a(c) { return c.call() }
def n = 5
print (a { n })
Was würde bei deinem Beispiel da oben passieren, wenn ich foo als freie
Variable in dem Block { foo(name) } habe. Ich hätte gedacht, der Builder
funktioniert mit Hilfe eines "undefined method" Hooks, aber das kann es
nicht alleine sein.
1.) lokale Variablen:
lokale Variablen werden immer lokal aufgelöst und nicht über das
"Binding". In deinem Fall rufe ich zwar a mit einer Groovy Closure auf,
doch das n darin wird immer zu 5 evaluieren ohne das ich das
beeinflussen kann.
Post by Stefan Matthias Aust
def c = {n}
def n = 4
c.delegate = [n:5]
assert c() == 5
c = {n}
assert c() == 4
2.) nicht lokale Namen:
alles was keine lokale Variable und keine Klasse darstellt wird zur
Laufzeit aufgelöst. Das kann sowas wie ein Methodenaufruf sein "foo()",
oder lesen/schreiben für eine Variable "a=b".

4.) Auflösungsreihenfolge:
jede Groovy Closure besitzt einen unveränderlichen "owner" und ein
veränderliches "delegate". Die allgemeine Reihenfolge beim Auflösen
eines Namens ist folgende: schlägt die Auflösung des Namens durch owner
fehl, wird delegate benutzt, sofern delegate nicht null und nicht den
gleichen Wert wie owner hat.
Post by Stefan Matthias Aust
class MyDelegate {
def foo(){5}
}
def c = {foo()}
try{
c()
assert false
} catch (e) {
assert true
}
c.delegate = new MyDelegate()
assert c() == 5
existiert c.owner.foo() nicht, so wird c.delegate.foo() versucht, sofern
das delegate die Bedingungen erfüllt. Sollte letzteres auch
fehlschlagen, wird eine MissingMethodException geworfen. Is owner auch
eine derartige Closure, dann wird wieder zuerst gegen owner und dann
gegen delegate aufgelöst. Variablen werden entsprechend behandelt, wobei
sich aber im detail andere Regeln ergeben.

Achtung: In 1.1 kann man die Reihenfolge verändern.

5.) owner
owner bezeichnet das die Groovy Closure umgebende Konstrukt, also
entweder die Klasse in der die Closure definiert wurde (bzw deren
Instanz), oder eine andere Groovy Closure. Methoden und Ausdrücke haben
kein eingenes Konstrukt.
Post by Stefan Matthias Aust
class MyClass {
def foo() {return {this} }
}
def x = new MyClass()
def c = x.foo()
assert c instanceof Closure
assert c.owner == x
assert c() == x
c = {this}
assert c.owner instanceof Script
assert c() == this
6.) delegate
jedes Objekt kann als Delegate verwendet werden.


So... was ist nun ein Builder? Eigentlich alles was ein delegate setzt.
Zum Beispiel eine ganz einfache Version:

class MyBuilder {
def foo(c) {
print "<foo>"
c()
print "</foo>"
}
def bar() { print "<bar/>"}

def start(c) {
c.delegate = this
c()
}
}

def builder = new MyBuilder()
builder.start {
foo() {
foo () {
bar()
}
}
}

ergibt:

<foo><foo><bar/></foo></foo>

oder eine erweiterte Form:

class MyBuilder {
def invokeMethod(String name, Object[] args) {
if (!args) {
print "<$name/>
} else {
print "<$name>"
args[0]()
print "</$name>"
}
}
def start(c) {
c.delegate = this
c()
}
}

def builder = new MyBuilder()
builder.start {
foo1() {
foo2 () {
"that's a nasty method name here"()
}
}
}

ergibt:

<foo1><foo2><that's a nasty method name here/></foo2></foo1>

Alles klar? Wenn man die Gehirnwindungen mal in die richtige Reihenfolge
gebracht hat ist es ein ziemlich einfaches und mächtiges Konzept.
Post by Stefan Matthias Aust
Offenbar kann man auch Strings und nicht nur Namen hinter dem "."
benutzen, wo mir die Bedeutung gar nicht klar ist. Ich hätte gedacht,
"." wird wie bei Java zu Übersetzungszeit gebunden. Offenbar ist es aber
nur wie bei JavaScript eine andere Syntax für [[getproperty]].
im Prinzip ja, nur das "**name" hier primär eine Methode ist.
Post by Stefan Matthias Aust
Hätte ich auch
schreiben können?
die Syntax ist legal, die Semantik ist aber anders in meinem Beipsiel
versuche ich eine Methode namens "**name" auf doc aufzurufen und gebe
eine Closure als Parameter. in deinem Fall wird erst doc["**name"]
ausgeführt, was doc.getAt("**name") entsprecht und auf dem resultat wird
dann die Methode call aufgerufen, mit der Closure als Parameter..
expandiert ist das also:

doc.getAt("**name").call( {it["@staff"] == "true"} )

sofern doc das entsprechend unterstützt ist das also möglich.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Das ist definitiv ein Vorteil. Ich würde aber sagen, etwas wie GPath
oder Builder sollten noch nicht einmal Konzepte der Sprache sein,
sondern diese sollte so flexibel sein, dass man sich das als Library
selbst bauen kann (was vielleicht in Groovy geht). In JS1 oder AS3 hast
du da keine Chance, aber durch die Meta-Funktionen in JS2 könnte es gehen.
Viele builder sind in Java geschrieben, ich denke das qualifiziert das
als Builder ;) Bei GPath ist es im wesentlichen das gleiche.
Aber das ist entgegengesetzt zu meinen Punkt. Wenn die Builder nur
funktionieren, wenn man sie in Java schreibt, ist es Magie. Wenn man sie
in Groovy schreiben könnte dann wäre es so wie ich es mir wünsche - ein
Zeichen für eine ausdrucksstarke Sprache. In Ruby geht das ja, vgl. Markaby.
ne, sie funktionieren auch in Groovy. Hab ja ein paar Beispiele gegeben.
In den frühen Tagen hatten wir Probleme mit Buildern, die in Groovy
geschrieben sind, aber das sit jetzt nicht mehr der Fall. Nach und nach
werden auch die Builder in Groovy übersetzt. SwingBuilder war zum
Beispiel lange in Java geschrieben und ist jetzt in Groovy
Post by Stefan Matthias Aust
Post by Jochen Theodorou
nunja, ich sprach von den Leuten, die es zu den Skriptsprachen zieht.
Die Unterscheidung ist IMHO eh willkürlich. IMHO sollte es zu
ausdrucksstärkeren Sprachen gehen. Java ist das nicht gerade. Groovy
bessert hier nach. Andere Sprachen wie Python oder auch Ruby sind eh
schon deutlich ausdruckstärker. Wobei ich hier wieder die Sprachen -
siehe oben - mit einem kleinen Kern vorziehe. Der Kern von Python ist
z.B. viel kleiner und viel regelmäßiger als der von Ruby, das von
Ausnahmen und Sonderfällen nur so wimmelt. Bei Groovy habe ich das
Gefühl - und daher bin ich leider kein so großer Fan davon - das ist
noch extremer als bei Ruby, weil man so nah an Java sein will wie
möglich und trotzdem besser.
Wir arbeiten natürlich daran die Ausnahmen und Sonderfälle nach und nach
zu entfernen, aber manchnmal ist das nicht so leicht. Wie bringst du zum
Beispiel das klassische For unter ohne in der Syntax zu weit
abzuweichen? Der Block danach könnte eine CLosure sein, also kein
Problem... aber was macht man mit (int i=0; i<length; i++)? Wir hatten
es lange Zeit deswegen nicht unterstützt, aber die Leute wollte es.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Groovy is kein komplettes Superset von Java. Semantsich gleich garnicht,
syntaktisch stimmt es bis auf Kleinigkeiten. Python wäre mit einer mehr
C-Syntax IMHO viel erfolgreicher gewesen.
Geschweifte Klammern werden total überbewertet. Ich finde es total
befreiend, Python machen zu können. Wer eine Sprache nur dann versteht,
wenn sie geschweifte Klammern hat ... ach, ich spar's mir...
du hast schon recht, aber es erhöht die Akzeptanz. Und manche
entscheiden ob sie eine Sprache mögen oder nicht eben an so
unwesentlichen Kleinigkeiten... sind leider meist auch die, die dann
darüber im Internet schreiben.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Und Scheme... die Syntax mag
ja einfach sein, aber ich habe auch gelernt, dass etwas nur dann
wirklich gut ist, wenn man auch die Grenzen erkennen kann. Und das ist
bei Scheme nun wirklich nciht gerade leicht. Die Sprache ist einfach zu
flexibel.
Da stimme ich dir zu. Konzeptionell toll, aber manchmal ist es schon
schön, wenn ein bisschen Syntax aus dem Code zur Orientierung
heraussticht. Die Syntax sollte jedoch das Programm nicht begraben. Wenn
ich einen 5-Zeiler brauche, nur um ein "map" oder "collect"
auszudrücken, dann nervt das genau wie zu wenig Syntax.
hehe, genau ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Post by Jochen Theodorou
es unterstützen und b) weil man es verwenden kann ohne es wirklich zu
verstehen.
Das kann man mit fast jeder Sprache :)
Bei manchen scheitert man dann aber schon an der ersten komischen
Fehlermeldung des Compilers und nix läuft. Bei JavaScript bekommt man's
jedenfalls zum Zucken und die Sprache ist recht verzeihend.
was auch ein Problem sein kann. Den Code versteht nacher vielleicht
niemand mehr.

[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Und die Bibliotheken wachsen - man
schaue sich man Dojo (ugg) an, oder YUI oder Ext oder auch nur den
Quelltext von Google Maps. Viel JavaScript. Und da haben sich die Macher
von JS2 gesagt, Klassen, Typen, usw. sind hilfreich.
gut, kann ich verstehen. Aber mich interessiert eher die Nutzung dieser
Bibliotheken.
Da helfen Typen doch auch. Denk an Code Completion in der IDE.
also jetzt mal auf den Browser zugeschnitten.... wenn ich da so viel
handgeschriebenes Javascript drin habe, dass ich eine IDE mit Code
Completion brauche, dann würde ich meinen ich mache etwas falsch oder
ich nutze die falsche Bibliothek. Im allgemeinen Fall ist Code
Completion schon ganz gut, aber in vielen Fällen braucht man sie
eigentlich nicht, und in einigen Fällen vergisst man leicht dass die
Funktionalität vielleicht in einer anderen Klasse versteckt ist. aber
gut, ich denke da könnten wir uns lange darüber unterhalten

[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Ich weiß nicht, Ruby ist sicherlich nicht die beste Sprache. Ich finde
z.B. Python deutlich eleganter. Mich stört der Ansatz, den andere
sicherlich lieben, dass es immer mehr als einen Weg gibt. Rails ist
nett, aber hat viel, viel Magie und ist vergleichsweise schwer zu lernen.
also bist du gegen Programming by Convention?
Ich bin gegen Programming by Magic. Es kommt auf die richtige Menge an.
Ist schwer genau zu sagen, was zu viel ist und was geht. Bei Rails gibt
es häufig drei oder mehr Wege, etwas auszudrücken. Das fängt bei Ruby
if cond then return 1
return 1 if cond
unless not cond; return 1; end
1 unless !cond
Usw. Mag für den Schreiber nett sein, hier seine Kreativität auszuleben,
aber als Leser muss man alle Varianten kennen, um das Programm zu
verstehen. Das kann es unnötig schwer machen, auch wenn die
verschiedenen Versionen eigentlich die Lesbarkeit erhöhen helfen sollen.
bei Java bist du da auch nicht viel besser dran. Da gäbe es eine Lösung
mit for, mit while und mit if bzw. if-else.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Das Argument, Client- und Server-Seite in der selben Sprache entwickeln
zu können, ist IMHO recht stark und könnte helfen. Allerdings befürchte
ich, eher wird es eine Lösung (Silverlight) geben, mit der man Ruby auf
dem Client machen kann, als dass JS2 fertig wird...
warum?
Weil Microsoft schneller sein wird bzw. Mozilla/Adobe zu langsam. Wie
gesagt, für Ende 2008 ist die JS2 Spec angekündigt und dann muss Mozilla
das noch in den Firefox einbauen, denn die Referenzimplementierung in
Standard-ML werden sie nicht integrieren sondern wahrscheinlich
Spidermonkey und Tamarin irgendwie verheiraten - beides C-Programme.
achso, das dauert noch bis Ende 2008? das ist schlecht.
Post by Stefan Matthias Aust
Möglicherweise könnte man da was mit PyPy machen. Ich hatte da gerade
ein paar Papers gelesen. PyPy ist der Versuch, einen Python in Python zu
schreiben und damit das Ergebnis effizent läuft, kompilieren sie
letztlich in eine Niedrigsprache, z.B. C oder Bytecode für .NET, JVM und
die LLVM. Da es komplexes Python zu schwer ist, effizient zu
kompilieren, gibt es RPython (R=Restricted), ein Subset, welches sich
effizient übersetzen lässt. Quasi ein C oder Java mit der Syntax von
Python.
Der interessante Unterschied ist jedoch, sie haben das normale Python,
um erstmal das RPython-Programm zu schreiben (ich erwähnte letztes Mal
ja schon so Metaprogrammierung für Multimethoden, die Python beherrscht)
und all sowas kann man nutzen.
Die Macher ziehen daher von Konferenz zu Konferenz und preisen ihr
System als ideale Basis für diverse Sprachen an, denn natürlich kann man
damit nicht nur Python übersetzen. Ich meine, es gibt einen JavaScript,
Scheme und Prolog-Interpreter als PoC und gerade diese Tage läuft (oder
lief) ein Sprint, die Squeak-VM in Python zu bauen, um sie dann mit PyPy
zu übersetzen.
Finde ich total spannend :)
in der Tat ;)
Post by Stefan Matthias Aust
Das schicke ist wie gesagt, wenn's einmal in Python existiert, können
sie auf .NET und JVM und LLVM (und damit diverse andere OSes)
übersetzen. Das JVM-Backend ist aber wohl leider rudimentär. Man hat
sich (sicherlich, um Aufmerksamkeit und Fördergelder von Microsoft zu
bekommen) auf .NET konzentriert wie es aussieht.
und was ist mit Rhino?
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Ich denke das ist Ansichtssache. Das Ziel war besser als Java zu sein,
nicht schön zu sein ;)
Falsches Ziel, wenn du mich fragst. Bzw. falsche Reihenfolge. Ich will
beides: Eine elegante Sprache die auch noch besser ist als Java.
wenn man und "besser" versteht das gleiche mit weniger Worten zu sagen,
dann deckt es sich auch teilweise mit elegant. Groovy ist meiner Meinung
nach eleganter als Java.... aber ich denke das ist auch nicht sonderlich
schwer.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
An der JVM sehe ich nur, dass es Java sein muss. Alles andere ist ein
Krampf. Wäre die VM gut, müsste es zwei Monate und nicht zwei Jahre
dauern, eine neue Sprache wie Groovy auf die VM aufzusetzen.
ich denke wenn ich heute eine fertig spezifiziete Sprache auf die JVM
umsetzen müsste, dann würde ich das vielleicht nicht in 2 Monaten
schaffen, aber 2 Jahre bräuchte ich sicher nicht. Kommt auch darauf an
was die Sprache können soll und ob es eine fertige Grammatik gibt. Aber
es ist nunmal was anderes wenn du eine Sprache fortwährend
weiterentwicklest, diskussionen zu führen hast wie das und das zu
funktionieren hat usw.
Ich hatte ja JS2 angeboten ;)
was fehlt denn in der Spec noch?
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Das DLR-Rahmenwerk von Microsoft ist wahrscheinlich der bislang beste
Versuch, das Implementieren neuer Sprachen zu vereinfachen, indem sie
alles, das, was es so verdammt schwer macht, die Dynamik einer modernen
Sprache auf die starre VM zu zwingen, übernehmen.
Solange das Framework meinen Bedarf abdeckt ist alles bestens. Und die
Infrastruktur hilft sicher auch schneller zu einem Ergebnis zu kommen.
Aber meistens sind es all die kleinen Details, die dann doch einen
Strich durch die Rechnung machen. Zum Beispiel, nehmen wir an deine
Sprache unterstützt eine Methoden mit einer variablen Anzal von
argumenten als ersten Parameter. Und nehmen wir an deine VM tut das
auch.... nur leider als letzten Parameter. Pech gehabt.
Du hast im Prinzip recht, aber da Microsoft die DLR aus IronPython
ableitet und auch sicherstellt, das JS und Ruby damit gehen, ist schon
recht viel abgedeckt. Spannend wäre vielleicht noch, etwas wie Erlang
auszuprobieren oder gleich Prolog, aber eigentlich würde ich da wenig
Probleme erwarten.
spannend ist auch das hinzufügen von Methoden zu Systemklassen zur
Laufzeit.. also bei Java zum Beispiel zu String. Da eine Version zu
finden die verhindert das sich verschiedene gleichzeitig benutzte
dynamische Sprachen nicht ins Gehege kommen ist nicht ganz trivial finde
ich. Ich weiss nicht was DLR alles unterstützt aber ich habe schon
festgestellt, dass die Art und Weise wie Methodenaufrufe in Groovy
verarbeitet werden nicht zu den meisten anderen Sprachen passt... Zum
Beispiel das man mit einer Category eine bestehende Methode kurzzeitig
"überschreiben" kann.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
def bar(NullObject o) {...}
NullObject gibt es schnon, aber bisher nur um Methoden auf null
auszuführen, nicht um einen Methodenparameter zu matchen.
Post by Stefan Matthias Aust
Wichtig bei !-Annotationen ist IMHO eher, dass ich die
Standardbibliothek nachtypisieren kann, also etwa
class Object {
def toString():String!
}
damit der Compiler wissen kann, dass
def x(s: String!) {...}
x(o.toString())
immer geht und anderfalls eine Warnung oder sogar ein Fehler gemeldet wird.
stimmt... wie macht das Scala?
Scala kennt keine non-null-Typen (falls sie das nicht geändert haben)
aus Kompatibität zu den Hostsprachen JVM und CLR.
achsoß ich dachte die hätten das... War dann wohl doch nur Nice.

[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
was mich bei einer Skriptsprache hier halt stört ist das Laufzeit und
Compilezeit ja miteinander verschmelzen.
Seit Jahren sage ich ja schon, es sollte den Unterschied zwischen
Laufzeit und Compilezeit gar nicht geben. Das ist künstlich und
verhindert Metaprogrammierung.
was aus diesem Kontext vielleicht nicht so ganz klar wird... es stört
mich, weil man dann Kompilierfehler bekommt, obwohl man das Programm
gerade ausführt. Stört mich eigentlich auch ein wenig in Groovy, aber
das hat ja wenigstens einen ausgewiesenen Compiler ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Allerdings ist es wie so oft auch nicht die Qualität, die darüber
entscheidet wleches System benutzt werden wird. Manchmal geht es nur
darum zur richtigen Zeit am richtigen Ort zu sein. So ungerecht das auch
sein mag. Allerdings fällt es mir schwer zu glauben das Flash komplett
von Silverlight verdrängt wird... selbst wenn Silverlight relativ
erfolgreich sein würde.
Wenn Youtube auch Silverlight statt Flash für das Anzeigen von Videos
unterstützen würde, dann hätte Microsoft eine Chance.
möglich, ja.
Post by Stefan Matthias Aust
Diese Plattform
ist IMHO ein wesentlicher Grund, warum jeder Flash installiert und meist
auch aktiviert hat.
stimmt, ich hatte lange Zeit kein Flash drauf ;)

Gruss theo
--
Jochen "blackdrag" Theodorou
Groovy Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Stefan Matthias Aust
2007-10-27 18:31:55 UTC
Permalink
Post by Jochen Theodorou
Post by Stefan Matthias Aust
def a(c) { return c.call() }
def n = 5
print (a { n })
lokale Variablen werden immer lokal aufgelöst und nicht über das
"Binding". In deinem Fall rufe ich zwar a mit einer Groovy Closure auf,
doch das n darin wird immer zu 5 evaluieren ohne das ich das
beeinflussen kann.
Mit anderen Worten, lokale Variablen im äußeren Kontext einer Closure
bringen den Builder durcheinander. Das finde ich nicht so gut, denn das
kann doch zu schwer zu findenen Fehlern führen.

Angenommen, ich habe diesen Code:

n = 4;
return new XmlBuilder { foo { name } }

Nun komme ich auf die Idee, "n" zu "name" zu refaktorieren. Auf einmal
bricht der Builder mit einer möglicherweise obskuren Fehlermeldung ab,
oder noch schlimmer, statt <foo><name/></foo> erhalte ich auf einmal
<foo>4</foo>.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
def c = {n}
def n = 4
c.delegate = [n:5]
assert c() == 5
c = {n}
assert c() == 4
d.h. die erste Closure ist eigentlich eine Kurzform für etwas wie

{ thisClosure.delegate.get("n") }
Post by Jochen Theodorou
alles was keine lokale Variable und keine Klasse darstellt wird zur
Laufzeit aufgelöst. Das kann sowas wie ein Methodenaufruf sein "foo()",
oder lesen/schreiben für eine Variable "a=b".
Ähm, wo ist Punkt drei? ;)
Post by Jochen Theodorou
So... was ist nun ein Builder? [...]
Danke für die Erklärung.
Post by Jochen Theodorou
Wir arbeiten natürlich daran die Ausnahmen und Sonderfälle nach und nach
zu entfernen, aber manchnmal ist das nicht so leicht. Wie bringst du zum
Beispiel das klassische For unter ohne in der Syntax zu weit
abzuweichen?
Weg damit... egal was die Leute sagen. Du weißt es besser als sie als
Sprachentwickler. Ich finde, etwas wie "for i in sequence_or_iterator"
reicht immer. Für Sonderfälle gibt es while.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
[Thema JavaScript 2]
Da helfen Typen doch auch. Denk an Code Completion in der IDE.
also jetzt mal auf den Browser zugeschnitten.... wenn ich da so viel
handgeschriebenes Javascript drin habe, dass ich eine IDE mit Code
Completion brauche, dann würde ich meinen ich mache etwas falsch oder
ich nutze die falsche Bibliothek.
Irgendwer muss die Bibliotheken doch auch schreiben. Außerdem denken die
JS-Sprachentwickler weiter als eine Scriptsprache für Browser. Für sie
ist JS2 die zukünftige Sprache für zukünftige (Web-)Anwendungen und
diese werden immer komplexer. Man stelle sich als Beispiel Systeme mit
der Komplexität von Swing vor.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
[PyPy]
Das schicke ist wie gesagt, wenn's einmal in Python existiert, können
sie auf .NET und JVM und LLVM (und damit diverse andere OSes)
übersetzen. Das JVM-Backend ist aber wohl leider rudimentär. Man hat
sich (sicherlich, um Aufmerksamkeit und Fördergelder von Microsoft zu
bekommen) auf .NET konzentriert wie es aussieht.
und was ist mit Rhino?
Wird Rhino überhaupt weiter entwickelt? Falls ja, dann im "Geheimen"
Eine echte Community existiert da doch nicht - oder kenne ich sie nur
nicht. Kein Hype.

Oder meinst du, ob man mit PyPy auch nach JS übersetzen kann - angeblich
soll das auch gehen, aber wohl nicht in jedem Fall.

Oder meinst du, ob für PyPy auch ein JavaScript-Interpreter existiert.
Das weiß ich nicht, aber möglicherweise. JS ist eine recht einfache und
vor allen Dingen gut spezifizierte Sprache.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Post by Jochen Theodorou
schaffen, aber 2 Jahre bräuchte ich sicher nicht. Kommt auch darauf an
was die Sprache können soll und ob es eine fertige Grammatik gibt. Aber
es ist nunmal was anderes wenn du eine Sprache fortwährend
weiterentwicklest, diskussionen zu führen hast wie das und das zu
funktionieren hat usw.
Ich hatte ja JS2 angeboten ;)
was fehlt denn in der Spec noch?
AFAIK gibt es noch keine Spec. Es gibt ECMAScript 3 + E4X sowie
ActionScript 3 und ein informelles Overview Paper zu ECMAScript 4 sowie
eine Referenzimplementierung, an der gearbeitet wird, während jetzt 12
Monate lang die Spec geschrieben werden soll. Dennoch: Es gibt bereits
die Syntaxbeschreibung als BNF und eine anscheinend recht vollständige
Beschreibung der neuen Features. Falls das nicht reicht, gibt es die
REferenzimplementierung oder die Sprachentwickler, die man fragen kann...
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Du hast im Prinzip recht, aber da Microsoft die DLR aus IronPython
ableitet und auch sicherstellt, das JS und Ruby damit gehen, ist schon
recht viel abgedeckt. Spannend wäre vielleicht noch, etwas wie Erlang
auszuprobieren oder gleich Prolog, aber eigentlich würde ich da wenig
Probleme erwarten.
spannend ist auch das hinzufügen von Methoden zu Systemklassen zur
Laufzeit.. also bei Java zum Beispiel zu String.
Das leistet AFAIK die DLR. Jedenfalls im allgemeinen Fall. Ob String bei
der CLR auch final ist und ob man das umgehen kann, weiß ich nicht. Aber
IronPython fügt zu System.String diverse Methoden hinzu. Bei IronRuby
muss es noch extremer sein, denn dort kann man ja jederzeit alle Klassen
erweitern.

Ein Rails-Plugin namens Glibberish überschreibt z.B. [] für Strings
derart, dass man "foo"[] und "foo is not bar"[:foo_not_bar] schreiben
kann, was dann als Aufforderung zu Übersetzung in andere Sprachen
aufgefasst wird, während "foo"[1] nach wie vor geht, und ein Zeichen
zurückliefert.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Scala kennt keine non-null-Typen (falls sie das nicht geändert haben)
aus Kompatibität zu den Hostsprachen JVM und CLR.
achsoß ich dachte die hätten das... War dann wohl doch nur Nice.
AFAIK, ja.
--
Stefan Matthias Aust
Jochen Theodorou
2007-10-27 19:47:32 UTC
Permalink
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
def a(c) { return c.call() }
def n = 5
print (a { n })
lokale Variablen werden immer lokal aufgelöst und nicht über das
"Binding". In deinem Fall rufe ich zwar a mit einer Groovy Closure auf,
doch das n darin wird immer zu 5 evaluieren ohne das ich das
beeinflussen kann.
Mit anderen Worten, lokale Variablen im äußeren Kontext einer Closure
bringen den Builder durcheinander. Das finde ich nicht so gut, denn das
kann doch zu schwer zu findenen Fehlern führen.
die bringen den Builder nicht durcheinander, denn der Builder erfährt
absolut nichts von der lokalen Variable.
Post by Stefan Matthias Aust
n = 4;
return new XmlBuilder { foo { name } }
Nun komme ich auf die Idee, "n" zu "name" zu refaktorieren. Auf einmal
bricht der Builder mit einer möglicherweise obskuren Fehlermeldung ab,
oder noch schlimmer, statt <foo><name/></foo> erhalte ich auf einmal
<foo>4</foo>.
stimmt, sofern n eine lokale Variable ist/war. Allerdings wäre es für
eine IDE extrem einfach bei einem solchen Refactoring eine Fehlermeldung
zu geben.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
def c = {n}
def n = 4
c.delegate = [n:5]
assert c() == 5
c = {n}
assert c() == 4
d.h. die erste Closure ist eigentlich eine Kurzform für etwas wie
{ thisClosure.delegate.get("n") }
getPropety statt get, aber im Prinzip wird es dazu ausgewertet, ja.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
alles was keine lokale Variable und keine Klasse darstellt wird zur
Laufzeit aufgelöst. Das kann sowas wie ein Methodenaufruf sein "foo()",
oder lesen/schreiben für eine Variable "a=b".
Ähm, wo ist Punkt drei? ;)
oh, sorry ;) Hab ich wohl Wegrefactored ;) Passiert wenn man sowas ohne
IDE macht *g*

[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
[Thema JavaScript 2]
Da helfen Typen doch auch. Denk an Code Completion in der IDE.
also jetzt mal auf den Browser zugeschnitten.... wenn ich da so viel
handgeschriebenes Javascript drin habe, dass ich eine IDE mit Code
Completion brauche, dann würde ich meinen ich mache etwas falsch oder
ich nutze die falsche Bibliothek.
Irgendwer muss die Bibliotheken doch auch schreiben. Außerdem denken die
JS-Sprachentwickler weiter als eine Scriptsprache für Browser. Für sie
ist JS2 die zukünftige Sprache für zukünftige (Web-)Anwendungen und
diese werden immer komplexer. Man stelle sich als Beispiel Systeme mit
der Komplexität von Swing vor.
Aber dann ist die Verdrängung von Java auf dem Server doch ein Ziel der
Sprache. Auch wenn es niemand von denen so sagen würde.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
[PyPy]
Das schicke ist wie gesagt, wenn's einmal in Python existiert, können
sie auf .NET und JVM und LLVM (und damit diverse andere OSes)
übersetzen. Das JVM-Backend ist aber wohl leider rudimentär. Man hat
sich (sicherlich, um Aufmerksamkeit und Fördergelder von Microsoft zu
bekommen) auf .NET konzentriert wie es aussieht.
und was ist mit Rhino?
Wird Rhino überhaupt weiter entwickelt? Falls ja, dann im "Geheimen"
Eine echte Community existiert da doch nicht - oder kenne ich sie nur
nicht. Kein Hype.
also ich kenne ein paar Rhinoentwickler von der jvm-languages Liste...
Und ich weiss auch das die noch an Rhino arbeiten... Vielleicht machen
sie zu wenig publik?
Post by Stefan Matthias Aust
Oder meinst du, ob man mit PyPy auch nach JS übersetzen kann - angeblich
soll das auch gehen, aber wohl nicht in jedem Fall.
Oder meinst du, ob für PyPy auch ein JavaScript-Interpreter existiert.
Das weiß ich nicht, aber möglicherweise. JS ist eine recht einfache und
vor allen Dingen gut spezifizierte Sprache.
sorry, ich glaube der Kontext der Frage war unklar... eigentlich wollte
ich fragen ob die Rhinoleute nicht vielleicht Javascript2 schneller am
Laufen haben könnten... aber es gibt ja eine Referenzimplementierung,
also an einer nicht vorhandenen Implementierung der Sprache wird es
nicht liegen falls die Sprache nicht akzeptiert wird.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Post by Jochen Theodorou
schaffen, aber 2 Jahre bräuchte ich sicher nicht. Kommt auch darauf an
was die Sprache können soll und ob es eine fertige Grammatik gibt. Aber
es ist nunmal was anderes wenn du eine Sprache fortwährend
weiterentwicklest, diskussionen zu führen hast wie das und das zu
funktionieren hat usw.
Ich hatte ja JS2 angeboten ;)
was fehlt denn in der Spec noch?
AFAIK gibt es noch keine Spec. Es gibt ECMAScript 3 + E4X sowie
ActionScript 3 und ein informelles Overview Paper zu ECMAScript 4 sowie
eine Referenzimplementierung, an der gearbeitet wird, während jetzt 12
Monate lang die Spec geschrieben werden soll. Dennoch: Es gibt bereits
die Syntaxbeschreibung als BNF und eine anscheinend recht vollständige
Beschreibung der neuen Features. Falls das nicht reicht, gibt es die
REferenzimplementierung oder die Sprachentwickler, die man fragen kann...
12 Monate für die Spec? Oh. eine BNF reicht nicht, es sei denn man will
nur einen Parser schreiben. Eine Beschreibung der neuen Features reicht,
sofern es eine vollständige Beschreibung der alten Features auch gibt ;)
Es gibt da aber bestimmt schon eine Spec.... Allerdings wenn die Systeme
kompatibel sind, dann würde sich eine Erweiterung von Rhino doch
irgendwie anbieten statt from Scratch zu starten.... sofern deren Code
brauchbar ist versteht sich.
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Du hast im Prinzip recht, aber da Microsoft die DLR aus IronPython
ableitet und auch sicherstellt, das JS und Ruby damit gehen, ist schon
recht viel abgedeckt. Spannend wäre vielleicht noch, etwas wie Erlang
auszuprobieren oder gleich Prolog, aber eigentlich würde ich da wenig
Probleme erwarten.
spannend ist auch das hinzufügen von Methoden zu Systemklassen zur
Laufzeit.. also bei Java zum Beispiel zu String.
Das leistet AFAIK die DLR. Jedenfalls im allgemeinen Fall. Ob String bei
der CLR auch final ist und ob man das umgehen kann, weiß ich nicht. Aber
IronPython fügt zu System.String diverse Methoden hinzu. Bei IronRuby
muss es noch extremer sein, denn dort kann man ja jederzeit alle Klassen
erweitern.
stimmt.
Post by Stefan Matthias Aust
Ein Rails-Plugin namens Glibberish überschreibt z.B. [] für Strings
derart, dass man "foo"[] und "foo is not bar"[:foo_not_bar] schreiben
kann, was dann als Aufforderung zu Übersetzung in andere Sprachen
aufgefasst wird, während "foo"[1] nach wie vor geht, und ein Zeichen
zurückliefert.
hmm... interessant.... vielleicht sollte ich mal ein Groovy.Net schreiben ;)

Gruss theo
--
Jochen "blackdrag" Theodorou
Groovy Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Stefan Matthias Aust
2007-11-01 15:53:50 UTC
Permalink
Post by Jochen Theodorou
also ich kenne ein paar Rhinoentwickler von der jvm-languages Liste...
Und ich weiss auch das die noch an Rhino arbeiten... Vielleicht machen
sie zu wenig publik?
Sie klappern jedenfalls nicht so laut, dass ich das höre. Und deren
Webseite (http://www.mozilla.org/rhino/download.html) sieht aus, als ob
da der letzte irgendwann letztes Jahr das Licht ausgemacht und auch
gegangen ist :)
Post by Jochen Theodorou
sorry, ich glaube der Kontext der Frage war unklar... eigentlich wollte
ich fragen ob die Rhinoleute nicht vielleicht Javascript2 schneller am
Laufen haben könnten...
Das hängt wahrscheinlich von deren Codequalität ab - als ich mir das
System mal angeschaut hatte, fand ich es leicht verständlich und einfach
zu erweitern. Allerdings werkelte ich auch nicht an der syntaktischen
Oberfläche herum und habe nicht versucht, derart umwälzende Änderungen
wie für JS2 sicherlich nötig wären, einzubauen.
Post by Jochen Theodorou
aber es gibt ja eine Referenzimplementierung,
also an einer nicht vorhandenen Implementierung der Sprache wird es
nicht liegen falls die Sprache nicht akzeptiert wird.
Die Referenzimplementierung ist aber eher als lebende Spezifikation
gedacht als für einen praktischen Einsatz, wenn ich das richtig
verstanden habe. Jedoch sind Rhino oder Spidermonkey (oder wie heißt die
aktuellen C-Version von Mozilla) sind mögliche Kandidaten genau wie das
Tamarin-Projekt. Diese haben bereits jetzt schon ein Plug-in für den IE,
mit dem man den aktuellen ActionScript 3-Stand in den IE als
Scriptsprache integrieren kann, wie ich gelernt habe. Wenn der sich mal
zu JS2 entwickelt hat, soll das die Antwort auf das Problem sein, dass
Microsoft Stasis als Erfolgsrezept für das Web verkauft und weder am IE
noch an ihrer JS-Implementierung wirklich etwas zu ändern bereit scheint.

Ist aber auch klar: Man will denke ich lieber Silverlight pushen als
sich selbst Konkurenz machen. Silverlight hilft durch die Nähe zu .NET
und WPF (aka Avalon), .NET und alle damit zusammenhängenden Technologien
populär zu machen und so Microsoft Vista zu stärken.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
AFAIK gibt es noch keine Spec. Es gibt ECMAScript 3 + E4X sowie
ActionScript 3 und ein informelles Overview Paper zu ECMAScript 4 sowie
eine Referenzimplementierung, an der gearbeitet wird, während jetzt 12
Monate lang die Spec geschrieben werden soll. Dennoch: Es gibt bereits
die Syntaxbeschreibung als BNF und eine anscheinend recht vollständige
Beschreibung der neuen Features. Falls das nicht reicht, gibt es die
REferenzimplementierung oder die Sprachentwickler, die man fragen kann...
12 Monate für die Spec? Oh. eine BNF reicht nicht, es sei denn man will
nur einen Parser schreiben. Eine Beschreibung der neuen Features reicht,
sofern es eine vollständige Beschreibung der alten Features auch gibt ;)
Hast du die ECMAScript 3 Spec mal gelesen? Da wird in Pseudo-Code jede
einzelne Funktion beschrieben und so gut es informal eben geht die
Semantik der Sprache festgeklopft. Und selbst das war nicht ausreichend
für die Entwickler - man hat Dinge übersehen und JScript (IE) und
JavaScript (Mozilla) funktionieren zum Teil unterschiedlich. Von Bugs
gar nicht zu reden... Das ist sicherlich der Grund, warum man eine
lauffähige Spec in Standard-ML haben will und nicht nur eine Spec auf
Papier.
Post by Jochen Theodorou
Es gibt da aber bestimmt schon eine Spec.... Allerdings wenn die Systeme
kompatibel sind, dann würde sich eine Erweiterung von Rhino doch
irgendwie anbieten statt from Scratch zu starten.... sofern deren Code
brauchbar ist versteht sich.
Durchaus ein guter Weg. Möglicherweise ist es aber einfacher, die neue
BNF mit einem Parsergenerator zu einem AST zu konvertieren und für
diesen dann einen Interpreter zu schreiben. Wird nicht so schnell
laufen, wie ein Bytecode-Interpreter oder Compiler (wie es Rhino ist),
doch es könnte helfen, erstmal ein funktionsfähiges System zu haben, was
Tests bestehen kann bzw. wogegen man Tests schreiben kann, bevor man
dann zum Kompilieren übergeht. Der Parser für Rhino scheint per Hand
geschrieben worden zu sein. Dafür könnte JS2 inzwischen zu groß sein.
--
Stefan Matthias Aust
Jochen Theodorou
2007-11-12 09:34:42 UTC
Permalink
[...]
Post by Stefan Matthias Aust
Post by Jochen Theodorou
aber es gibt ja eine Referenzimplementierung,
also an einer nicht vorhandenen Implementierung der Sprache wird es
nicht liegen falls die Sprache nicht akzeptiert wird.
Die Referenzimplementierung ist aber eher als lebende Spezifikation
gedacht als für einen praktischen Einsatz, wenn ich das richtig
verstanden habe.
Nachdem wie ich es verstanden habe ist diese Implementierung da um
zusätzliche Fragen zu beantworten, eine Spec gibt es trotzdem. Und
nachdem manche Menschen rummeckern wenn es keine Spec gibt, ist das wohl
auch besser so....

[...]
Post by Stefan Matthias Aust
Ist aber auch klar: Man will denke ich lieber Silverlight pushen als
sich selbst Konkurenz machen. Silverlight hilft durch die Nähe zu .NET
und WPF (aka Avalon), .NET und alle damit zusammenhängenden Technologien
populär zu machen und so Microsoft Vista zu stärken.
das könnte gut sein... ich meine natürlich will M$ das, aber ob es
wirklich Vista stärken wird? Muss es denn gestärkt werden? Oder wird
vielleicht eher die Verbreitung von Komponenten die Vistaspezifisch sind
nicht eher von der Verbreitung von Vista abhängig sein? Ich denke beide
Technologien sollen sich unterstützen. sie helfen sich gegenseitig ;)
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Stefan Matthias Aust
AFAIK gibt es noch keine Spec. Es gibt ECMAScript 3 + E4X sowie
ActionScript 3 und ein informelles Overview Paper zu ECMAScript 4 sowie
eine Referenzimplementierung, an der gearbeitet wird, während jetzt 12
Monate lang die Spec geschrieben werden soll. Dennoch: Es gibt bereits
die Syntaxbeschreibung als BNF und eine anscheinend recht vollständige
Beschreibung der neuen Features. Falls das nicht reicht, gibt es die
REferenzimplementierung oder die Sprachentwickler, die man fragen kann...
12 Monate für die Spec? Oh. eine BNF reicht nicht, es sei denn man will
nur einen Parser schreiben. Eine Beschreibung der neuen Features reicht,
sofern es eine vollständige Beschreibung der alten Features auch gibt ;)
Hast du die ECMAScript 3 Spec mal gelesen?
noch nicht ;)
Post by Stefan Matthias Aust
Da wird in Pseudo-Code jede
einzelne Funktion beschrieben und so gut es informal eben geht die
Semantik der Sprache festgeklopft. Und selbst das war nicht ausreichend
für die Entwickler - man hat Dinge übersehen und JScript (IE) und
JavaScript (Mozilla) funktionieren zum Teil unterschiedlich. Von Bugs
gar nicht zu reden... Das ist sicherlich der Grund, warum man eine
lauffähige Spec in Standard-ML haben will und nicht nur eine Spec auf
Papier.
kann ich gut verstehen
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Es gibt da aber bestimmt schon eine Spec.... Allerdings wenn die Systeme
kompatibel sind, dann würde sich eine Erweiterung von Rhino doch
irgendwie anbieten statt from Scratch zu starten.... sofern deren Code
brauchbar ist versteht sich.
Durchaus ein guter Weg. Möglicherweise ist es aber einfacher, die neue
BNF mit einem Parsergenerator zu einem AST zu konvertieren und für
diesen dann einen Interpreter zu schreiben. Wird nicht so schnell
laufen, wie ein Bytecode-Interpreter oder Compiler (wie es Rhino ist),
doch es könnte helfen, erstmal ein funktionsfähiges System zu haben, was
Tests bestehen kann bzw. wogegen man Tests schreiben kann, bevor man
dann zum Kompilieren übergeht. Der Parser für Rhino scheint per Hand
geschrieben worden zu sein. Dafür könnte JS2 inzwischen zu groß sein.
naja, wenn man schon einen Compiler hat, dann wäre das Ziel eigentlich
die neuen Features irgendwie mit den Fähigkeiten des alten Compilers zu
emulieren. Das wäre dann auch ein funktionsfähiges System... einen
Parser braucht man dann natürlich trotzdem.Ich weiss nicht wie deren
Compiler aufgebaut ist, aber wenn es ein Multipasscompiler mit AST ist,
dann reicht es wahrscheinlich den Parser auszutauschen und einen
kompatiblen AST zu generieren. Im Prinzip ist das genausoviel Arbeit
wie deine Idee, nur spart man es sich einen kompletten Interpreter zu
schreiben und muss dafür den passenden AST für den Compiler erzeugen.
Kommt auf den speziellen Fall an ob es sich lohnt würde ich sagen ;)

Gruss theo
--
Jochen "blackdrag" Theodorou
The Groovy Project Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Bernd Eckenfels
2007-11-12 09:49:20 UTC
Permalink
Post by Jochen Theodorou
das könnte gut sein... ich meine natürlich will M$ das, aber ob es
wirklich Vista stärken wird? Muss es denn gestärkt werden?
Vista ist ein Desktop System, und wenn man .NET stärkt, dann kommt das in
erster Linie den Server Systemen zugute. Silverlight dient hier also in
erster Linie nicht der Stärkung von Vista, sondern ganz generell Microsoft.
Zumal ich mir mal denke, dass gerade im Portable/Mobile Mart die größten
Defizite von MS sind, die sie mit einem akzeptierten Silverlight ausbügeln
können.

(Ausserdem ist ein vernünftiger Presentation Layer einfach überfällig)

Gruss
Bernd
Jochen Theodorou
2007-11-12 10:04:13 UTC
Permalink
Post by Bernd Eckenfels
Post by Jochen Theodorou
das könnte gut sein... ich meine natürlich will M$ das, aber ob es
wirklich Vista stärken wird? Muss es denn gestärkt werden?
Vista ist ein Desktop System, und wenn man .NET stärkt, dann kommt das in
erster Linie den Server Systemen zugute.
Ich weiss nicht wie es dir geht, aber viele Menschen scheinen .NET als
Desktopkomponente zu sehen, nicht als Serverteil. Natürlich gibt es .Net
auch auf dem Server, zum Beispiel Asp .Net, aber der einfache Benutzer,
der der Solverlightapplikationen benutzt sitzt am Desktop. Sofern
Silverlight bei Billighoster xy laufen soll wird es von .NET auf dem
Server unabhängig sein.
Post by Bernd Eckenfels
Silverlight dient hier also in
erster Linie nicht der Stärkung von Vista, sondern ganz generell Microsoft.
was von M$ dient denn bitte nicht der Stärkung von M$ ;)
Post by Bernd Eckenfels
Zumal ich mir mal denke, dass gerade im Portable/Mobile Mart die größten
Defizite von MS sind, die sie mit einem akzeptierten Silverlight ausbügeln
können.
Naja.. bei so vielen grossen Defiziten ist es für mich persönlich nicht
mehr so wichtig was die größten sind ;)
Post by Bernd Eckenfels
(Ausserdem ist ein vernünftiger Presentation Layer einfach überfällig)
vernünftig im Vergleich zu was? Swing?

Gruss theo
--
Jochen "blackdrag" Theodorou
The Groovy Project Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Stefan Matthias Aust
2007-11-15 14:40:39 UTC
Permalink
Post by Jochen Theodorou
Post by Bernd Eckenfels
Post by Jochen Theodorou
das könnte gut sein... ich meine natürlich will M$ das, aber ob es
wirklich Vista stärken wird? Muss es denn gestärkt werden?
Vista ist ein Desktop System, und wenn man .NET stärkt, dann kommt das in
erster Linie den Server Systemen zugute.
Ich weiss nicht wie es dir geht, aber viele Menschen scheinen .NET als
Desktopkomponente zu sehen, nicht als Serverteil. Natürlich gibt es .Net
auch auf dem Server, zum Beispiel Asp .Net, aber der einfache Benutzer,
der der Solverlightapplikationen benutzt sitzt am Desktop. Sofern
Silverlight bei Billighoster xy laufen soll wird es von .NET auf dem
Server unabhängig sein.
Silverlight ist eine rein Client und (genau wie Flash) auch komplett
unabhängig von Webservern oder Hostern. Jeder mit einem
50-cent-Webhosting-Service kann Silverlight-Anwendungen ausliefern.

Natürlich bietet Microsoft auch Bibliotheken, die besonders einfach mit
ASP.NET und anderen Microsoft-Servertechnologien zusammenarbeiten, aber
das ist eine andere Geschichte.

Zunächst einmal wird Silverlight 1.1 erlauben, Flash/Flex-artiges Zeugs
in Python oder Ruby (oder meintwegen auch C#, aber das ist IMHO weniger
sexy) zu entwickeln.

Hier muss Adobe bei Flash schnell nachlegen...
Post by Jochen Theodorou
Post by Bernd Eckenfels
(Ausserdem ist ein vernünftiger Presentation Layer einfach überfällig)
vernünftig im Vergleich zu was? Swing?
Er meint bestimmt WinForms.
--
Stefan Matthias Aust
Jochen Theodorou
2007-11-15 19:27:00 UTC
Permalink
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Bernd Eckenfels
Post by Jochen Theodorou
das könnte gut sein... ich meine natürlich will M$ das, aber ob es
wirklich Vista stärken wird? Muss es denn gestärkt werden?
Vista ist ein Desktop System, und wenn man .NET stärkt, dann kommt das in
erster Linie den Server Systemen zugute.
Ich weiss nicht wie es dir geht, aber viele Menschen scheinen .NET als
Desktopkomponente zu sehen, nicht als Serverteil. Natürlich gibt es .Net
auch auf dem Server, zum Beispiel Asp .Net, aber der einfache Benutzer,
der der Solverlightapplikationen benutzt sitzt am Desktop. Sofern
Silverlight bei Billighoster xy laufen soll wird es von .NET auf dem
Server unabhängig sein.
Silverlight ist eine rein Client und (genau wie Flash) auch komplett
unabhängig von Webservern oder Hostern. Jeder mit einem
50-cent-Webhosting-Service kann Silverlight-Anwendungen ausliefern.
Natürlich bietet Microsoft auch Bibliotheken, die besonders einfach mit
ASP.NET und anderen Microsoft-Servertechnologien zusammenarbeiten, aber
das ist eine andere Geschichte.
sicher, ich hatte ja auch nur auf Bernd's Kommentar geantwortet, der
meinte das Silverlight Vista stärken wird... aber irgendwie sagte er ja
garnichts vom Server, sondern nur allgemein Vista...könnte natürlich
sein das Silverlight mit Applikationen auf dem Desktop reden will...
ohja... schöne neue Dialerwelt ;) Naja, mal abwarten, man kann die
Applikationen dann bestimmt auch mit einem speziellen Tool certifizieren
usw... man muss nur entsprechend zahlen ;)
Post by Stefan Matthias Aust
Zunächst einmal wird Silverlight 1.1 erlauben, Flash/Flex-artiges Zeugs
in Python oder Ruby (oder meintwegen auch C#, aber das ist IMHO weniger
sexy) zu entwickeln.
Hier muss Adobe bei Flash schnell nachlegen...
stimmt
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Bernd Eckenfels
(Ausserdem ist ein vernünftiger Presentation Layer einfach überfällig)
vernünftig im Vergleich zu was? Swing?
Er meint bestimmt WinForms.
ja, das ist schon etwas übel ;)

Gruss theo
--
Jochen "blackdrag" Theodorou
The Groovy Project Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Bernd Eckenfels
2007-11-15 20:58:27 UTC
Permalink
Post by Jochen Theodorou
sicher, ich hatte ja auch nur auf Bernd's Kommentar geantwortet, der
meinte das Silverlight Vista stärken wird...
Nein ich meinte, dass ich keinen Zusammenhang zwischen Vista und Silverlight sehe.

Gruss
Bernd
Jochen Theodorou
2007-11-15 22:07:22 UTC
Permalink
Post by Bernd Eckenfels
Post by Jochen Theodorou
sicher, ich hatte ja auch nur auf Bernd's Kommentar geantwortet, der
meinte das Silverlight Vista stärken wird...
Nein ich meinte, dass ich keinen Zusammenhang zwischen Vista und Silverlight sehe.
huch, grösseres Missverständnis als ich dachte.. lol. Ich auch nicht so
sehr ;)

Gruss theo
--
Jochen "blackdrag" Theodorou
The Groovy Project Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Bernd Eckenfels
2007-11-15 20:57:37 UTC
Permalink
Post by Stefan Matthias Aust
Post by Jochen Theodorou
Post by Bernd Eckenfels
(Ausserdem ist ein vernünftiger Presentation Layer einfach überfällig)
vernünftig im Vergleich zu was? Swing?
Er meint bestimmt WinForms.
Ne, ich meinte als Flash Alternative.

Gruss
Bernd
Stefan Matthias Aust
2007-11-15 14:36:45 UTC
Permalink
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Die Referenzimplementierung ist aber eher als lebende Spezifikation
gedacht als für einen praktischen Einsatz, wenn ich das richtig
verstanden habe.
Nachdem wie ich es verstanden habe ist diese Implementierung da um
zusätzliche Fragen zu beantworten, eine Spec gibt es trotzdem.
Das ist richtig. Ich wollte nicht aussagen, dass der Code das
Textdokument ersetzen soll, sondern dass der Code nicht für den
Produktiveinsatz gedacht ist.
Post by Jochen Theodorou
Post by Stefan Matthias Aust
Durchaus ein guter Weg. Möglicherweise ist es aber einfacher, die neue
BNF mit einem Parsergenerator zu einem AST zu konvertieren und für
diesen dann einen Interpreter zu schreiben. Wird nicht so schnell
laufen, wie ein Bytecode-Interpreter oder Compiler (wie es Rhino ist),
doch es könnte helfen, erstmal ein funktionsfähiges System zu haben, was
Tests bestehen kann bzw. wogegen man Tests schreiben kann, bevor man
dann zum Kompilieren übergeht. Der Parser für Rhino scheint per Hand
geschrieben worden zu sein. Dafür könnte JS2 inzwischen zu groß sein.
naja, wenn man schon einen Compiler hat, dann wäre das Ziel eigentlich
die neuen Features irgendwie mit den Fähigkeiten des alten Compilers zu
emulieren. Das wäre dann auch ein funktionsfähiges System... einen
Parser braucht man dann natürlich trotzdem.Ich weiss nicht wie deren
Compiler aufgebaut ist, aber wenn es ein Multipasscompiler mit AST ist,
dann reicht es wahrscheinlich den Parser auszutauschen und einen
kompatiblen AST zu generieren. Im Prinzip ist das genausoviel Arbeit
wie deine Idee, nur spart man es sich einen kompletten Interpreter zu
schreiben und muss dafür den passenden AST für den Compiler erzeugen.
Kommt auf den speziellen Fall an ob es sich lohnt würde ich sagen ;)
Einen AST-Interpreter finde ich aber vergleichsweise einfach. Einfacher
jedenfalls als einen Code-Generator. Nehmen wir einen Type-Case als
Beispiel:

switch type(<expr>) {
case (<var>: <type>) { <stmt> ... }
...
}

Der AST wäre sowas:

SwitchType(valueExpr,
TypeCase(var, typeExpr, stmt, ...),
...)

und dann:

Object SwitchType::eval(Ctx ctx) {
Object value = valueExpr.eval(ctx);
for (TypeCase tc : typeCases)
if (tc.evalIfInstance(value, ctx)) break;
return null;
}

boolean TypeCase::evalIfInstance(Object value, Ctx ctx) {
ESType type = ctx.toType(typeExpr.eval(ctx));
if (!type.isInstance(value)) return false;
ctx.bind(var, value);
for (Stmt s : stmts) s.eval(ctx);
ctx.unbind(var);
return true;
}

Alternativ kann man auch ASTs erst noch transformieren und etwa dies
erzeugen:

List(
Let("t0", valueExpr),
If(IsOperator("t0", typeExpr),
List(Let(var, "t0"), stmt, ...),
If(...)...))
--
Stefan Matthias Aust
Jochen Theodorou
2007-11-15 20:00:33 UTC
Permalink
[...]
Post by Stefan Matthias Aust
Einen AST-Interpreter finde ich aber vergleichsweise einfach. Einfacher
jedenfalls als einen Code-Generator.
die zwei sind so weit aber auch nicht voneinander entfernt. Beim
Interpreter baust du etwas das deinen Baum auswertet, beim compiler
baust du deinen Baum so dass der cOmpiler in auswerten kann. Um so
komplexer die Sprache um so eher lohnt sich der Aufwand für den
Compiler. Bei einfachen Beispielen ist der interpreter wahrscheinlich
fast immer die bessere Wahl

Gruss theo
--
Jochen "blackdrag" Theodorou
The Groovy Project Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
http://www.g2one.com/
Florian Weimer
2007-10-26 15:55:47 UTC
Permalink
Post by Stefan Matthias Aust
Aber was wäre besser, wenn jeder einen Player bauen könnte? Gäbe es dann
etwas besseres als Flash-7 für die Wii? Oder einen in Java geschriebenen
Flash-9-Player? Solange der Player von Adobe kostenlos ist, ist das
alles nicht so schlimm.
Es gibt Plattformen, für die Adobe keine Abspielsoftware bereitstellt.
Auch würde ich den Player lieber in eine klassische Softwaredistribution
packen (und dann die Plugin-Installation abdrehen), so daß ich jederzeit
weiß, was auf den Clients installiert ist.
Raffael Herzog
2007-10-22 13:35:01 UTC
Permalink
Post by Stefan Matthias Aust
Gibt es ein vergleichbares Projekt für ActionScript 3?
Yep, gibt es: http://osflash.org/j2as

Ich habe allerdings nie damit gearbeitet und es liegt der Verdacht nahe,
dass es ActionScript 2 erzeugt.
Post by Stefan Matthias Aust
Wäre so etwas
sinnvoll? Möchte jemand so ein Projekt starten?
IMHO nicht. Wenn du Flash machen willst, besonders mit OpenSource-
Tools, gibt es so viel zu lernen und zu begreifen, ActionScript zu
lernen ist da noch das geringste Problem. Ich fand das ASDT-Plugin für
Eclipse (http://asdt.org/) ganz gut, als ich mit Flash herumgespielt
habe, swfmill (http://swfmill.org/) ist natürlich auch ein absolutes
Muss, ohne das geht gar nichts ... :)

Gruss,
Raffi
--
Come to think of it, there are already a million monkeys on a million
typewriters, and Usenet is *nothing* like Shakespeare!

***@raffael.ch · PGP Key 5D1FF5F4 · http://www.raffael.ch/
Stefan Matthias Aust
2007-10-22 14:18:39 UTC
Permalink
Post by Raffael Herzog
Post by Stefan Matthias Aust
Gibt es ein vergleichbares Projekt für ActionScript 3?
Yep, gibt es: http://osflash.org/j2as
Oh, klasse! Nein, doch nicht. Das ist AS2, nicht AS3. Erst letztes nutzt
die AVM2 mit JIT und so und wird nicht einfach nur interpretiert.
Außerdem scheint das Projekt im April 2006 gestorben zu sein.
Post by Raffael Herzog
Post by Stefan Matthias Aust
Wäre so etwas
sinnvoll? Möchte jemand so ein Projekt starten?
IMHO nicht. Wenn du Flash machen willst, besonders mit OpenSource-
Tools, gibt es so viel zu lernen und zu begreifen, ActionScript zu
lernen ist da noch das geringste Problem.
Es geht mir darum, dass ich existierenden Code wiederverwenden möchte.
Händisch zu portieren mag vielleicht in diesem Fall sogar schneller
gehen, als selbst einen Übersetzer zu bauen. Doch dann parallel zwei
Codebasen zu pflegen ist auch keine angenehme Vorstellung.

Um das Lernen (oder Nichtlernen) von ActionScript geht es mir nicht. AS3
kann ich so leidlich für den Hausgebrauch. Java auch :) Und ich kann
sogar den Flexbuilder bedienen...
Post by Raffael Herzog
habe, swfmill (http://swfmill.org/) ist natürlich auch ein absolutes
Muss, ohne das geht gar nichts ... :)
Äh, wie soll das Übersetzen von SWF in XML und zurück helfen?
--
Stefan Matthias Aust
Raffael Herzog
2007-10-22 18:28:28 UTC
Permalink
Post by Stefan Matthias Aust
Post by Raffael Herzog
habe, swfmill (http://swfmill.org/) ist natürlich auch ein absolutes
Muss, ohne das geht gar nichts ... :)
Äh, wie soll das Übersetzen von SWF in XML und zurück helfen?
MTASC (Der ActionScript-Compiler, der für die OSS-Tools meist verwendet
wird) kompiliert nur ActionScript. Zu einem fertigen SWF gehört
allerdings noch einiges mehr, das muss noch in verschiedene Movies
unterteilt sein, die dann auf die Stage kommen oder auch nicht, es
braucht Resourcen (Bilder, Sounds) etc. Daher, wenn man nicht die IDE
von Adobe verwendet, geht man folgendermassen vor:

Man definiert die Movies und die Resourcen in einer XML-Datei und lässt
das durch swfmill. Daraus entsteht ein SWF ohne jeglichen AS-Code. Nun
nimmt man MTASC, gibt ihm diese SWF-Datei und die AS-Sourcen.
MTASC "verwebt" das ganze nun und das Ergebnis ist ein vollständiges
SWF, wie es auch die IDE von Adobe produzieren würde.

Viele Flash-Entwickler, die eigentlich eine Lizenz für die "Original"-
IDE haben, bevorzugen scheinbar diese Arbeitsweise (AMES, FAME, FAMES
etc; FAMES = Flashout+ASDT+MTASC+Eclipse+swfmill). Ich persönlich lasse
Flashout aus, ich bevorzuge also AMES.

Gruss,
Raffi
--
Come to think of it, there are already a million monkeys on a million
typewriters, and Usenet is *nothing* like Shakespeare!

***@raffael.ch · PGP Key 5D1FF5F4 · http://www.raffael.ch/
Uwe Seimet
2007-10-23 06:14:18 UTC
Permalink
Post by Raffael Herzog
MTASC (Der ActionScript-Compiler, der für die OSS-Tools meist verwendet
wird) kompiliert nur ActionScript. Zu einem fertigen SWF gehört
Hast du statt MTASC mal haXe verwendet? MTASC wird ja offenbar nicht
mehr weiter entwickelt und unterstützt auch nur ActionScript.
ActionScript 3 ist da erheblich angenehmer, gerade wenn man Java gewohnt
ist. Leider ist haXe nicht in allen Punkten kompatibel zu ActionScript 3.
--
-----------------------------------------------------------------------
Dr. Uwe Seimet http://www.linkbylink.net/
Raffael Herzog
2007-10-23 10:27:11 UTC
Permalink
Post by Uwe Seimet
Hast du statt MTASC mal haXe verwendet? MTASC wird ja offenbar nicht
mehr weiter entwickelt und unterstützt auch nur ActionScript.
ActionScript 3 ist da erheblich angenehmer, gerade wenn man Java
gewohnt ist. Leider ist haXe nicht in allen Punkten kompatibel zu
ActionScript 3.
Nein, habe ich nicht. Wie man ASDT zur Zusammenarbeit mit haXe bewegen
kann, müsste ich mir mal anschauen. Zudem war die Zielplattform für
mein damaliges Flash-Projekt (das momentan auf Eis liegt) klar Wii,
also bin ich auf Flash 7 beschränkt und muss auf die Vorzüge von AS3
verzichten (oder habe ich da etwas verpasst?). Diesbezüglich ist es mir
also egal, wenn ein Tool nicht mehr weiterentwickelt wird ...

Dennoch, interessehalber: Wie sieht denn das aus? ASDT ist ja ein sehr
schöner Ansatz, ich finde, mit AMES entwickelt es sich wunderbar. Wenn
MTASC nun auch tot ist, gibt es da irgendwelche Pläne, eine komplette
Flash-IDE auf OSS-Basis auf die Beine zu stellen bzw. die stehende
(ASDT) nachzuführen?

Gruss,
Raffi
--
Come to think of it, there are already a million monkeys on a million
typewriters, and Usenet is *nothing* like Shakespeare!

***@raffael.ch · PGP Key 5D1FF5F4 · http://www.raffael.ch/
Stefan Matthias Aust
2007-10-23 14:05:00 UTC
Permalink
Post by Raffael Herzog
kann, müsste ich mir mal anschauen. Zudem war die Zielplattform für
mein damaliges Flash-Projekt (das momentan auf Eis liegt) klar Wii,
also bin ich auf Flash 7 beschränkt und muss auf die Vorzüge von AS3
verzichten (oder habe ich da etwas verpasst?). Diesbezüglich ist es mir
Die Flash-VM in der Wii ist AFAIK Flash 7 kompatibel. Reicht gerade, um
Youtube-Videos zu gucken... :)
Post by Raffael Herzog
Dennoch, interessehalber: Wie sieht denn das aus? ASDT ist ja ein sehr
schöner Ansatz, ich finde, mit AMES entwickelt es sich wunderbar. Wenn
MTASC nun auch tot ist, gibt es da irgendwelche Pläne, eine komplette
Flash-IDE auf OSS-Basis auf die Beine zu stellen bzw. die stehende
(ASDT) nachzuführen?
Zwar ist der Autor von MTASC der selbe wie von HaXe, doch letztes ist
doch eine komplett eigene Sprache und nicht ein Compiler für
ActionScript, oder? Gibt übrigens ein Eclipse-Plugin für HaXe. Aber
somit ist das doch gar kein Ersatz.

Bei MTASC ist mir neulich aufgefallen, dass der Compiler mutwillig
strikter ist als der von Flash CS3 selbst, was zwar prinzipiell eine
gute Idee, in diesem Fall aber total lästig war, weil jetzt
existierender Code nicht kompilierte. Ich hatte FlashDevelop
ausprobiert, so eine kleine in .NET geschrieber IDE, die Scintilla als
Editor benutzt. Da ist auch MTASC mit bei.

Ich glaube, für AS1 und AS2 ist der Bedarf für eine Progammierer-IDE
nicht so hoch, da hier die Sprache doch mehr im Hintergrund und
traditionelle Flash-Grafik mehr im Vordergrund steht. Erst AS3 plus Flex
scheint mir auf Software-Entwickler abzuzielen und hier bietet Adobe den
Flexbuilder auf Eclipse-Basis und IDEA hat ebenfalls Support.

Würde es eine offizielle Grammatik von AS3 geben (ich habe keine
gefunden), könnte man daraus wahrscheinlich recht einfach auch einen
Editor für Netbeans/Schliemann bauen. Java-IDEs bieten sich als
Grundlage an, da der AS3-Compiler eh eine Java-Anwendung ist.

Aber Adobe ist wahrscheinlich der Meinung, es braucht keine OSS-IDE, man
kann doch den Flexbuilder kaufen :) Inzwischen gibt's sogar 'ne
Linux-Version.
--
Stefan Matthias Aust
Raffael Herzog
2007-10-23 21:02:08 UTC
Permalink
Post by Stefan Matthias Aust
Die Flash-VM in der Wii ist AFAIK Flash 7 kompatibel.
Dem ist leider so, aber Opera Software kann hier nichts dagegen machen.
Das Flash-SDK gibt es nur bis Version 7, ab da darf nur noch Adobe
Flash-Player bauen. "Alternative" Plattformen wie Wii kommen daher
nicht über Flash 7 hinaus, es sei denn, Adobe würde sich dazu herab
lassen, den Player auf Wii zu portieren.
Post by Stefan Matthias Aust
Reicht gerade,
um Youtube-Videos zu gucken... :)
Yep, und es macht Spass, sich die Nintendo-Pressekonferenz von der GDC
via YouTube im Sofa auf fullscreen am TV zu gucken. ;) Am Computer
hätte ich mir das nicht angetan, aber so ...
Post by Stefan Matthias Aust
Bei MTASC ist mir neulich aufgefallen, dass der Compiler mutwillig
strikter ist als der von Flash CS3 selbst, was zwar prinzipiell eine
gute Idee, in diesem Fall aber total lästig war, weil jetzt
existierender Code nicht kompilierte.
AFAIK kann man das aber abschalten. Da ich von Scratch begonnen habe,
habe ich es natürlich eingeschaltet.
Post by Stefan Matthias Aust
Ich glaube, für AS1 und AS2 ist der Bedarf für eine Progammierer-IDE
nicht so hoch, da hier die Sprache doch mehr im Hintergrund und
traditionelle Flash-Grafik mehr im Vordergrund steht.
Schon richtig, aber gerade wenn man noch etwas wackelig auf den Beinen
ist, ist so eine kleine Hilfe schon praktisch. Ausserdem wüsste ich
nicht, wie ich ohne IDE das Log einsehen kann, auf ein Ctrl-S hin
gleich die gesamte Build-Kette zu durchlaufen und das neue SWF sofort
im Flash-Preview zu sehen ist auch sehr praktisch. So gesehen: Doch, es
braucht auch dafür eine IDE.

Die Idee war es, einen kleinen Sound-Player für Wii zu machen, um dann
vom Server (im LAN) her 16bit-Stereo-PCM, verpackt in on-the-fly
erzeugtes FLV, darauf zu streamen und eine hübsche Webapp darum zu
bauen => CD-Sammlung via Wii im Wohnzimmer, dabei komplette Format-
Freiheit. Ich bevorzuge Vorbis, manchmal FLAC, und Shoutcast-Streams
gleich mit auf diese Weise bookmarken und hören zu können wäre auch
ganz nett -- so kam ich auf die Idee, die Decodierung auf dem Server zu
machen und, da es ja im LAN ist, einfach PCM (und damit verlustfrei) zu
streamen.

Das ist vor allem Programmierung, denn aufgrund gewisser Eigenheiten von
Flash ist das nicht so einfach, wie es klingt: Flash gibt den Speicher
für bereits ausgegebene Musik nicht (immer) frei, d.h. nach zwei Minu-
ten geht Wii der Speicher aus (lustigerweise passiert das bei YouTube
nicht, da habe ich schon 1-stündige Videos geschaut). Das ist auch auf
dem PC so, es dauert einfach viel länger. Man muss daher alle 1 - 1.5
Minuten einen neuen Stream aufnehmen, die beiden Streams schön synchro-
nisieren und dann vom einen auf den anderen überblenden, damit man den
ersten wieder frei geben kann und so den Speicher zurück kriegt.

Dieses Playerchen noch hübsch zu präsentieren ist nur noch ein Zücker-
chen, das Out-of-Memory zu umgehen ist der eigentliche grosse Brocken.
Für Sound-Objekte gibt's da Vorlagen, aber die weigern sich, PCM vom
Netz zu holen, die funktionieren nur mit MP3. FLV unterstützt interes-
santerweise PCM-Audio-Spuren, aber dafür wird die Sache etwas kompli-
zierter und ich habe keine Vorlage mehr.
Post by Stefan Matthias Aust
Aber Adobe ist wahrscheinlich der Meinung, es braucht keine OSS-IDE,
man kann doch den Flexbuilder kaufen :) Inzwischen gibt's sogar 'ne
Linux-Version.
Adobe mag OSS generell nicht, habe ich das Gefühl, zumindest sind sie
sehr eigenbrötlerisch (siehe Verbot, einen eigenen Player zu bauen:
Wenn man sich die Spezifikationen herunterlädt, verpflichtet man sich,
nur Dateien zu erzeugen, sie aber nicht abzuspielen, das ist verbo-
ten). :( Ich bin ehrlich gesagt erstaunt, dass Red5 noch nicht abge-
mahnt wurde, Adobe könnte das Projekt AFAIK ohne weiteres abschiessen,
wann immer sie wollen.

Gruss,
Raffi
--
Come to think of it, there are already a million monkeys on a million
typewriters, and Usenet is *nothing* like Shakespeare!

***@raffael.ch · PGP Key 5D1FF5F4 · http://www.raffael.ch/
Stefan Matthias Aust
2007-10-24 08:20:48 UTC
Permalink
Post by Raffael Herzog
Post by Stefan Matthias Aust
Die Flash-VM in der Wii ist AFAIK Flash 7 kompatibel.
Dem ist leider so, aber Opera Software kann hier nichts dagegen machen.
Das Flash-SDK gibt es nur bis Version 7, ab da darf nur noch Adobe
Flash-Player bauen.
Adobe sagt, Device-Hersteller sollen Flash Lite 3 lizensieren, das ist
so ca. Flash 8 kompatibel, wäre also ein Fortschritt, weil da neben dem
Sorenson-Codec auch On2VP6 dabei ist, wenn ich richtig informiert bin.
Post by Raffael Herzog
Yep, und es macht Spass, sich die Nintendo-Pressekonferenz von der GDC
via YouTube im Sofa auf fullscreen am TV zu gucken. ;) Am Computer
hätte ich mir das nicht angetan, aber so ...
Mit der Apple-TV-Box (ungefähr gleich teuer, kann man aber nicht mit
spielen, dumm, dass es in Deutschland keinen Content gibt) wäre das auch
gegangen, die zeigen youtube-Videos mit h.264 codec an :)
Post by Raffael Herzog
Das ist vor allem Programmierung, denn aufgrund gewisser Eigenheiten von
Flash ist das nicht so einfach, wie es klingt: Flash gibt den Speicher
für bereits ausgegebene Musik nicht (immer) frei, d.h. nach zwei Minu-
ten geht Wii der Speicher aus (lustigerweise passiert das bei YouTube
nicht, da habe ich schon 1-stündige Videos geschaut). Das ist auch auf
Nanu.
Post by Raffael Herzog
dem PC so, es dauert einfach viel länger. Man muss daher alle 1 - 1.5
Minuten einen neuen Stream aufnehmen, die beiden Streams schön synchro-
nisieren und dann vom einen auf den anderen überblenden, damit man den
ersten wieder frei geben kann und so den Speicher zurück kriegt.
Wäre nicht progressive download (so wie das z.B. Youtube macht)
einfacher als Streaming?
Post by Raffael Herzog
Adobe mag OSS generell nicht, habe ich das Gefühl, zumindest sind sie
Naja, Flex soll ja opensource werden. Die Taramin-VM ist es schon. Was
sie verteidigen, ist ihr Player. Macht Microsoft aber sicherlich genauso.
Post by Raffael Herzog
ten). :( Ich bin ehrlich gesagt erstaunt, dass Red5 noch nicht abge-
mahnt wurde, Adobe könnte das Projekt AFAIK ohne weiteres abschiessen,
wann immer sie wollen.
Warum sollten sie das tun, wenn's ihnen nutzt. Zur Zeit machen solche
Projekte die Flash-Plattform attraktiver. Und ich denke nicht, dass
Adobe dadurch jetzt viel Geld verliert.

Wenn du in großem Umfang streamen willst, kommst du um CDN-Angebote wie
z.B. Akamai nicht herum und da hat dann Adobe wieder das Geld für ihren
Streaming-Server...
--
Stefan Matthias Aust
Lesen Sie weiter auf narkive:
Loading...