Seite 1 von 3

python code radikal verkuerzen

Verfasst: Donnerstag 16. November 2006, 21:00
von Costi
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

Verfasst: Donnerstag 16. November 2006, 21:06
von EnTeQuAk
:D kann mans auch übertreiben? :D

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


MFG EnTeQuAk

Re: python code radikal verkuerzen

Verfasst: Donnerstag 16. November 2006, 21:07
von Leonidas
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?

Re: python code radikal verkuerzen

Verfasst: Donnerstag 16. November 2006, 21:09
von mitsuhiko
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...

Verfasst: Donnerstag 16. November 2006, 21:15
von birkenfeld
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]

Verfasst: Donnerstag 16. November 2006, 21:16
von Costi
*diesen beitrag ignoriren*
(warte erstmal auf mehr antworten)

Verfasst: Donnerstag 16. November 2006, 22:00
von gerold
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
:-)

Verfasst: Donnerstag 16. November 2006, 22:05
von Y0Gi
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?

Verfasst: Donnerstag 16. November 2006, 22:22
von Leonidas
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.

Verfasst: Donnerstag 16. November 2006, 22:26
von Costi
* 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

Verfasst: Donnerstag 16. November 2006, 22:33
von birkenfeld
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?

Verfasst: Donnerstag 16. November 2006, 22:47
von Leonidas
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.

Verfasst: Donnerstag 16. November 2006, 22:48
von gerold
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
:-)

Verfasst: Donnerstag 16. November 2006, 22:54
von Y0Gi
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.

Verfasst: Donnerstag 16. November 2006, 22:58
von Leonidas
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.

Re: python code radikal verkuerzen

Verfasst: Freitag 17. November 2006, 00:12
von 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.

Verfasst: Freitag 17. November 2006, 07:37
von birkenfeld
Und dann fehlt noch der obligatorische Hinweis auf den Griechen-Compiler: http://students.ceid.upatras.gr/~sxanth/pyvm/ und PyPy.

Verfasst: Sonntag 29. April 2007, 22:20
von joost
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ß !

Verfasst: Sonntag 29. April 2007, 22:25
von mitsuhiko
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.

Verfasst: Montag 30. April 2007, 08:16
von Leonidas
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)