Weiterentwicklung von JavaScript orientiert sich an Python

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Auf der Jython-Webseite scheints ja zu gehen ;)

Hmm... Wäre ja ganz schön :D Python in der Webseite...

Weil ich hab mir Jython noch net genauer angeschaut. Aber es ist doch von der Syntax doch seeehhhr stark wie Python (wäre auch sclimm wenn net) :D

Fänd ich cewl..

Nur überlege ich noch im Allgemeinen, wofür diese Applets so überall eingesetzt werden

MfG EnTeQuAk
BlackJack

EnTeQuAk hat geschrieben:Weil ich hab mir Jython noch net genauer angeschaut. Aber es ist doch von der Syntax doch seeehhhr stark wie Python (wäre auch sclimm wenn net) :D
Jython *ist* Python.
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

wenn javascript die features von python haette, wuerd ich von python zu js wechseln.

js hat gescheite lambdas, du kannst damit eigene flow-konstrukte basteln, z.b. koenntest du das while neu erfinden:

Code: Alles auswählen

while = (condition, block){
    loop = {
        if (condition()) {
            block()
            loop()
        }
    }

    loop()
}

a = 0
while({a < 10}, {
    print a**2
    a += 1
})
(dies setzt natuerlich tail call recursion voraus)
an diesem code ist die *benutzung* des while interssant. du kannst einfach mal so bloecke erstellen und nutzen. das kannst du mit nested functions wie in python nicht so elegant nachbauen.
...meh...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Man kann über ActiveScripting durchaus Python im Browser nutzen. Zudem ist in der Firefox-Roadmap eine Python-Integration eingetragen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@cracki

Wenn Dir so etwas gefällt, dann solltest Du mal Ruby oder eine funktionale Programmiersprache anschauen.

Das Beispiel ist nicht wirklich überzeugend, da es ``while`` in beiden Sprachen schon gibt. Also ist die Frage, welche Kontrollflusstrukturen man üblicherweise so "erfinden" muss, die sich nicht auch anders lösen lassen.
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

zugegeben, *bekanntes* fuer demozwecke neu zu erfinden beeindruckt nicht. aber *unbekanntes* kapiert dann wieder keiner. ich weiss doch wie das ablaeuft.

aber was solls.

ein paar funktionale sprachen hab ich mir mal angesehen, einige davon (scheme) genauer.
ruby *hat* nette features, aber man schmeckt den perl-hintergrund sehr raus. ruby wird aber immer populaerer, also wuerde ich durchaus mehr in ruby investieren als in python, vor allem was webgefrickel angeht.
ruby on rails vs kein klarer gewinner im python lager... ror hat praktisch sturmfreie bude, weil sich die python frameworks gegenseitig die anhaenger streitig machen.

*meine* perfekte sprache gibts einfach nicht. schoen waers aber, wenn es eine sprache gaebe, die man sich syntaktisch und semantisch zurechtbiegen koennte... da faellt mir spontan nur die lispfamilie mit reader macros ein...

steve yegge hat die idee geaeussert, dass man die syntax einer sprache skinnen koennen sollte: irgendwo wird gesagt, in welchem "skin" der vorliegende code geschrieben wurde, aus skin-info und gegebenem quelltext macht dann der parser immer den gleichen abstrakten syntaxbaum.
und wenn man aus ASTs dann wieder in beliebige skins zuruecktransformieren koennte (ohne uebliche artefakte der transkodierung wie man sie beispielsweise in pyrex-c code findet), das waer doch was.

( edit doch lieber als neuer post... )
Zuletzt geändert von cracki am Mittwoch 3. Januar 2007, 14:21, insgesamt 2-mal geändert.
...meh...
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

