Was Python-Entwickler über Ruby denken

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Geoffrey Grosenbach zu dem Thema, was Python-Entwickler über Ruby denken: http://blog.peepcode.com/tutorials/2010 ... nk-of-ruby

Ich glaube, die Essenz ist, dass Ruby zwar so seine Probleme mit "komischer" Syntax hat, diese aber andererseits auch genau die "coolen" DSLs möglich macht. Ob nun wirklich alle Python-Entwickler höflicher (oder auch nur zurückhaltender) sind als Ruby-Entwickler, wage ich zu bezweifeln, doch ehrlich gesagt finde auch ich es verdammt unhöflich dem Vortragenden Gegenüber, wenn man in seinem Vortrag sitzt, aber augenscheinlich nur Augen für seinen eigenen Laptop hat. Ansonsten würde ich erste gerne einmal Folien und Vortrag hören, bevor ich da mehr sagen kann, denn Geoffrey hat zwar einen sehr stylishen Blogeintrag geschrieben, doch sagt er auch viel aus?

Stefan
LanX
User
Beiträge: 92
Registriert: Samstag 20. Februar 2010, 12:46

Ich weiß nicht ... schon alleine die Aussage:

"Compared to other programming languages, Python and Ruby are so similar that hearing arguments between them is like trying to figure out which identical twin is more handsome."

kann kaum stimmen wenn man die enge Verwandschaft zu Perl sieht.
...
Stewart: I gather you had worked with both Perl and Python before creating Ruby. What bits of Perl did you incorporate in Ruby?

Matz: A lot. Ruby's class library is an object-oriented reorganization of Perl functionality--plus some Smalltalk and Lisp stuff. I used too much I guess. I shouldn't have inherited $_, $&, and the other, ugly style variables.

Stewart: How about Python? What aspects of that language did you try to reuse in Ruby?

Matz: Far less than Perl. But I stole a few things, like exception names. Plus I learned a lot from its code.
...
aus http://linuxdevcenter.com/pub/a/linux/2 ... /ruby.html
"Ruby's syntax and design philosophy are heavily influenced by Perl. It has a lot of syntactic variability. Statement modifiers (if, unless, while, until, etc.) may appear at the end of any statement. Some key words are optional (the ``then'' in an ``if'' statement for example). Parentheses may sometimes be elided in method calls. The receiver of a method may usually be elided. Many, many things are lifted directly from Perl."
aus http://www.softpanorama.org/Scripting/ruby.shtml
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

LanX hat geschrieben:Ich weiß nicht ... schon alleine die Aussage:

"Compared to other programming languages, Python and Ruby are so similar that hearing arguments between them is like trying to figure out which identical twin is more handsome."

kann kaum stimmen
Da spielt ein Rubyist die Unterschiede zwischen den Sprachen als Geste des guten Willens, der Freundschaft und des Friedens herunter und du hast nichts anderes zu tun, als gleich wieder Öl ins Feuer der Feindschaft zu gießen :)

Seien wir doch lieber froh, dass er voll des Lobs nach einem Besuch einer Python-Usergroup war.

Siehe auch diese Lobhudelei zu Python von Chris "Github" Wanstrath: http://rubyconf2009.confreaks.com/20-no ... trath.html

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

LanX hat geschrieben:Ich weiß nicht ... schon alleine die Aussage:

"Compared to other programming languages, Python and Ruby are so similar that hearing arguments between them is like trying to figure out which identical twin is more handsome."

kann kaum stimmen wenn man die enge Verwandschaft zu Perl sieht.
Effektiv ist es aber so, wenn man Ruby-Code schreibt dann sieht der letztendlich dem Python-Code relativ ähnlich. Von Blöcken vielleicht mal abgesehen - jedenfalls ähnlicher als zu Perl-Code.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Why the lucky stiff schreibt dazu in der Readme von unholy, das Ruby-Code in Python-Code übersetzt, indem es den Ruby-Bytecode in Python-Bytecode übersetzt:
You know, it's crazy that Python
and Ruby fans find themselves
battling so much. While syntax
is different, this exercise
proves how close they are to
each other! And, yes, I like
Ruby's syntax and can think much
better in it, but it would be
nice to share libs with Python
folk and not have to wait forever
for a mythical VM that runs all
possible languages.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
LanX
User
Beiträge: 92
Registriert: Samstag 20. Februar 2010, 12:46

Leonidas hat geschrieben:Effektiv ist es aber so, wenn man Ruby-Code schreibt dann sieht der letztendlich dem Python-Code relativ ähnlich. Von Blöcken vielleicht mal abgesehen - jedenfalls ähnlicher als zu Perl-Code.
Mit dem Argument des stärkeren Schwerpunkts auf OOP könnte man nun auch behaupten das Javascript und Ruby effektiv die gleiche Sprache sind.

Tatsächlich sind VB Script und JS bis auf den Syntax identisch, während man das von JS und Java wohl kaum ein "Experte" behaupten würde, nur weil sie gemeinsamen Syntax haben, oder?

Das Ruby Perl semantisch am nächsten steht bezeugt ja nicht nur Matz, auch Larry Wall lobt Ruby und sieht es als schärfsten Konkurenten in Perls ökologischer Nische.

Für einen Perler ist es auch reichlich unspektakulär ob man jetzt

Code: Alles auswählen

 push @a,$b
oder

Code: Alles auswählen

a.push(b)
schreibt, TIMTOWTDI.

Pythonistas dürften sich da schwerer tun. Und solche Beispiele gibts tonnenweise...

Ob der Bytecode von Ruby und Python kompatibel sind weiß ich nicht, aber zumindest die Aussage von Matz legt das nahe.

Das man froh sein solle über Nettigkeiten zwischen Communities um Konflikte zu mildern, also sorry, dass überhaupt solche Kämpfe stattfinden ... :roll:

Beschmeißen sich die Fanboys mit Brei oder reißen sie sich gegenseitig die Lätzchen kaputt?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

LanX hat geschrieben:Mit dem Argument des stärkeren Schwerpunkts auf OOP könnte man nun auch behaupten das Javascript und Ruby effektiv die gleiche Sprache sind.
Nein, eher nicht. Aber wenn man wollte, könnte man behaupten dass JavaScript und Scheme effektiv die selbe Sprache sind. :twisted: Andererseits, die Unterschiede sind gar nicht mal so groß wie man denken würde, beide Sprachen haben sogar Regex-Literale und Blöcke.
LanX hat geschrieben:Tatsächlich sind VB Script und JS bis auf den Syntax identisch, während man das von JS und Java wohl kaum ein "Experte" behaupten würde, nur weil sie gemeinsamen Syntax haben, oder?
Uhh, ich kenne mich jetzt nicht speziell mit VB Script aus (habe nur "damals" VB6 verwendet), jedoch denke ich dass das Modell zur Objektorientierung in JS ein anderes, ebenso schätze ich dass die anonymen Funktionen und das, hmm, etwas kuriose Scoping Eigenschaften sind, die JS-spezifisch ist. Ich stimme dir aber zu, dass Java und JavaScript sich an so vielen prinzipiellen Stellen unterscheiden, dass sie nur mit Mühe als "ähnlich" bezeichnet werden können. Vielleicht ist es auch der Grund warum JavaScript viele Jahre so ein Nischendasein fristete - als "lesser Java" wollte kaum jemand damit spielen.

Was ich damit ausdrücken will: mit VB Script schreibt man vermutlich Code anders als wie man es mit JS machen würde.
LanX hat geschrieben:Das Ruby Perl semantisch am nächsten steht bezeugt ja nicht nur Matz, auch Larry Wall lobt Ruby und sieht es als schärfsten Konkurenten in Perls ökologischer Nische.
Und ich habe Ruby verwendet und eben den Eindruck bekommen dass Ruby große Ähnlichkeit zu Python hat. Ausreichend große um nicht sonderlich spannend zu sein.
LanX hat geschrieben:Ob der Bytecode von Ruby und Python kompatibel sind weiß ich nicht, aber zumindest die Aussage von Matz legt das nahe.
Mit Unholy kann man prinzipiell Bytecode übersetzen, nur ist das eher eine kuriose Idee von _why, denn ein ernstes Projekt. Wenn Perl5 Bytecode generieren würde, wäre der ja auch nicht so viel anders als der von Ruby oder Python. Und Parrot war sogar als gemeinsame VM für Python und Perl6 angedacht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ronnie
User
Beiträge: 73
Registriert: Sonntag 21. März 2004, 17:44

Tatsächlich sind die Unterschiede in der Funktionalität der bekannten Skriptsprachen insgesamt nicht sonderlich groß. Die Syntax unterscheidet sich und idiomatischer Natur. Auf einer subjektiven Ebene, im jeweiligen Erfahrungskontext des Programmierers, ist dann Sprache X oder Y "besser". Und natürlich gibt es tatsächlich an vielen Stellen Dinge über die man diskuttieren kann: Jede Sprache hat auch so ihre unschönen Ecken. Entsprechende entstehen "best-practice"-Modelle und Regeln. Etwas was Perl kennt und EcmaScript5 als Neuerung enthält ist ein "use strict;"-Modus. Dieser bewirkt u.a., dass keine Variablen ohne vorherige Definition (my/var) verwendet werden können. Das fehlt mir z.B. in Python oder anderen Sprachen. Denoch kann ich jeden nur ermutigen sich mit anderen Sprachen zu beschäftigen. Ich habe z.B. seinerzeit anonyme Codeblöcke in Perl erst verstanden, nachdem ich die Nutzung von lambda-Ausdrücken in Python kennengelernt hatte. So kann man bei jeder Programmiersprache etwas dazu lernen und lernt die entsprechenden Sprachen zu schätzen. Auf meiner Todo-Liste sind z.B. noch Scheme und Factor. Wenn man Programmieren als handwerkliche Kunst versteht, dann sollte man eh das Essay von Peter Norvig mal gelesen haben und entsprechend Zeit einplanen. Programmieren ist, unabhängig von der verwendeten Sprache, eine schöne Kunst, die man nur richtig wertschätzen kann, wenn man sich Zeit lässt sie auch auszuüben.
Achtung: User ist ein Python-Lehrling!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ronnie hat geschrieben:Etwas was Perl kennt und EcmaScript5 als Neuerung enthält ist ein "use strict;"-Modus. Dieser bewirkt u.a., dass keine Variablen ohne vorherige Definition (my/var) verwendet werden können. Das fehlt mir z.B. in Python oder anderen Sprachen.
Python kennt nunmal keine "Variablen", sondern nur Namen die vergeben werden, deshalb ist es auch ueberfluessig. Das Problem ist, dass Code nur dann Fehler wirft, wenn er ausgefuehrt wird. Das ist mir auch ein Dorn im Auge. Aber das kann man mit Testsuiten und Branch-Coverage ausgleichen.
Die meisten anderen Sprachen die statisch sind haben diesen `strict`-Modus eben im Compiler `-pedantic (gcc)` usw.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ronnie hat geschrieben:Auf meiner Todo-Liste sind z.B. noch Scheme und Factor.
Oh, kann ich beide sehr empfehlen obwohl sie natürlich total verschieden sind. Leider gibt es zu Factor nahezu Null Einführungsliteratur, daher bin ich über den Umweg über PostScript drauf gekommen und tue mir dennoch ziemlich schwer. Es fehlt halt an der Übung - sowas was ich in Ruby von Python kommend nie hatte, da konnte ich nahezu sofort halbwegs idiomatischen Code schreiben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
LanX
User
Beiträge: 92
Registriert: Samstag 20. Februar 2010, 12:46

Leonidas hat geschrieben:Aber wenn man wollte, könnte man behaupten dass JavaScript und Scheme effektiv die selbe Sprache sind. :twisted:
Tatsächlich ist JS entstanden indem man Javasyntax auf Self draufgestülpt hat.

Scheme kennen ich nicht aktiv, aber die entscheidende Funktionalität die Lisp hat und weder JS noch Perl bieten sind Macros. Deswegen Veto! :)

(kann Python Macros?)
Was ich damit ausdrücken will: mit VB Script schreibt man vermutlich Code anders als wie man es mit JS machen würde.
Nicht wirklich,glaub mir, ich musste mal mein Geld mit VBS verdienen. :oops:

Wenn du den Windows Scripting Host installierst bekommst du JScript und VBScript nicht nur gleichzeitig im Paket sondern merkst auch sehr schnell dass beide auf der gleichen Engine laufen.

Das geht so weit dass in VBS Sachen funktionieren die nur innerhalb von JScript dokumentiert wurden !!!

