python code radikal verkuerzen

Du hast eine Idee für ein Projekt?
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

wie wärs mit einer vereinfachung vom python-syntax:
bei einer argumenten-uebergabe keine kommas, kein ":" nach if, for und while, wie in ruby wenn nicht noetig "send "halo"" statt "send("halo")", wenn nich noetig bei bedingungsabfragen nur einen "=" statt zwei.
eine funktion wird ohne "()" ausgeführt, wenn man den funktions-object will, einfach zb einen "?" hinten ransetzen....

uvm


der interpreter wuerde in python selbst geschrieben sein und muesste nur python-scripts parsen und ausführen


klar - just vor fun
cp != mv
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

:D kann mans auch übertreiben? :D

Mir gefällt die größe der Scripte, die ich schreibe...


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

Costi hat geschrieben:wie wärs mit einer vereinfachung vom python-syntax:
Bei der du die Python-Syntax nicht mehr eindeutig machst, sondern mehrdeutig - wie bei Ruby, wo man nicht immer sofort sieht, was passiert, da die Syntax nicht genug Informationen hergibt, um dies auf den ersten Blick zu erkennen. Frag blackbird, der gibt dir gerne ein Ruby-Beispiel, bei welchem es nicht möglich ist, ohne weiteres abzuschätzen, was passieren wird.
Costi hat geschrieben:bei einer argumenten-uebergabe keine kommas, kein ":" nach if, for und while,
Guck dir doch mal einen Lisp-Dialekt wie Common Lisp oder Scheme an.
Costi hat geschrieben:wie in ruby wenn nicht noetig "send "halo"" statt "send("halo")"
Eben, und wann ist es nötig. Das ist gar nicht so einfach wie man denkt. Ich fand es schon in Visual Basic so ätzend mit den Funktionsklammern.
Costi hat geschrieben:eine funktion wird ohne "()" ausgeführt, wenn man den funktions-object will, einfach zb einen "?" hinten ransetzen....
Und wenn man die Globale Variante will dann setzt man ein $ davor, die Klassenglobale ein @, für die Stringversion ein $ dahinter usw. Tolle Ideen die Perl-Code so unlesbar machen, Basic-Strings so seltsam aussehen lassen usw.
Costi hat geschrieben:der interpreter wuerde in python selbst geschrieben sein und muesste nur python-scripts parsen und ausführen
Und wie würdest du das implementieren? Als Python-Präprozessor oder mit Hilfe von PyPy einen AST aus deinem Quellcode machen, der vom richtigen Python-Interpreter ausgeführt wird?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Costi hat geschrieben:wie wärs mit einer vereinfachung vom python-syntax:
bei einer argumenten-uebergabe keine kommas, kein ":" nach if, for und while, wie in ruby wenn nicht noetig "send "halo"" statt "send("halo")", wenn nich noetig bei bedingungsabfragen nur einen "=" statt zwei.
eine funktion wird ohne "()" ausgeführt, wenn man den funktions-object will, einfach zb einen "?" hinten ransetzen....
D'oh. Nimmt mir einfach meine First-Class Functions weg. Und meinem Editor das auto indent. darn...
TUFKAB – the user formerly known as blackbird
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Radikal... meines Erachtens nach würde das kaum 3,742% Code einsparen, und um was für einen Preis?

[76,2731% aller Prozentangaben sind viel zu genau angegeben]
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

*diesen beitrag ignoriren*
(warte erstmal auf mehr antworten)
cp != mv
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

Ich will Python programmieren! Da mir aber die Syntax nicht gefällt, muss mir irgendjemand das Python so anpassen, dass es sich wie BASIC anfühlt. Also, was ist??? Los jetzt!

:P :lol: :twisted:

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Python ist nicht Ruby. Bei Python gilt: "explicit is better than implicit". Noch Fragen, Kienzle?


Aber wie wäre es, wenn man im Gegenzug bei Ruby einfach das 'end' weglassen und dafür mit Einrückungen Blöcke definieren würde?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Y0Gi hat geschrieben:Aber wie wäre es, wenn man im Gegenzug bei Ruby einfach das 'end' weglassen und dafür mit Einrückungen Blöcke definieren würde?
RCR 299 und RCR 300 wollen genau das. Und sicher noch etliche andere.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