cracki hat geschrieben:zugegeben, *bekanntes* fuer demozwecke neu zu erfinden beeindruckt nicht. aber *unbekanntes* kapiert dann wieder keiner. ich weiss doch wie das ablaeuft.
Hehe, wie wahr, wie wahr ^^
schoen waers aber, wenn es eine sprache gaebe, die man sich syntaktisch und semantisch zurechtbiegen koennte
Hmm, was wäre der Sinn dabei? Ich sehe nicht wirklich einen Nutzen dabei die "Freiheit" zu haben sich eine Sprache X Syntaktisch und semantisch so anzupassen wie man das haben will. Vom Overhead mal nicht angefangen.
steve yegge hat die idee geaeussert, dass man die syntax einer sprache skinnen koennen sollte: irgendwo wird gesagt, in welchem "skin" der vorliegende code geschrieben wurde, aus skin-info und gegebenem quelltext macht dann der parser immer den gleichen abstrakten syntaxbaum.
und wenn man aus ASTs dann wieder in beliebige skins zuruecktransformieren koennte (ohne uebliche artefakte der transkodierung wie man sie beispielsweise in pyrex-c code findet), das waer doch was.
Kling im ersten Moment interessant, aber hier die gleiche frage und dann auch mit Berücksichtigung des Overheads. Ich glaube sowas würde sehr ausarten oder nicht? Wie soll man sich dann noch als Programmierer untereinander "verstehen" wenn jeder die Sprache X so definiert wie er sie haben will? 0o Schließlich fangen wir doch nciht auch alle an uns die Deutsche Sprache so Semantisch umzuformen wie es uns passt, mit dem Risiko das uns keiner mehr versteht ;)

lg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cracki hat geschrieben:ruby *hat* nette features, aber man schmeckt den perl-hintergrund sehr raus. ruby wird aber immer populaerer, also wuerde ich durchaus mehr in ruby investieren als in python, vor allem was webgefrickel angeht.
Nein. PHP ist für "Webgefrickel" wesentlich populärer als RoR, ebenso der ASP-Kram. Dennoch würde ich mich nicht primär nach der Popularität richten, sondern danach, was es mir erlaubt, mein Ziel am besten zu erreichen. An dieser Stelle scheint mir Pythons Ansatz besser zu gefallen, also nehme ich ein Python-Framework. So einfach ist das.
cracki hat geschrieben:ruby on rails vs kein klarer gewinner im python lager... ror hat praktisch sturmfreie bude, weil sich die python frameworks gegenseitig die anhaenger streitig machen.
Wir wollen mal nicht vergessen, dass RoR mit Nitro und Basecamp durchaus auch Konkurrenz hat. Wenn ich Ruby einsetzen müsste, dann würde ich durchaus mal darüber Nachdenken, eine Rails-Alternative zu nutzen.
cracki hat geschrieben:steve yegge hat die idee geaeussert, dass man die syntax einer sprache skinnen koennen sollte: irgendwo wird gesagt, in welchem "skin" der vorliegende code geschrieben wurde, aus skin-info und gegebenem quelltext macht dann der parser immer den gleichen abstrakten syntaxbaum.
Mehr oder weniger soll sowas ja mit Parrot erreicht werden.
cracki hat geschrieben:und wenn man aus ASTs dann wieder in beliebige skins zuruecktransformieren koennte (ohne uebliche artefakte der transkodierung wie man sie beispielsweise in pyrex-c code findet), das waer doch was.
Ich sehe grade den Sinn des zurücktransformierens nicht (also einen wirklichen sinn, nicht einfach nur weil es geht, was natürlich ein Grund ist). Wenn ich eine Funktion habe, die ich in meiner Sprache wie eine ganz normale Funktion agiert, dann kann es mir egal sein, wie diese Funktion letztendlich implementiert ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

parrot ist doch ne vm, keine "sprache" im herkoemmlichen sinne.

mit skin meine ich wie der code aussieht. mit AST meine ich die semantik des codes. der gleiche code kann in php so aussehen, in js anders und in python wieder ganz anders. so verstaendlich?

sape: es gaebe bekannte "skins", die wie dialekte gehandhabt werden. du hast dann eben eine maechtige universalsprache, fuer die du dann eben nur skins je nach anwendung benutzt. eine datei wuerdest du dann mit

Code: Alles auswählen

#!supersprache -skin schiessmichtot
einleiten


muss noch was loswerden. wenn man in einer sprache ausdruecken koennte, dass die argumente vor dem call nicht evaluiert werden sollen, sondern als callable oder AST, dann koennte man sowas machen:

Code: Alles auswählen

# macro() nimmt ne funktion, macht ein macro draus
while = macro( (condition, block) {
    loop = {
        if (condition()) {
            block()
            loop()
        }
    }
    loop()
})

a = 0
while(a < 10,
    print a**2
    a += 1
)
das bringt natuerlich wieder ganz andere probleme mit sich (bloecke muessten dann expressions sein, usw), ich weiss. waere aber ne ueberlegung wert, hm?
Zuletzt geändert von cracki am Mittwoch 3. Januar 2007, 14:26, insgesamt 1-mal geändert.
...meh...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sape hat geschrieben:Hmm, was wäre der Sinn dabei? Ich sehe nicht wirklich einen Nutzen dabei die "Freiheit" zu haben sich eine Sprache X Syntaktisch und semantisch so anzupassen wie man das haben will. Vom Overhead mal nicht angefangen.
Solche Sprachen gibt es schon, wie cracki sagte bietet die Lisp-Familie eben das. Ruby macht es teilweise ebenso, eben auch in Rails. Dort werden Ruby-DSLs verwendet, um gewisse DInge einfacher zu machen.
sape hat geschrieben:Kling im ersten Moment interessant, aber hier die gleiche frage und dann auch mit Berücksichtigung des Overheads. Ich glaube sowas würde sehr ausarten oder nicht? Wie soll man sich dann noch als Programmierer untereinander "verstehen" wenn jeder die Sprache X so definiert wie er sie haben will? 0o Schließlich fangen wir doch nciht auch alle an uns die Deutsche Sprache so Semantisch umzuformen wie es uns passt, mit dem Risiko das uns keiner mehr versteht ;)
In Ruby kann man besipeilsweise eingebaute Klassen bearbeiten und zum Beispiel die Addition als Subtraktion definieren, was ziemlich viel Code kaputt macht. Das ist eben ein zweischneidiges Schwert. Man kann vieles Kaputtmachen, man kann aber auch ziemlich elegante Dinge damit machen. Wenn man eine Funktion definiert, die etwas mit Strings macht, dann ist es nur logisch, dass diese Funktion Teil der Klasse String wird. Etc, etc.

Wenn wir uns alle so über Overhead sorgen würden, dann wären viele Dinge nicht existieren. Zum Beispiel Attribut-Lookup zur Laufzeit: Bringt viel Flexibilität und kürzt den Quellcode, aber produziert Overhead.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cracki hat geschrieben:parrot ist doch ne vm, keine "sprache" im herkoemmlichen sinne.
Natürlich. Aber wenn du sie als Sprache ansiehst (okay, wenn du ihren Bytecode an Sprache ansiehst) und dann die Programmiersprachen wie Ruby, Perl oder Python als Skins, dann hast du nachezu das was du haben wolltest. Bis auf das Rücktransformieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

ich sags besser nochmal:

skins sind die syntax, die semantik bleibt unangetastet.

beispiel fuer "php" und "c" skins:

Code: Alles auswählen

for ($i = 0; $i < 10; ++$i)
    echo $i;

Code: Alles auswählen

int i; for(i = 0; i < 10; ++i)
    printf("%d", i);
natuerlich sorgt das skin auch fuer die offensichtlichen transformationen (echo vs printf, variablen instantiieren).
...meh...
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Leonidas hat geschrieben:Wir wollen mal nicht vergessen, dass RoR mit Nitro und Basecamp durchaus auch Konkurrenz hat.
Basecamp ist ein Produkt von 37signals, bei dessen Entwicklung RoR entstanden und extrahiert worden ist.

Das quasi-Monopol von Rails verschafft Ruby zwar einen Hype, aber zum Einen hat ersteres auch Nachteile, zum Anderen hat Ruby noch lange nicht die Anerkennung für den Produktionseinsatz, die aber Python mittlerweile in ausreichendem Maße erhalten zu haben scheint. Vor einigen Wochen oder Monaten hatte ich darüber gelesen, wenn ich mich nicht irre sogar bei Joel (richtig: Language Wars).

Und da Ruby auch noch relativ langsam ist und eine leichte Antipathie gegenüber Unicode zu haben scheint, steht Rails (momentan) nicht gerade auf dem besten Fundament.
Zuletzt geändert von Y0Gi am Mittwoch 3. Januar 2007, 14:40, insgesamt 1-mal geändert.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Leonidas hat geschrieben:
cracki hat geschrieben:parrot ist doch ne vm, keine "sprache" im herkoemmlichen sinne.
Natürlich. Aber wenn du sie als Sprache ansiehst (okay, wenn du ihren Bytecode an Sprache ansiehst) und dann die Programmiersprachen wie Ruby, Perl oder Python als Skins, dann hast du nachezu das was du haben wolltest. Bis auf das Rücktransformieren.
Hmm, bin nicht sicher ob ich das verstehe. Du meinst also so einen Superinterpreter der "alle" Sprachen (die als Skins vorliegen) interpretieren kann und auch ein Mischmasch aus allen Sprachen in einem sourcecode vorkommen kann? :shock:
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

cracki hat geschrieben:skins sind die syntax, die semantik bleibt unangetastet.

beispiel fuer "php" und "c" skins:

Code: Alles auswählen

for ($i = 0; $i < 10; ++$i)
    echo $i;

Code: Alles auswählen

int i; for(i = 0; i < 10; ++i)
    printf("%d", i);
Aber wozu das ganze, wenn man mal die optimale Form gefunden hat??? IMHO sind weder php, oder die c Variante wirklich schön gelöst.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

jens hat geschrieben:[...]IMHO sind weder php, oder die c Variante wirklich schön gelöst.
Finde ich auch. Am schönsten sieht es immer noch so aus:

Code: Alles auswählen

for i in xrange(10):
    print i
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich habe cracki wohl falsch verstanden. Aber wenn die Semantik immer gleich bleiben soll, dann finde ich das eigentlich ziemlich uninteressant.
sape hat geschrieben:Hmm, bin nicht sicher ob ich das verstehe. Du meinst also so einen Superinterpreter der "alle" Sprachen (die als Skins vorliegen) interpretieren kann und auch ein Mischmasch aus allen Sprachen in einem sourcecode vorkommen kann? :shock:
Was meinst du? In einer Datei? Nein, natürlich nicht. Wäre zwar möglich, aber sehr unangenehm zu nutzen.
Aber sagen wir mal, ein Modul in Ruby zum implementieren und ein anderes In Python und dann von Python auf die Ruby-Klasse zugreifen, als wäre sie in Python geschrieben ist schon eher möglich. Macht IronPython in .NET mehr oder weniger auch so, auch wenn dort einige Einschränkungen sind zum Beispiel wenn es um Overloading geht. Jedenfalls wird der Python-Code von IronPython in IL kompiliert, und kann nun von jeder .NET-Sprache ganz normal verwendet werden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

sape:
Er meint quasi, dass aus verschiedenen Programmiersprachen der gleiche Bytecode erzeugt wird, so dass man die Programmiersprache selbst wählen kann, aber zum gleichen Ergebnis kommt.

Letztlich macht es IMHO aber mehr Sinn, direkt eine neue Sprache zu erschaffen, die eine saubere Syntax mit den Sprachfeatures der unterstützten Sprachen vereint, da letztere ja ohnehin implementiert werden müssen. Von den unterschiedlichen Denkweisen (ob forciert, ermöglicht oder zu bevorzugen) beim Programmieren noch abgesehen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sape hat geschrieben:Am schönsten sieht es immer noch so aus:

Code: Alles auswählen

for i in xrange(10):
    print i
Nein, ich finde

Code: Alles auswählen

for i in 0..9:
    puts(i)
end
bis auf das 'end' klarer. Aber in Python gibt es keinen Syntactic Sugar für Range-Datentypen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

puts ist eine verdammte Altlast, die die Lesbarkeit vermindert. Und hast du nicht erst kürzlich gegen Altlasten gewettert?

Aber ja, die (aus Perl bekannten?) Ranges über a..z und dergleichen anstelle einer Funktion zu erzeugen ist schon angenehm, kompakt und intuitiv, hätte ich manchmal auch gerne.
Antworten