Python vs. Ruby für die Metaprogrammierung [geschlossen]

90

Ich bin derzeit hauptsächlich ein D- Programmierer und möchte meiner Toolbox eine weitere Sprache hinzufügen, vorzugsweise eine, die die Metaprogrammierungs-Hacks unterstützt, die in einer statisch kompilierten Sprache wie D einfach nicht möglich sind.

Ich habe ein wenig über Lisp gelesen und würde gerne eine Sprache finden, die einige der coolen Sachen erlaubt, die Lisp macht, aber ohne die seltsame Syntax usw. von Lisp. Ich möchte keinen Sprachflammenkrieg beginnen, und ich bin sicher, dass sowohl Ruby als auch Python ihre Kompromisse haben, also werde ich auflisten, was mir persönlich wichtig ist. Bitte sagen Sie mir, ob Ruby, Python oder eine andere Sprache für mich am besten geeignet ist.

Wichtig:

  1. Gute Metaprogrammierung. Möglichkeit zum Erstellen von Klassen, Methoden, Funktionen usw. zur Laufzeit. Vorzugsweise minimale Unterscheidung zwischen Code und Daten, Lisp-Stil.
  2. Schöne, saubere, vernünftige Syntax und konsistente, intuitive Semantik. Grundsätzlich eine gut durchdachte, unterhaltsame, moderne Sprache.
  3. Mehrere Paradigmen. Kein Paradigma ist für jedes Projekt oder sogar jedes kleine Teilproblem innerhalb eines Projekts richtig.
  4. Eine interessante Sprache, die tatsächlich die Art und Weise beeinflusst, wie man über Programmierung denkt.

Etwas wichtig:

  1. Performance. Es wäre schön, wenn die Leistung anständig wäre, aber wenn Leistung eine echte Priorität ist, verwende ich stattdessen D.
  2. Gut dokumentiert.

Nicht wichtig:

  1. Community-Größe, Bibliotheksverfügbarkeit usw. Keines davon ist ein Merkmal der Sprache selbst, und alle können sich sehr schnell ändern.
  2. Verfügbarkeit von Arbeitsplätzen. Ich bin kein hauptberuflicher Programmierer. Ich bin ein Student und Programmierung ist tangential relevant für meine Forschung.
  3. Alle Funktionen, die hauptsächlich für sehr große Projekte entwickelt wurden, an denen eine Million Code-Affen arbeiten.
dsimcha
quelle
1
+1 Für eine allgemein gut gestellte Frage.
Triptychon
Leider sagen die hoch bewerteten Antworten im Grunde alle "es kommt darauf an" und die niedrigeren Antworten sind im Grunde ein Flammenkrieg zwischen Python und Ruby.
Dan Burton
Hast du über Clojure nachgedacht?
Mark Thomas
Die Antwort ist Julia ! Es gab es damals einfach nicht: bit.ly/julia_meta ... freue dich! Julia deckt alle wichtigen Punkte ab, die von @dsimcha aufgelistet werden, sowie die Leistung und alle anderen Punkte werden wahr, während Julia weiter reift.
SalchiPapa

Antworten:

15

Zumindest auf ideologischer Ebene gibt es keinen großen Unterschied zwischen Python und Ruby. Zum größten Teil sind sie nur verschiedene Geschmacksrichtungen derselben Sache. Daher würde ich empfehlen zu sehen, welcher besser zu Ihrem Programmierstil passt.