* Beatnik (Wörter stehen für ihre Scrabble-Werte)
* Befunge (zweidimensionale Sprache)
* Brainfuck (winziger Compiler)
* Brainfuck2D (Brainfuck auf die Ebene projiziert)
* Chef (Code sieht aus wie ein Kochrezept)
* Cow (Code besteht aus Kuhlauten (Moo) )
* Emoticon (hat Emoticons als Befehle)
* INTERCAL (sollte das Programmieren erschweren)
* Iota and Jot (hat nur 2 Befehle)
* Malbolge (erklärtermaßen schlimmste Programmiersprache)
* Ook! (Syntax besteht einzig und allein aus dem Wort „Ook“, sowie den Zeichen: .?!)
* Piet (Programmcode besteht aus Bildern)
* Shakespeare (Code sieht aus wie ein Stück von Shakespeare)
* Taxi (Wegbeschreibung an einen Taxifahrer)
* Unlambda (Minimale funktionale Programmiersprache)
* Whitespace (Code besteht nur aus nichtdruckbaren Zeichen)


haaaaaa?!
naaaaa!?

hat das irgendeinen sinn?

und genau so geht dat hier auch, es ist ziemlich egal ob das irgendwelche python-philosfien bricht oder einfach nur =//&=$ ist
ich glaube man koennte python um vieeeeel, mehr als "3,742%" kuerzen, mir fallen hier voll die genaialen sachen ein, mindestens 30% sage ich!

edit:
RCR 299 und RCR 300 wollen genau das. Und sicher noch etliche andere.