Und JScript war die Microsoft-Methode die Rechte von Netscape/Sun an Javascript zu umgehen. ( So ähnlich wie C# und Java...)

VBS war dann der nächste Schritt, Gate's dogmatische Ansichten zu Basic als quintessenz des EInfachen durchzusetzen.

Wenn Perl5 Bytecode generieren würde, wäre der ja auch nicht so viel anders als der von Ruby oder Python. .
Perl5 generiert Bytecode http://de.wikipedia.org/wiki/Bytecode den übersetzen zu wollen ist allerdings wirklich nicht trivial weil alles andere als schlank... ;-)

Aber ich vermute sehr stark dass Ruby diesbzgl näher an Python ist ...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

LanX hat geschrieben:
Leonidas hat geschrieben:Aber wenn man wollte, könnte man behaupten dass JavaScript und Scheme effektiv die selbe Sprache sind. :twisted:
Tatsächlich ist JS entstanden indem man Javasyntax auf Self draufgestülpt hat.
Um mal Wikipedia zu zitieren: "The key design principles within JavaScript are inherited from the Self and Scheme programming languages."
Wenn man Brendan Eich fragt dann bekommt man schon mit dass Scheme damals ein heißes Thema war.
LanX hat geschrieben:Scheme kennen ich nicht aktiv, aber die entscheidende Funktionalität die Lisp hat und weder JS noch Perl bieten sind Macros. Deswegen Veto! :)
Ich weiß nicht ob ich Macros als entscheidende Funktionalität ansehen würde. Schließlich existiert sowohl ein experimentelles Template Haskell sowie ein voll integriertes OCamlP4 (und dessen Fork OCamlP5) in OCaml die beide Macros bieten aber bei weitem keine Lisps sind. Und zumindest in Scheme ist Macro-Abuse auch verpönt :)
LanX hat geschrieben:(kann Python Macros?)
Nein, es gibt aber EasyExtend und, soweit ich mich erinnere noch ein weiteres Paket mit dem man von Python abgeleitete Sprachen kreieren kann. Natürlich nicht so integriert und akzeptiert wie das Macrosystem in den populären Lisp-Dialekten.
LanX hat geschrieben:Wenn du den Windows Scripting Host installierst bekommst du JScript und VBScript nicht nur gleichzeitig im Paket sondern merkst auch sehr schnell dass beide auf der gleichen Engine laufen.
Das weiß ich. Aber Java und Rhino laufen auch auf der gleichen "Engine". Somit ist die zugrunde liegende Implementierung eher irrelevant.
LanX hat geschrieben:
Wenn Perl5 Bytecode generieren würde, wäre der ja auch nicht so viel anders als der von Ruby oder Python. .
Perl5 generiert Bytecode http://de.wikipedia.org/wiki/Bytecode den übersetzen zu wollen ist allerdings wirklich nicht trivial weil alles andere als schlank... ;-)
Oh, das war mir nicht bewusst. Ich wusste zwar vom Parrot-Bytecode in Perl6, aber mit den Interna von Perl5 habe ich mich nicht sonderlich auseinandergesetzt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
LanX
User
Beiträge: 92
Registriert: Samstag 20. Februar 2010, 12:46

cofi hat geschrieben:Python kennt nunmal keine "Variablen", sondern nur Namen die vergeben werden, deshalb ist es auch ueberfluessig.
Kannst du mir das bitte erläutern? Meinst du damit dass eine Variable eigentlich der Name eines Schlüssel in einem speziellen Dictionary/Hash für Variablen ist?

Das ist in Perl nicht anders...

Falls du was anderes meinst, hast du vielleicht einen Link zum Nachlesen, interessiert mich wirklich :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

LanX hat geschrieben:
cofi hat geschrieben:Python kennt nunmal keine "Variablen", sondern nur Namen die vergeben werden, deshalb ist es auch ueberfluessig.
Kannst du mir das bitte erläutern? Meinst du damit dass eine Variable eigentlich der Name eines Schlüssel in einem speziellen Dictionary/Hash für Variablen ist?
Ja, genau so ist es.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
LanX
User
Beiträge: 92
Registriert: Samstag 20. Februar 2010, 12:46

Das weiß ich. Aber Java und Rhino laufen auch auf der gleichen "Engine". Somit ist die zugrunde liegende Implementierung eher irrelevant.
Der Vergleich hinkt etwas, oder kann ich in Java Semantik von JS nutzen und umgekehrt?

Anyway ich muss mich korrigieren, dass VBS keine eigenen Objekte kennt ist mir auch neu, offensichtlich war mir die prototypische Vererbung damals ebenso fremd wie Bill Gates! ;)
JavaScript Versus VBScript

JavaScript and VBScript have many similarities.
...

As stated before, the most obvious difference is syntax.
...
Unfortunately, VBScript does not support object creation or user-defined classes. VBScript supports only reusable functions and subroutines. ...
aus http://msdn.microsoft.com/en-us/library/ms970435.aspx

(das disqualifiziert VBS ziemlich ... ich bild mir ein es ging)

Anyway worum es mir ging war wenn die Aussage stimmt das "Ruby und Python" praktisch nicht zu unterscheiden" seien und man gleichzeitig sieht das Ruby ein redesigntes Perl ist, wo Konzepte bis in die feinsten Details nachgebaut wurden, müsste man logischerweise schließen:

"Python und Perl sind praktisch nicht zu unterscheiden ..."
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ruby ist eher ein modernes Smalltalk mit guten Elementen aus anderen Sprachen, als ein Perl Nachbau.
LanX
User
Beiträge: 92
Registriert: Samstag 20. Februar 2010, 12:46

DasIch hat geschrieben:Ruby ist eher ein modernes Smalltalk mit guten Elementen aus anderen Sprachen, als ein Perl Nachbau.
dir ist schon klar das ich den Schöpfer selbst zitiert hatte?
Ronnie
User
Beiträge: 73
Registriert: Sonntag 21. März 2004, 17:44

LanX hat geschrieben:dir ist schon klar das ich den Schöpfer selbst zitiert hatte?
es ist ja durchaus korrekt, dass bei der Entwicklung von Ruby verschiedene Sprachen einen Einfluss hatten. Viele Dinge, die von Perl übernommen wurden, sind aber auch wieder entfernt worden, oder gelten als deprecated. Selbst in Perl gelten heute viele Dinge als überholt, die man früher bedenkenlos genutzt hat. Deshalb gibt es ja auch "perlcritic". Das Ruby sich eher perlish anfühlt wie Python ist allerdings auch wahr. Aber letzten Endes reden wir nur über eine Schnittmenge an Funktionalität zwischen Sprachen, die mal größer oder kleiner ausfällt - und von subjektiver Präferenz abhängig ist. Ich erinnere dich an unsere Diskussion über Sigils, die in Perl kontextabhängig sind und ihre verwirrende Verwendung im Umgang mit Referenzen. Du führst ja selbst gerade die Diskussion (an anderer Stelle) über Autobox und die Vorteile von Methodenaufrufen und Method-Chaining. Genau der Punkt von dem ich schon vor längerer Zeit behauptet habe, dass er in anderen Sprachen geschickter gelöst ist als in Perl. Perl hat viele Vorteile, aber auch viele Fussangeln und Fettnäpfe. Viele der Dinge, die früher Perl mehr Flexibilität und Funktionalität erlaubt haben, sind heute durch Metaprogramming und DSLs in anderen Sprachen geschickter und schöner umzusetzen. Es gibt aktuell nur wenig Dinge wo ich behaupten würde, dass Perl noch Vorbild für andere Sprachen sein kann. Um ein konkretes Beispiel zu nennen, würde ich Moose erwähnen und dabei besonders Subtyping/Constraints und Coercion. Aktuell fliessen aber mehr Ideen in die andere Richtung, die womöglich irgendwann mal zu Perl6 führen (auch wenn ich in Bezug auf Parrot und Performance noch besondere Zweifel habe).
Achtung: User ist ein Python-Lehrling!
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Aus einem Interview:
InfoQ hat geschrieben:In the same way we can talk about Smalltalk. Smalltalk has a lot of dialects and some people like to say that Ruby is almost the dialect of Smalltalk. Do you agree with that?
Matz hat geschrieben:[...Ruby hasn't the IDE...], but as a language, the basic concept is pretty much in common with Ruby. If someone considers Ruby as a Smalltalk dialect, I inherited so many concepts from Smalltalk, so I'm proud of being part of the Smalltalk community.
In der typischen höflichen Japanischen Art streitet er nicht ab, sondern bedankt sich :) In einer Präsentation auf einer der frühe RubyConf hatte er mal "Ruby > (Smalltalk + Perl)/2" stehen. Ich finde leider keine Referenz dazu. Das zeigt aber die beiden stärksten Einflüsse. Die Verwandtschaft zu Perl ist denke ich nicht abzustreiten, schon der Name "Ruby" zeigt das ja. Ebenfalls ein Juwel.

Im Gegensatz zu Ruby sind die Konzepte von Python's OO-System nicht direkt auf Smalltalk zurückzuführen.

Stefan
LanX
User
Beiträge: 92
Registriert: Samstag 20. Februar 2010, 12:46

@Ronnie: Es geht hier um die Aussage "das Python und Ruby nicht zu unterscheiden seien".

Wie hier bereits (auch von anderen) ausgeführt wurde standen Perl, Lisp und Smalltalk Pate, und wie sma schon sagte Pythons Objektmodell stammt nicht von Smalltalk.

Wie Perl-Diskussionen über Sigils und Autobox hier her passen weiß ich nicht, Perl ist ja nur indirekt Thema und möchte ich in Pythonkreisen eh nicht aktiv vertiefen. (Ich bin hier zum lernen und nicht zum predigen.)

Ob Ruby letztendlich mehr Ähnlichkeiten hat Smalltalk, Perl oder Lisp hat sehe ich unemotional ...

...die obige Aussage Python==Ruby lässt mich aber wirklich an der Seriösität des Autors zweifeln! Dies ist je nach Standpunkt entweder falsch oder relativiert sich zu freundlichem blabla.

Zumindst ziehe ich daraus dass ich mich wirklich mehr mit Smalltalk auseinandersetzen muss... :)
Antworten