Jason Baker
quelle
30
Es gibt definitiv nicht dasselbe. Das Aussehen auf der Oberfläche ist ähnlich, aber wenn Sie die mächtigsten Funktionen von Ruby ausüben, verstehen Sie, dass Python einfach nicht passt. Versuchen Sie beispielsweise, ein DSL in Ruby zu schreiben, anstatt ein Python zu schreiben, oder erstellen Sie zur Laufzeit Funktionen, Methoden, Klassen usw. In Ruby ist es viel einfacher.
FelipeC
14
Es ist nicht selten, dass Sie Metaprogrammierung durchführen müssen, es ist nur selten, dass dies durchgeführt wird. Alle außer dem trivialsten Programm haben sich wiederholende Muster, die nicht den üblichen Refactoring-Tools entsprechen, sondern durch Metaprogrammierung leicht getötet werden können.
Wayne Conrad
10
Ruby und Python unterscheiden sich stark, selbst bei Ideen, die ihr Design bestimmen. Python wollen sie einen und hoffentlich einen offensichtlichen Weg, um Dinge zu tun. Das macht die Sprache im Allgemeinen nicht so ausdrucksstark wie Ruby, aber es macht sie konsistenter. Ruby kommt ein bisschen mehr von der Perl-Art der Dinge, wo es viele Möglichkeiten gibt, Dinge zu tun. Auch Ruby macht einige Dinge super einfach und beinhaltet tatsächlich die Idee von privaten Mitgliedern. Python hingegen macht es höchstens schwieriger, etwas zu tun, daher muss man expliziter sein (wie das Hinzufügen oder Überschreiben von Verhalten in Klassen).
Sean Copenhaver
5
Sie sollten wahrscheinlich in beiden Fällen einen Crashkurs machen, aber für eine einfache Metaprogrammierung scheint Ruby besser geeignet zu sein. Ich habe allerdings nicht viel Erfahrung, also nimm das mit einem Körnchen Salz.
Sean Copenhaver
7
Ruby und Python ähneln sich nur darin, dass sie "schönen Code" predigen. Sie haben einfach ganz andere Ansichten über diese Schönheitssache (was IMO gut ist)
Gabi Purcaru
69

Ich habe ein wenig über Lisp gelesen und würde gerne eine Sprache finden, die einige der coolen Sachen erlaubt, die Lisp macht, aber ohne die seltsame Syntax usw. von Lisp.

Würden wir nicht alle.

minimale Unterscheidung zwischen Code und Daten, Lisp-Stil

Leider sind die minimale Unterscheidung zwischen Code und Daten und die "seltsame" Syntax Konsequenzen voneinander.

Wenn Sie eine einfach zu lesende Syntax wünschen, haben Sie Python. Der Code wird jedoch in keiner der häufig verwendeten integrierten Datenstrukturen dargestellt. Es schlägt - wie die meisten Sprachen - in Punkt 1 Ihrer "wichtigen" Liste fehl. Das macht es schwierig, nützliche Hilfe zu leisten.

Du kannst nicht alles haben. Denken Sie daran, Sie sind nicht die Ersten, die diesen Gedanken haben. Wenn so etwas wie Ihre ideale Sprache existieren würde, würden wir sie alle verwenden. Da die reale Welt nicht Ihren Idealen entspricht, müssen Sie Ihre Wunschliste neu priorisieren. Der "wichtige" Abschnitt muss neu angeordnet werden, um zu identifizieren, was ist wirklich wichtig ist.

S.Lott
quelle
3
Ich habe festgestellt, dass viele Sprachen Lisp-ähnliche Makros in Nicht-Lispy-Syntaxen implementieren. Am Ende ist das Schreiben von Makros dort sehr schwierig, da natürlich niemand die Datenstrukturen kennt, in denen der Code dargestellt wird, sodass das Schreiben von Makros zu schwierig wird und niemand tut es.
Pupeno
11
Menschen finden Lisp schwer zu lesen, weil sie mit der Syntax nicht vertraut sind. Ich finde Lisp viel einfacher zu lesen als C # (aber schwieriger als Python).
Jules
1
Ich stimme dem Punkt weitgehend zu, aber meine Erfahrung mit Ruby und Lisp zeigt, dass Ersteres für die Metaprogrammierung so gut ist, wie es ohne Klammern geht. Andere Alternativen, die nahe kommen, könnten TCL und JavaScript sein, aber ich würde sie aus anderen Gründen nicht bevorzugen.
Inger
Lange lange wieder gab es eine Sprache namens Dylan, die genau das sein sollte.
Friedrich
17

Ehrlich gesagt sind sich Ruby und Python in Bezug auf Metaprogrammierfunktionen viel ähnlicher, als einige ihrer Anhänger gerne zugeben. Diese Bewertung beider Sprachen bietet einen ziemlich guten Vergleich / Bewertung:

Wählen Sie also einfach eine anhand einiger Kriterien aus. Vielleicht magst du Rails und möchtest diesen Code studieren. Vielleicht ist SciPy dein Ding. Schauen Sie sich das Ökosystem von Bibliotheken, Communitys usw. an und wählen Sie eines aus. Sie werden sicherlich kein Metaprogrammier-Nirvana verlieren, das auf Ihrer Wahl basiert.

ars
quelle
Dieser Blogeintrag scheint mehr mit persönlichen Vorlieben zu tun zu haben (fair genug, aber Schönheit liegt im Auge des Betrachters) als mit Metaprogrammierung - was der Hauptpunkt des OP war.
Inger
16

Haftungsausschluss: Ich beschäftige mich nur mit beiden Sprachen, habe aber in beiden Sprachen zumindest kleine Arbeitsprogramme geschrieben (nicht nur schnelle Skripte, für die ich Perl, Bash oder GNU make verwende).

Ruby kann für Punkt 3 "Mehrere Paradigmen" sehr hilfreich sein, da es schwierig ist, die Erstellung domänenspezifischer Sprachen zu vereinfachen. Durchsuchen Sie beispielsweise online und sehen Sie sich ein paar Teile Ruby on Rails-Code und ein paar Teile Rake-Code an. Sie sind beide Ruby, und Sie können die Ähnlichkeiten erkennen, aber sie sehen nicht so aus, wie Sie es normalerweise als dieselbe Sprache betrachten würden.

Python scheint mir etwas vorhersehbarer zu sein (möglicherweise korreliert mit 'sauberem' und 'gesundem' Punkt 2), aber ich weiß nicht wirklich, ob dies an der Sprache selbst liegt oder nur daran, dass es normalerweise von Menschen mit unterschiedlichen Werten verwendet wird . Ich habe noch nie tiefe Magie in Python versucht. Ich würde sicherlich sagen, dass beide Sprachen gut durchdacht sind.

Beide punkten gut in 1 und 4. [Bearbeiten: Eigentlich ist 1 ziemlich umstritten - es gibt "eval" in beiden, wie es in interpretierten Sprachen üblich ist, aber sie sind konzeptionell kaum rein. Sie können Abschlüsse definieren, Objekten Methoden zuweisen und so weiter. Ich bin mir nicht sicher, ob dies so weit geht, wie du willst.]

Persönlich finde ich Ruby lustiger, aber zum Teil liegt es daran, dass es einfacher ist, sich von coolen Methoden ablenken zu lassen. Ich habe tatsächlich mehr Python verwendet. Manchmal willst du nicht cool, du willst damit weitermachen, also ist es vor dem Schlafengehen erledigt ...

Keiner von beiden ist schwer zu erreichen, daher können Sie sich einfach dafür entscheiden, Ihre nächste kleinere Aufgabe in einer und die nachfolgende in der anderen zu erledigen. Oder holen Sie sich jeweils ein Einführungsbuch aus der Bibliothek, lesen Sie beide durch und sehen Sie, was Sie begeistert.

Steve Jessop
quelle
15

Haben Sie über Smalltalk nachgedacht? Es bietet eine sehr einfache, klare und erweiterbare Syntax mit Funktionen für Reflektivität und Selbstbeobachtung sowie eine vollständig integrierte Entwicklungsumgebung, die diese Funktionen nutzt. Schauen Sie sich zum Beispiel einige der Arbeiten an, die in Squeak Smalltalk ausgeführt werden. Viele Forscher, die Squeak verwenden, stehen auf der Squeak-Mailingliste und #squeak auf freenode ab, sodass Sie sehr einfach Hilfe bei komplexen Problemen erhalten können.

Weitere Indikatoren für die aktuelle Relevanz: Es läuft auf jeder Plattform, die Sie benennen möchten (einschließlich des iPhone ). Gilad Bracha stützt seine Newspeak-Arbeit auf Squeak; Das V8-Team hat sich bei Smalltalk-VMs die Zähne geschnitten . und Dan Ingalls und Randal Schwartz sind kürzlich nach Jahren in der Wildnis zu Smalltalk zurückgekehrt.

Viel Glück bei Ihrer Suche - lassen Sie uns wissen, was Sie am Ende entscheiden.

mykdavies
quelle
14

Lisp erfüllt alle Ihre Kriterien, einschließlich der Leistung, und ist die einzige Sprache, die keine (seltsame) Syntax hat. Wenn Sie es auf solch erstaunlich schlecht informierter / falscher Basis meiden und folglich die Erfahrung verpassen, z. B. Emacs + SLIME + CL zu verwenden, werden Sie sich selbst einen großen Nachteil erweisen.

user23611
quelle
4
Oder Sie können Clojure ausprobieren, was ich sehr schön finde.
Pupeno
1
Stark einverstanden. Wenn Sie die Kraft von Lisp wollen, tauchen Sie einfach ein und haben Sie es! Es ist eigentlich ziemlich einfach, sich an die Eltern zu gewöhnen; Sie sind keine so große Sache, wie die meisten Leute sie ausmachen.
Dan Burton
11

Ihre 4 "wichtigen" Punkte führen genau zu Ruby, während die 2 "etwas wichtigen" Punkte von Python regiert werden. So sei es.

Neo
quelle
11

Sie beschreiben Ruby.

  • Gute Metaprogrammierung. Möglichkeit zum Erstellen von Klassen, Methoden, Funktionen usw. zur Laufzeit. Vorzugsweise minimale Unterscheidung zwischen Code und Daten, Lisp-Stil.

Es ist sehr einfach, vorhandene Grundelemente zur Laufzeit zu erweitern und zu ändern. In Ruby ist alles ein Objekt, Zeichenfolgen, Ganzzahlen, sogar Funktionen.

Sie können auch Verknüpfungen für syntaktischen Zucker erstellen , z. B. mit class_eval .

  • Schöne, saubere, vernünftige Syntax und konsistente, intuitive Semantik. Grundsätzlich eine gut durchdachte, unterhaltsame, moderne Sprache.

Ruby folgt dem Prinzip der weniger Überraschung , und wenn Ruby-Code mit dem Äquivalent in einer anderen Sprache verglichen wird, halten viele Leute ihn für "schöner".

  • Mehrere Paradigmen. Kein Paradigma ist für jedes Projekt oder sogar jedes kleine Teilproblem innerhalb eines Projekts richtig.

Sie können imperativ, objektorientiert, funktional und reflektierend folgen.

  • Eine interessante Sprache, die tatsächlich die Art und Weise beeinflusst, wie man über Programmierung denkt.

Das ist sehr subjektiv, aber aus meiner Sicht ermöglicht die Fähigkeit, viele Paradigmen gleichzeitig zu verwenden, sehr interessante Ideen.

Ich habe Python ausprobiert und es passt nicht zu Ihren wichtigen Punkten.

FelipeC
quelle
11
-1 Ich benutze Python und es passt perfekt, Unterschiede zwischen Python und Ruby liegen in anderen Aspekten. Fanboy-artiger Krachmacher, das bist du.
gorsky
6
Viel geredet, aber kein Spaziergang. Möchten Sie in Python ein Beispiel für das dynamische Hinzufügen einer Methode bereitstellen, z. B. die String-Klasse?
FelipeC
6
@ John Das ist genau mein Punkt; Es ist sehr kompliziert und hässlich (ganz zu schweigen von der Unmöglichkeit für die String-Klasse). OTOH in Ruby ist es sehr einfach: "self.class.send (: define_method ,: method_name) {method_code}"
FelipeC
2
Ruby mag versuchen , dem PoLS zu folgen, aber ich würde nicht sagen, dass dies der Fall ist . Zum Beispiel wurde das lambda/ Proc.newmess hier auf SO als "überraschendes Verhalten" und "sehr eingängig" bezeichnet. :-) Jede Sprache, die so groß und komplex wie Ruby ist, muss solche verwirrenden Bereiche haben.
Ken
2
@Token Hier ist ein Beispiel für das Patchen von Affen Stringin Ruby für Metaprogrammierungszwecke: coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/… . Unterklassen würden nicht reichen; Eine einfache Funktion mit zwei Argumenten wäre jedoch.
P Shved
8

Vergleichen Sie Codebeispiele , die dasselbe tun (mit einer nicht leeren Newline-Beschreibung von Elementen aus einer myListListe verbinden), in verschiedenen Sprachen (Sprachen sind in umgekehrter alphabetischer Reihenfolge angeordnet):

Ruby :

myList.collect { |f| f.description }.select { |d| d != "" }.join("\n")

Oder

myList.map(&:description).reject(&:empty?).join("\n")

Python :

descriptions = (f.description() for f in mylist)
"\n".join(filter(len, descriptions)) 

Oder

"\n".join(f.description() for f in mylist if f.description())

Perl :

join "\n", grep { $_ } map { $_->description } @myList;

Oder

join "\n", grep /./, map { $_->description } @myList;

Javascript :

myList.map(function(e) e.description())
      .filter(function(e) e).join("\n")

Io :

myList collect(description) select(!="") join("\n")

Hier ist eine Io-Anleitung .

J. F. Sebastian
quelle
3
(Format nil "~ {~ a ~ ^ ~% ~}" (entferne nil (mapcar # 'description mylist)))
Rainer Joswig
schön, aber wo ist Metaprogrammierung hier? Es scheint sich um einen leicht funktionalen Stil zu handeln, der im Zusammenhang mit der Frage steht.
Inger
6

Ruby wäre besser als Lisp, wenn es darum geht , "Mainstream" zu sein (was auch immer das wirklich bedeutet, aber ein realistisches Problem ist, wie einfach es wäre, Antworten auf Ihre Fragen zur Lisp-Programmierung zu finden, wenn Sie damit anfangen würden.) Auf jeden Fall Ich fand Ruby sehr leicht zu erlernen. In der gleichen Zeit, die ich zum ersten Mal mit Python (oder anderen Sprachen) verbracht hatte, schrieb ich bald besseren Code viel effizienter als jemals zuvor. Das ist jedoch nur die Meinung einer Person; Nimm es mit einem Körnchen Salz, denke ich. Ich weiß zu diesem Zeitpunkt viel mehr über Ruby als Python oder Lisp, aber Sie sollten wissen, dass ich eine ganze Weile eine Python-Person war, bevor ich wechselte.

Lisp ist definitiv ziemlich cool und einen Blick wert; Wie Sie sagten, kann sich die Größe der Community usw. sehr schnell ändern. Davon abgesehen ist die Größe selbst nicht so wichtig wie die Qualität der Community. Zum Beispiel ist der #ruby-langKanal immer noch mit unglaublich klugen Leuten gefüllt. Lisp scheint auch einige wirklich kluge Leute anzulocken. Ich kann nicht viel über die Python-Community sprechen, da ich nicht viel Erfahrung aus erster Hand habe, aber sie scheint manchmal "zu groß" zu sein. (Ich erinnere mich, dass die Leute auf ihrem IRC-Kanal ziemlich unhöflich waren, und was ich von Freunden gehört habe, die Python wirklich mögen, scheint eher die Regel als die Ausnahme zu sein.)

Einige Ressourcen, die Sie möglicherweise nützlich finden, sind:

1) Die Ruby Metaprogramming-Reihe der Pragmatischen Programmierer ( http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming ) - nicht kostenlos, aber die späteren Folgen sind ziemlich faszinierend. (Der Code ist kostenlos, wenn Sie ihn herunterladen und sehen möchten, was Sie lernen würden.)

2) Über Lisp von Paul Graham ( http://www.paulgraham.com/onlisp.html ). Es ist ein bisschen alt, aber es ist ein Klassiker (und kostenlos herunterladbar).

Benjamin Oakes
quelle
5

Ich verwende Python für viele Projekte und ich denke, Python bietet alle Funktionen, nach denen Sie gefragt haben.

wichtig:

  1. Metaprogrammierung: Python unterstützt Metaklassen und die Generierung von Laufzeitklassen / -methoden usw.
  2. Syntax: Nun, das ist irgendwie subjektiv. Ich mag die Pythons-Syntax wegen ihrer Einfachheit, aber einige Leute beschweren sich, dass Python Whitespace-empfindlich ist.
  3. Paradigmen: Python unterstützt prozedurale, objektorientierte und grundlegende funktionale Programmierung.
  4. Ich denke, Python hat einen sehr praktisch orientierten Stil, es war sehr inspirierend für mich.

Etwas wichtig:

  1. Leistung: Nun, es ist eine Skriptsprache. Das Schreiben von C-Erweiterungen für Python ist jedoch eine gängige Optimierungspraxis.
  2. Dokumentation: Ich kann mich nicht beschweren. Es ist nicht so detailliert, wie jemand von Java weiß, aber es ist gut genug.

Als Student möchten Sie vielleicht dieses Papier lesen, in dem behauptet wird, Python sei alles, was ein Wissenschaftler braucht . Leider kann ich Python nicht mit Ruby vergleichen, da ich diese Sprache nie verwendet habe.

Grüße, Dennis

Xardien
quelle
3
Python ist nicht Whitespace-empfindlich. Es ist einrückungsempfindlich.
JFS
5

@ Jason Ich bin nicht einverstanden. Es gibt Unterschiede, die Ruby Python für die Metaprogrammierung überlegen machen - sowohl philosophisch als auch pragmatisch. Für den Anfang erhält Ruby die Vererbung mit Single Inheritance und Mixins . Und wenn es um Metaprogrammierung geht, muss man einfach verstehen, dass es nur um das Selbst geht . Der kanonische Unterschied besteht darin, dass Sie in Ruby zur Laufzeit Zugriff auf das Selbstobjekt haben - in Python nicht!

Im Gegensatz zu Python gibt es in Ruby keine separate Kompilierungs- oder Laufzeitphase. In Ruby wird jede Codezeile für ein bestimmtes Selbstobjekt ausgeführt . In Ruby erbt jede Klasse sowohl von einem Objekt als auch von einer versteckten Metaklasse. Dies sorgt für eine interessante Dynamik:

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

Verwenden von self.name greift auf die Metaklasse Ninja Klassen Name Methode den Klassennamen von Ninja zurückzukehren. Blüht die Metaprogrammierung in Python so schön? Ich bezweifle es aufrichtig!

Eric Davidson
quelle
4

Wenn Ihnen die Lisp-Syntax nicht gefällt, ist Assembler vielleicht der richtige Weg. :-)

Es hat sicherlich nur eine minimale Unterscheidung zwischen Code und Daten, ist ein Multiparadigma (oder vielleicht ist das kein Paradigma) und es ist eine (erweiterte) Erfahrung, die den Verstand erweitert, sowohl in Bezug auf das Lernen als auch auf die Tricks, die Sie ausführen können.

Rickardg
quelle
Ich glaube, ich habe mehr Metaprogrammierung in Assemblersprache durchgeführt als in jeder anderen Sprache. Code ist Daten und Daten können versuchen, Code zu sein. Und Daten sind nicht signiert oder nicht signiert, sondern der Opcode entscheidet.
Nosredna
1
Ich habe Assembler-Code, von dem Sie behaupten könnten, er sei OO. Es gibt Dinge, die eher wie Methoden aussehen - Sie nennen die, die von der "Klasse" abhängt.
Justintime
4

Io erfüllt alle Ihre "wichtigen" Punkte. Ich glaube nicht, dass es eine bessere Sprache gibt, um verrückte Meta-Hacker zu betreiben.

Frigolitmonster
quelle
Danke dafür, wusste es nicht. Sieht auf den ersten Blick lustig aus, vielleicht viel (()), aber trotzdem. Ich hoffe, ich finde bald die Zeit, einen Blick darauf zu werfen.
flq
3

eine, die die Metaprogrammierungs-Hacks unterstützt, die in einer statisch kompilierten Sprache einfach nicht möglich sind

Ich würde gerne eine Sprache finden, die einige der coolen Sachen erlaubt, die Lisp macht

Lisp kann kompiliert werden.

RHSeeger
quelle
3

Hast du Rebol ausprobiert?

Anon
quelle
3

Meine Antwort wäre weder. Ich kenne beide Sprachen, habe einen Kurs über Ruby besucht und programmiere seit mehreren Jahren in Python. Lisp ist gut in der Metaprogrammierung, da sein einziger Zweck darin besteht, Listen zu transformieren. Sein eigener Quellcode ist nur eine Liste von Token, sodass die Metaprogrammierung natürlich ist. Die drei Sprachen, die mir für diese Art von Dingen am besten gefallen, sind Rebol, Forth und Factor. Rebol ist eine sehr starke Dialektsprache, die Code aus ihrem Eingabestream entnimmt, einen Ausdruck gegen ihn ausführt und ihn mithilfe von in der Sprache geschriebenen Regeln transformiert. Sehr ausdrucksstark und sehr gut im Dialektieren. Factor und Forth sind mehr oder weniger vollständig von der Syntax getrennt, und Sie programmieren sie, indem Sie Wörter definieren und aufrufen. Sie sind in der Regel meist in ihrer eigenen Sprache verfasst. Sie schreiben keine Bewerbungen im herkömmlichen Sinne. Sie erweitern die Sprache, indem Sie Ihre eigenen Wörter schreiben, um Ihre spezielle Anwendung zu definieren. Faktor kann besonders schön sein, da er viele Funktionen hat, die ich nur in Smalltalk zum Auswerten und Arbeiten mit Quellcode gesehen habe. Ein wirklich schöner Arbeitsbereich, interaktive Dokumente usw.

ToddB
quelle
2

Es gibt nicht wirklich viel, um Python und Ruby zu trennen. Ich würde sagen, die Python-Community ist größer und reifer als die Ruby-Community, und das ist wirklich wichtig für mich. Ruby ist eine flexiblere Sprache, die positive und negative Auswirkungen hat. Ich bin mir jedoch sicher, dass es viele Leute geben wird, die sich mit diesen beiden Sprachen befassen, also werde ich eine dritte Option in den Ring werfen. Wie wäre es mit JavaScript?

JavaScript wurde ursprünglich als Schema für das Web entwickelt und basiert auf Prototypen. Dies ist ein Vorteil gegenüber Python und Ruby, wenn es um Multi-Paradigmen und Metaprogrammierung geht. Die Syntax ist nicht so gut wie die beiden anderen, aber es ist wahrscheinlich die am weitesten verbreitete Sprache, und die Leistung wird von Tag zu Tag besser.

Jim
quelle
2

Wenn Sie das Code-is-Data-Konzept im Lisp-Stil mögen, aber die Lispy-Syntax nicht mögen, ist Prolog vielleicht eine gute Wahl.

Ob dies als "unterhaltsame, moderne Sprache" qualifiziert ist, überlasse ich anderen. ;-);

JesperE
quelle
2

Ruby ist meine Wahl, nachdem ich Python, Smalltalk und Ruby erkundet habe.

ryw
quelle
2

Was ist mit OCaml?

OCaml-Funktionen: ein statisches Typsystem, Typinferenz, parametrischer Polymorphismus, Schwanzrekursion, Mustervergleich, erstklassige lexikalische Verschlüsse, Funktoren (parametrische Module), Ausnahmebehandlung und inkrementelle automatische Speicherbereinigung für Generationen.

Ich denke, dass es Folgendes erfüllt:

Wichtig:

  1. Schöne, saubere, vernünftige Syntax und konsistente, intuitive Semantik. Grundsätzlich eine gut durchdachte, unterhaltsame, moderne Sprache.
  2. Mehrere Paradigmen. Kein Paradigma ist für jedes Projekt oder sogar jedes kleine Teilproblem innerhalb eines Projekts richtig.
  3. Eine interessante Sprache, die tatsächlich die Art und Weise beeinflusst, wie man über Programmierung denkt.

Etwas wichtig:

  1. Performance. Es wäre schön, wenn die Leistung anständig wäre, aber wenn Leistung eine echte Priorität ist, verwende ich stattdessen D.
  2. Gut dokumentiert.
Robert Vuković
quelle
Mit OCaml können Sie zur Laufzeit Klassen / Methoden erstellen? Wie funktioniert das?
Jason Creighton
Ich habe gerade über OCaml gelesen und vielleicht kann es zur Laufzeit keine Inhalte erstellen, also habe ich es entfernt.
Robert Vuković
2

Ich habe Python ein bisschen benutzt, aber viel mehr Ruby. Ich würde jedoch argumentieren, dass beide das liefern, wonach Sie gefragt haben.

Wenn ich alle Ihre vier Punkte sehe, können Sie zumindest Folgendes überprüfen: http://www.iolanguage.com/

Und Mozart / Oz könnte auch für Sie interessant sein: http://mozart.github.io/

Grüße Friedrich

Friedrich
quelle
1

Informationen zur Syntax im Python-Stil und zu lisp-ähnlichen Makros (Makros, bei denen es sich um echten Code handelt) sowie zu gutem DSL finden Sie unter Konvergenz .

Kasprzol
quelle
1

Ich bin nicht sicher, ob Python alle gewünschten Dinge erfüllen würde (insbesondere den Punkt über die minimale Unterscheidung zwischen Code und Daten), aber es gibt ein Argument für Python. Es gibt ein Projekt, mit dem Sie problemlos Erweiterungen für Python in D programmieren können, damit Sie das Beste aus beiden Welten genießen können. http://pyd.dsource.org/celerid.html

Mauli
quelle
1

Wenn du die Rose liebst, musst du lernen, mit den Dornen zu leben :)

AgentOrange
quelle
1

Ich würde empfehlen, dass Sie mit Ruby gehen.

Als ich anfing, es zu lernen, fand ich es wirklich einfach, es zu lernen.

Mardix
quelle
1

Mischen Sie Ruby-Programmiersprache nicht mit Ruby-Implementierungen, da POSIX-Threads in Ruby nicht möglich sind.

Sie können einfach mit pthread-Unterstützung kompilieren, und dies war bereits zum Zeitpunkt der Erstellung dieses Threads möglich , wenn Sie das Wortspiel entschuldigen.

Die Antwort auf diese Frage ist einfach. Wenn Sie Lisp mögen, werden Sie wahrscheinlich Rubin bevorzugen. Oder was auch immer du magst.

nonanonym
quelle
0

Ich schlage vor, dass Sie beide Sprachen ausprobieren und diejenige auswählen, die Sie anspricht. Sowohl Python als auch Ruby können tun, was Sie wollen.

Lesen Sie auch diesen Thread .

Alexander Kojevnikov
quelle
0

Gehen Sie mit JS und sehen Sie sich AJS (Alternative JavaScript Syntax) unter meinem Github http://github.com/visionmedia an. Dadurch erhalten Sie einige sauberer aussehende Verschlüsse usw .: D.

TJ Holowaychuk
quelle
0

In Bezug auf Ihren Hauptpunkt (Metaprogrammierung): In Version 1.6 von Groovy ist die AST-Programmierung (Abstract Syntax Tree) als Standard- und integrierte Funktion integriert. Ruby hat RubyParser, aber es ist ein Add-On.

groovig
quelle