Unterschiede zwischen Ruby/Python

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Benutzeravatar
Aurogon Eisregen
User
Beiträge: 3
Registriert: Montag 14. März 2011, 11:14

Hallo zusammen,

ich dachte, ehe ich mich in bestenfalls Halbwissen verliere, frage ich mal bei den Profis :)

Ich bin Linux Systemadministrator und komme mit meinem Bash - Scripting immer wieder an Probleme, die ich mit einer "echten" Scriptsprache nicht hätte. So muss man bei Bash, beispielsweise, häufig auf Systemprogramme zurückgreifen, wie "sort", "sed" oder "grep", welche eigentlich alle Funktionen erfüllen, wie sie gängige Programmiersprachen als Module oder Grundfertigkeiten schon mitbringen. Hierbei stoße ich jedoch immer wieder auf Probleme, die sich durch minimal unterschiedliche Kommandozeilenoptionen ergeben. Unter Suse Linux 9 sorgt "-v" beispielsweise für eine auskunftsfreudige Ausgabe sorgt, unter Ubuntu 10.04 jedoch lediglich für die Ausgabe einer Version, oder das Standardverhalten hat sich komplett geändert, oder, oder, oder. Kurz: Ich möchte mir aufgrund sich häufender, unnötiger Problemstellungen in Bash eine "echte" Programmiersprache lernen :)

Python und Ruby scheinen dabei eigentlich auf annähernd dieselben Zielgruppen und Einsatzgebiete abzuzielen. Da ich gerade noch ganz am Anfang stehe, und eh die eine oder andere Sprache von Grund auf lernen muss, dachte ich frage ich mal hier nach, ob mir jemand die Vor- und Nachteile (zumindest aus Python-Sicht) zwischen den beiden Sprachen nennen kann. Ich bitte darum das ganze wirklich im Kontext eines Vergleiches der beiden zu gestalten; Aussagen wie "Python kann XYZ" bringt mir nicht so viel wie "Python kann XYZ, Ruby beherrscht hier nur XY" (oder anders herum) :)

Hat sich ggf. jemand aus ähnlichen/identischen Gründen auch mal für Python entschieden (um Bash abzulösen) und kann mir sagen was dabei sehr gut und was eher garnicht geklappt hat?

Vielen Dank schonmal im voraus!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Was mir spontan einfaellt: Auf Sysadmin-Ebene, und allgemein ausserhalb der Webentwicklung, ist Python sehr viel mehr verbreitet als Ruby. (Ein Python ist auf fast allen Linux-Kisten schon installiert, Ruby muss man erst nachinstallieren.) Pythons Standardbibliothek ist umfangreicher. Python ist klarer zu lesen; Ruby bietet viele Perl-aehnliche Moeglichkeiten, Code sehr kurz, aber eben auch schwerer verstaendlich zu schreiben. Ruby hat etwas mehr syntaktischen Zucker fuer Regulaere Ausdruecke. Ruby neigt dazu, nil zurueckzugben wo Python eher Ausnahmen schmeisst. Das macht Code zwar erstmal etwas kuerzer, ist aber beim Bugs-finden laestig.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
LanX
User
Beiträge: 92
Registriert: Samstag 20. Februar 2010, 12:46

Wenn du eh von Bash kommst und sed, grep und sort ersetzen willst und sysadmin scripte eher kurz bleiben, bist du IMHO mit Perl am besten bedient.

mit s2p hast du auch ein Tool um sed zu perl zu portieren.

Perl ist überall vorinstalliert, ist stärker im Textprocessing und CPAN hat vor kurzem die 20000 Module Grenze überschritten.

Ruby ist i.W. Perl Semantik + Smalltalk OOP mit neuem Syntax.

Letztendlich ist es vorwiegend eine kulturelle Frage.

Da schon die Erwähnung von Perl by vielen Pythonistas Würgreflexe auslöst erwarte ich aber wenig Zustimmung...
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Was für Python sicherlich interessant ist, ist der "system shell" Modus von IPython (ein verbesserter Shell für Python). Keine Ahnung ob es sowas auch für Ruby gibt.

Grüße
Gerrit
Benutzeravatar
Aurogon Eisregen
User
Beiträge: 3
Registriert: Montag 14. März 2011, 11:14

Oh, huch! Sorry, das ich so spät antworte, ich habe irgendwie keine Mail bekommen, das hier was geantwortet wurde ...

Vielen Dank erstmal für die Antworten!

@LanX:
Danke für den Perl - Tipp, jedoch bin ich schon öfter lesend mit Perl in Kontakt gekommen und finde das ganze nur hässlich O.O

Was mir an Python sehr gut gefällt, ist die Idee, das es einen zu guter Lesbarkeit zwingt durch seine klammernlose Einrückungssyntax.
Arbeitet Ruby auch so? Eher nicht was?

Noch eine Frage zu Python: Kann totaler Quatsch sein, aber ich habe mal gelesen, das man mit Python bereits vorliegende Codes aus anderen Sprachen irgendwie übernehmen kann. Das wurde als (nachvollziehbarer) Vorteil angepriesen Python leicht zu implementieren.
Meine Frage: Stimmt das und wie gestaltet sich das? Ist das dann wie bei PHP und HTML, das dann im Python-Block einfach ein derart gekennzeichneter PHP/Sonstwas Block steht, der dann vom jeweiligem Interpreter verarbeitet wird?
BlackJack

@Aurogon Eisregen: Quelltext von anderen Sprachen kann man nicht in Python einbinden. Vielleicht waren da DLLs/Shared Libraries gemeint, die sich mit dem `ctypes`-Modul in der Standardbibliothek ansprechen lassen, wenn sie sich auch einfach in C einbinden lassen würden.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Aurogon Eisregen hat geschrieben:Danke für den Perl - Tipp, jedoch bin ich schon öfter lesend mit Perl in Kontakt gekommen und finde das ganze nur hässlich O.O
Ist wohl nicht unbedingt zwangsläufig so, es scheint aber unter Perl-Codern ein Hobby zu sein, möglichst unlesbaren Code zu schreiben.
Aurogon Eisregen hat geschrieben:Was mir an Python sehr gut gefällt, ist die Idee, das es einen zu guter Lesbarkeit zwingt durch seine klammernlose Einrückungssyntax.
Arbeitet Ruby auch so? Eher nicht was?
Schau dir halt mal Ruby-Code an zum Vergleich. ;)
Aurogon Eisregen hat geschrieben:Noch eine Frage zu Python: Kann totaler Quatsch sein, aber ich habe mal gelesen, das man mit Python bereits vorliegende Codes aus anderen Sprachen irgendwie übernehmen kann. Das wurde als (nachvollziehbarer) Vorteil angepriesen Python leicht zu implementieren.
Meine Frage: Stimmt das und wie gestaltet sich das? Ist das dann wie bei PHP und HTML, das dann im Python-Block einfach ein derart gekennzeichneter PHP/Sonstwas Block steht, der dann vom jeweiligem Interpreter verarbeitet wird?
In Python ist man sehr froh, dass es genügend Web-Frameworks gibt, die solche Schweinereien nicht nötig machen. (Django, Flask, Bottle, um mal die hier am häufigsten erwähnten aufzuzählen). Was ich schon mal gehört habe, ist, dass Python-Code Pseudocode nahe kommen soll. Ist natürlich nur mit Einschränkungen so. Aber es wird auf jeden Fall als Tugend angesehen, lesbaren Code zu schreiben. Das hilft ungemein. :)
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Aurogon Eisregen hat geschrieben:Was mir an Python sehr gut gefällt, ist die Idee, das es einen zu guter Lesbarkeit zwingt durch seine klammernlose Einrückungssyntax.
Arbeitet Ruby auch so? Eher nicht was?
Nein, ruby ersetzt die Klammern durch noch schönere ends es grüßt:

Code: Alles auswählen

        end
      end
    end
  end
end
;)
Benutzeravatar
Aurogon Eisregen
User
Beiträge: 3
Registriert: Montag 14. März 2011, 11:14

BlackJack hat geschrieben:@Aurogon Eisregen: Quelltext von anderen Sprachen kann man nicht in Python einbinden. Vielleicht waren da DLLs/Shared Libraries gemeint, die sich mit dem `ctypes`-Modul in der Standardbibliothek ansprechen lassen, wenn sie sich auch einfach in C einbinden lassen würden.
Also: Ich habe das in meinem Buch gelesen und in Wiki steht's auch:

http://de.wikipedia.org/wiki/Python_%28 ... sprache%29 :
Durch die Möglichkeit, auch Programme anderer Sprachen als Modul einzubetten, werden viele Nischen in der Programmierung abgedeckt. Bei Bedarf lassen sich so beispielsweise zeitkritische Teile durch in maschinennäheren Sprachen, wie z. B. C, programmierte Routinen ersetzen, oder Python kann als Skriptsprache eines anderen Programms dienen (Beispiele: OpenOffice.org, Blender, Cinema 4D, Maya, PyMOL, SPSS und GIMP).
Was stimmt denn nun? O.O
deets

Das ist ein ziemlich schlechter Absatz.

Er beschreibt zwei unterschiedliche Dinge unter einer falschen Ueberschrift.

Es ist sehr einfach in Python, C (und ein bisschen aufwaendiger, aber immer noch recht gut) C++-Bibliotheken einzubinden. Aber das ist nicht "eine andere Sprache einbinden", sondern entweder auf das, was die libffi kann beschraenkt (ctypes), oder eben mittels Compiler nach C/C++ (es gibt varianten wie Cython, aber das ist nichts fundamental anderes).

Und du kannst Python gut einbetten in eben C/C++. Das ist dann sowas wie in Blender und Co.

Ausserdem gibt es dann noch Implementierenung von Python, die auf andere VMs abziehlen - Jython + IronPython. Damit schlaegt es dann eine Bruecke zu der Java + .NET-VM.


"auch Programme anderer Sprachen als Modul einzubetten" ist aber viel zu verallgemeinert.
Antworten