ich auch, das wuerde zu ruby einfach viel besser passen
cp != mv
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Costi hat geschrieben:* Beatnik (Wörter stehen für ihre Scrabble-Werte)
* Befunge (zweidimensionale Sprache)
* Brainfuck (winziger Compiler)
* Brainfuck2D (Brainfuck auf die Ebene projiziert)
* Chef (Code sieht aus wie ein Kochrezept)
* Cow (Code besteht aus Kuhlauten (Moo) )
* Emoticon (hat Emoticons als Befehle)
* INTERCAL (sollte das Programmieren erschweren)
* Iota and Jot (hat nur 2 Befehle)
* Malbolge (erklärtermaßen schlimmste Programmiersprache)
* Ook! (Syntax besteht einzig und allein aus dem Wort „Ook“, sowie den Zeichen: .?!)
* Piet (Programmcode besteht aus Bildern)
* Shakespeare (Code sieht aus wie ein Stück von Shakespeare)
* Taxi (Wegbeschreibung an einen Taxifahrer)
* Unlambda (Minimale funktionale Programmiersprache)
* Whitespace (Code besteht nur aus nichtdruckbaren Zeichen)
Und? Willst du eine neue esoterische Programmiersprache erfinden oder etwas mit dem man vernünftig arbeiten kann?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Costi hat geschrieben:hat das irgendeinen sinn?
Ähnlich viel, wie den Python-Verschnitt, den du dir da gerade aus den Fingern saugst. Ich habe nichts gegen das Design von neuen Sprachen, das hat murphy mal mit LOVE gemacht, aber das muss schon Plan haben. Bei dir sind das alles einfach nur in den Raum geworfene Ideen.
Costi hat geschrieben:und genau so geht dat hier auch, es ist ziemlich egal ob das irgendwelche python-philosfien bricht oder einfach nur =//&=$ ist
Dann solltest du mal lernen das Programmiersprachen eben für bestimmte Philosophien stehen. Die Philosophie von Lisp ist anders als die von Python, die von Ruby anders als die von Visual Basic etc.
Costi hat geschrieben:ich glaube man koennte python um vieeeeel, mehr als "3,742%" kuerzen, mir fallen hier voll die genaialen sachen ein, mindestens 30% sage ich!
Belege? Du Willst nur ein paar Sonderzeichen kürzen, die der lesbarkeit dienen. Wenn ich eine Sprache auf der Basis von python entwickeln würde, dann würde sie vermutlich länger sein - statt der Pie-Decorator-Syntax würde ich eher J2 verwenden und sonst ein paar Klinigkeiten. Aber da es mich nie besonders gestört hat, habe ich keinen Python-Dialekt gemacht, weil sich die Mühe nicht lohnt.
Costi hat geschrieben:ich auch, das wuerde zu ruby einfach viel besser passen
Kannst ja eine DSL machen, das ist in der Ruby-Welt recht populär.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Y0Gi hat geschrieben:Aber wie wäre es, wenn man im Gegenzug bei Ruby einfach das 'end' weglassen und dafür mit Einrückungen Blöcke definieren würde?
Heeh! :wink: Jetzt kommen wir der Sache schon näher. 8) Genau so machen wir's.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Leonidas hat geschrieben:
Y0Gi hat geschrieben:Aber wie wäre es, wenn man im Gegenzug bei Ruby einfach das 'end' weglassen und dafür mit Einrückungen Blöcke definieren würde?
RCR 299 und RCR 300 wollen genau das. Und sicher noch etliche andere.
Hm, da wird Ruby mir doch gleich deutlich sympatischer. Schön, dass auch einige Rubyisten erkannt haben, dass die angesprochenen Dinge mehr als "einfach nur blöd" sind.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Costi hat geschrieben:und genau so geht dat hier auch, es ist ziemlich egal ob das irgendwelche python-philosfien bricht oder einfach nur =//&=$ ist
ich glaube man koennte python um vieeeeel, mehr als "3,742%" kuerzen, mir fallen hier voll die genaialen sachen ein, mindestens 30% sage ich!
Dann guck dir mal die Lösungen vom pycontest an. Da hast du radikal gekürzte, funktionfähige Programme. Die Lesbarkeit und verständlichkeit kann man natürlich vergessen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Costi hat geschrieben:wie wärs mit einer vereinfachung vom python-syntax:
So ziemlich alles was Du vorschlägst macht die Syntax nicht einfacher sondern komplizierter!
bei einer argumenten-uebergabe keine kommas, kein ":" nach if, for und while, wie in ruby wenn nicht noetig
Über den Doppelpunkt gab es in der englischsprachigen Newsgroup gerade eine Diskussion. Über den hat sich Guido am Anfang Gedanken gemacht. Der ist von ABC übernommen und die Entwickler von dieser Sprache haben empirische Tests durchgeführt ob Probanden Quelltext mit oder ohne den Doppelpunkt lesbarer und verständlicher finden. Bei Python wird ja bekanntlich grosser Wert auf Lesbarkeit gelegt, nun rate was das Ergebnis der Studie war.
"send "halo"" statt "send("halo")",
Äh ja, schön: noch mehr Sonderfälle. Insbesondere im Zusammenhang mit fehlenden Kommata zwischen Argumenten. Wie wird folgendes interpretiert: a b c d

Möglichkeiten:

a(b c d)
a(b(c d))
a(b(c(d))
a(b c(d))

Wie sieht das aus wenn noch Operatoren mit verschiedenen Prioritäten ins Spiel kommen?
wenn nich noetig bei bedingungsabfragen nur einen "=" statt zwei.
Wieder ein Sonderfall den man sich merken muss und der die Syntax verkompliziert. Zwei unterschiedliche Operatoren für die gleiche Funktionalität wobei der eine an anderer Stelle noch eine ganz andere Funktion hat!? Argh! Welchem Anfänger möchte man Python dann noch als einfache, in sich konsistente Sprache empfehlen!?

Und bei allen Änderungen die Du vorschlägst musst Du noch eine technische Besonderheit beachten: Egal was für Python3K umgesetzt wird, die Syntax soll auf jeden Fall von einem LL(1)-Parser verstanden werden können.
der interpreter wuerde in python selbst geschrieben sein und muesste nur python-scripts parsen und ausführen
So ein ähnlicher Vorschlag wurde Dir ja schon gemacht: Nimm Lisp oder Scheme. Sehr viel einfacher kann man eine Syntax nicht machen. Bigloo ist ein ganz netter Scheme-Compiler.

Wenn es etwas mit Python zu tun haben soll, dann kannst Du einen Blick auf Noodle werfen.

Ansonsten ist Io noch eine sehr interessante Sprache mit ziemlich wenig Syntax und extrem wenigen Schlüsselworten. Ist aber noch jung und die APIs sind noch im Fluss.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Und dann fehlt noch der obligatorische Hinweis auf den Griechen-Compiler: http://students.ceid.upatras.gr/~sxanth/pyvm/ und PyPy.
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

Hi,

Python-Syntax ist doch toll ! So wie sie ist, geht das geradezu in den Sehnerv hinein (hatte nach einem dreiviertel Jahr schon Momente, in denen ein Blick auf einen mit Code vollen Bildschirm mir sagte: Eh, da stimmt was nicht).

Also: Auf gar keinen Fall!

Ein Syntax-Fehler, der mir immer wieder noch unterläuft:

Code: Alles auswählen

class Beispiel():
Verstehe übrigens nicht, warum es diese Klammern nicht gibt - schließlich ist eine Klasse ein callable.

Außerdem verwende ich 'self' nicht mehr, frisst zuviel Platz. Ist im Moment 'q' , am besten wäre aber ein freies deutliches Zeichen wie @ es ist - wenn ich es recht sehe, müsste man dafür aber den Parser ändern. Ein paar Stunden lang fand ich 'ä' im Sinne von 'äh' ganz lustig und insofern echt pythonisch, dann aber doch nicht mehr.

Ein zweites, das mich ein bisschen nervt: Das Auspacken von 1-Tupeln ist eigentlich nur durch workarounds wie (x,)[0] möglich. Kann aber nicht anders gehen: y = (x,) für Auspacken wäre völlig gegen das typing by assignment. Man müßte für eine solche Vereinheitlichung einen Auspack-Operator erfinden wie: x,y,z = ,(1,2,3) oder sowas. Wäre für Anfänger in der Sprache und die allgemeine Lesbarkeit gar nicht schlecht, x = ,() würde dann 'None' zuweisen.

Viel Spaß !
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

joost hat geschrieben:Ein Syntax-Fehler, der mir immer wieder noch unterläuft:

Code: Alles auswählen

class Beispiel():
Mit Python2.5 und höher nicht mehr.
TUFKAB – the user formerly known as blackbird
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

joost hat geschrieben:Ein Syntax-Fehler, der mir immer wieder noch unterläuft:

Code: Alles auswählen

class Beispiel():
Verstehe übrigens nicht, warum es diese Klammern nicht gibt - schließlich ist eine Klasse ein callable.
Davon abgesehen dass es nicht darum geht die Klasse aufzurufen (schlicsslich ruft def funktion() die Funktion auch nicht auf) ist dies in Python 2.5 möglich - aus Konsistenzgründen. Inzwischen schreibe ich aber in der Regel sowieso ``class Klassenname(object)``.
joost hat geschrieben:Außerdem verwende ich 'self' nicht mehr, frisst zuviel Platz. Ist im Moment 'q' , am besten wäre aber ein freies deutliches Zeichen wie @ es ist - wenn ich es recht sehe, müsste man dafür aber den Parser ändern.
Deinen Code möchte ich echt nicht sehen müssen. Das ``self`` ist aus guten Grund da - es erfüllt die gleichen Funktion wie das von dir vorgeschlagene @: ein Name bei dem sofort klar ist, was an ihn gebunden ist. Außerdem ist @ schon für die Dekoratoren reserviert - ob das eine gute Idee war ist natürlich eine andere Frage. Mir gefallen die anderen Dekorator-Syntaxvorschläge besser.
joost hat geschrieben:Ein paar Stunden lang fand ich 'ä' im Sinne von 'äh' ganz lustig und insofern echt pythonisch, dann aber doch nicht mehr.
Ja, einen Buchstaben zu verwenden der bei den meisten Tastaturen der Welt nicht vorhanden ist, ist hmm, eine innovative Idee. Vielleicht kann man aber auch noch ein paar Symbole aus APL einführen?
joost hat geschrieben:Man müßte für eine solche Vereinheitlichung einen Auspack-Operator erfinden wie: x,y,z = ,(1,2,3) oder sowas. Wäre für Anfänger in der Sprache und die allgemeine Lesbarkeit gar nicht schlecht, x = ,() würde dann 'None' zuweisen.
Kannst du nicht blackbirds Unpack-Operator ``,=``? 8)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten