Python vs Ruby pour la métaprogrammation [fermé]

90

Je suis actuellement principalement un programmeur D et je cherche à ajouter un autre langage à ma boîte à outils, de préférence un langage qui prend en charge les hacks de métaprogrammation qui ne peuvent tout simplement pas être effectués dans un langage compilé statiquement comme D.

J'ai lu un peu sur Lisp et j'aimerais trouver un langage qui permette certains des trucs sympas que fait Lisp, mais sans la syntaxe étrange, etc. de Lisp. Je ne veux pas lancer une guerre des flammes du langage, et je suis sûr que Ruby et Python ont leurs compromis, donc je vais énumérer ce qui est important pour moi personnellement. Veuillez me dire si Ruby, Python ou un autre langage serait le meilleur pour moi.

Important:

  1. Bonne métaprogrammation. Possibilité de créer des classes, des méthodes, des fonctions, etc. au moment de l'exécution. De préférence, distinction minimale entre le code et les données, style Lisp.
  2. Syntaxe agréable, propre et saine et sémantique cohérente et intuitive. Fondamentalement, un langage moderne bien pensé et amusant à utiliser.
  3. De multiples paradigmes. Aucun paradigme ne convient à chaque projet, ni même à chaque petit sous-problème d'un projet.
  4. Un langage intéressant qui affecte en fait la façon dont on pense la programmation.

Assez important:

  1. Performance. Ce serait bien si les performances étaient correctes, mais lorsque les performances sont une vraie priorité, j'utiliserai D à la place.
  2. Bien documenté.

Pas important:

  1. Taille de la communauté, disponibilité des bibliothèques, etc. Aucune de ces caractéristiques n'est caractéristique de la langue elle-même, et toutes peuvent changer très rapidement.
  2. Disponibilité d'emploi. Je ne suis pas un programmeur professionnel à plein temps. Je suis un étudiant diplômé et la programmation est tangentiellement pertinente à ma recherche.
  3. Toutes les fonctionnalités qui sont principalement conçues avec de très grands projets travaillés par un million de singes de code à l'esprit.
dsimcha
la source
1
+1 Pour une question généralement bien posée.
Triptyque
Malheureusement, les réponses les mieux notées disent toutes fondamentalement "cela dépend" et les réponses les plus basses sont essentiellement une guerre de flamme Python vs Ruby.
Dan Burton
Avez-vous envisagé Clojure?
Mark Thomas
La réponse est Julia ! Cela n'existait tout simplement pas à l'époque: bit.ly/julia_meta ... réjouissez-vous! Julia couvre tous les points importants énumérés par @dsimcha, ainsi que les performances et tous les autres points deviennent réalité à mesure que Julia continue de mûrir.
SalchiPapa

Réponses:

15

Il n'y a pas vraiment de différence énorme entre python et ruby, du moins au niveau idéologique. Pour la plupart, ce ne sont que des saveurs différentes de la même chose. Ainsi, je recommanderais de voir lequel correspond le plus à votre style de programmation.

Jason Baker
la source
30
Il n'y a certainement pas la même chose. Le look est similaire en surface, mais si vous utilisez les fonctionnalités les plus puissantes de Ruby, vous comprenez que Python n'est tout simplement pas un match. Pour un exemple, essayez d'écrire un DSL en Ruby plutôt que d'écrire un Python, ou de créer une fonction, des méthodes, des classes, etc. au moment de l'exécution. C'est beaucoup plus simple dans Ruby.
FelipeC
14
Il n'est pas rare que vous ayez besoin de faire de la métaprogrammation, c'est juste rare que cela soit fait. Tous les programmes, sauf le plus trivial, ont des modèles répétitifs qui ne relèvent pas des outils de refactoring habituels, mais qui pourraient être facilement éliminés par métaprogrammation.
Wayne Conrad
10
Ruby et Python sont extrêmement différents même pour les idées qui régissent leur conception. Python, ils en veulent un et, espérons-le, une façon évidente de faire les choses. Cela rend généralement le langage moins expressif que Ruby, mais le rend plus cohérent. Ruby vient un peu plus de la manière Perl de faire les choses où il y a plusieurs façons de faire les choses. Ruby facilite également certaines choses et inclut en fait l'idée de membres privés. Python, d'un autre côté, rend tout au plus quelque chose de plus difficile à faire, vous devez donc être plus explicite (comme ajouter ou remplacer un comportement sur des classes).
Seanenhaver
5
Vous devriez probablement suivre un cours intensif sur les deux, mais pour une métaprogrammation facile, il semble que Ruby est plus adapté. Je n'ai pas beaucoup d'expérience cependant, alors prenez cela avec un grain de sel.
Seanenhaver
7
Ruby et Python ne sont similaires que dans le fait qu'ils prêchent le "beau code". Ils ont juste des points de vue totalement différents sur cette beauté (ce que l'OMI est bon)
Gabi Purcaru
69

J'ai lu un peu sur Lisp et j'aimerais trouver un langage qui permette certains des trucs sympas que fait Lisp, mais sans la syntaxe étrange, etc. de Lisp.

N'aurions-nous pas tous.

distinction minimale entre code et données, style Lisp

Malheureusement, la distinction minimale entre le code et les données et la syntaxe «étrange» sont des conséquences l'une de l'autre.

Si vous voulez une syntaxe facile à lire, vous avez Python. Cependant, le code n'est pas représenté dans l' une des structures de données couramment utilisées intégré. Il échoue - comme la plupart des langues - dans l'élément n ° 1 de votre liste «importante». Cela rend difficile de fournir une aide utile.

Vous ne pouvez pas tout avoir. N'oubliez pas que vous n'êtes pas le premier à avoir cette pensée. Si quelque chose comme votre langage idéal existait, nous l'utilisions tous. Étant donné que le monde réel ne correspond pas à vos idéaux, vous devrez redéfinir la priorité de votre liste de souhaits. La section «important» doit être réorganisée pour identifier ce qui est vraiment important pour vous.

S.Lott
la source
3
J'ai trouvé que de nombreux langages implémentent des macros de type Lisp dans des syntaxes non Lispy et ce qui se termine, c'est que l'écriture de macros là-bas est très difficile, car personne ne connaît naturellement les structures de données dans lesquelles le code est représenté, donc l'écriture de macros devient trop difficile et personne ne le fait.
pupeno
11
Les gens trouvent Lisp difficile à lire parce qu'ils ne connaissent pas la syntaxe. Je trouve Lisp beaucoup plus facile à lire que C # (mais plus difficile que Python).
Jules
1
Je suis largement d'accord avec ce point, mais mon expérience à la fois de Ruby et de Lisp montre que l'ancien est aussi bon pour la métaprogrammation que sans les parenthèses. D'autres alternatives qui se rapprochent pourraient être TCL et JavaScript mais je ne les favoriserais pas pour d'autres raisons.
entier le
Il y a longtemps, il y avait un langage appelé Dylan qui devrait être exactement cela.
Friedrich
17

Honnêtement, en ce qui concerne les installations de métaprogrammation, Ruby et Python sont beaucoup plus similaires que certains de leurs adhérents aiment l'admettre. Cet examen des deux langues offre une assez bonne comparaison / critique:

Alors, choisissez-en un en fonction de certains critères. Peut-être que vous aimez Rails et souhaitez étudier ce code. Peut-être que SciPy est votre truc. Regardez l'écosystème des bibliothèques, de la communauté, etc., et choisissez-en une. Vous ne perdrez certainement pas un certain nirvana de métaprogrammation en fonction de votre choix.

ars
la source
cette entrée de blog semble avoir plus à voir avec les préférences personnelles (assez juste mais la beauté est dans l'œil du spectateur), plutôt que la métaprogrammation - qui était le point principal de l'OP.
entier le
16

Clause de non-responsabilité: je ne travaille que dans l'une ou l'autre langue, mais j'ai au moins écrit de petits programmes de travail (pas seulement des scripts rapides, pour lesquels j'utilise Perl, bash ou GNU make) dans les deux.

Ruby peut être très agréable pour le point 3 des «paradigmes multiples», car il travaille dur pour faciliter la création de langages spécifiques à un domaine. Par exemple, naviguez en ligne et regardez quelques morceaux de code Ruby on Rails et quelques morceaux de code Rake. Ils sont tous les deux Ruby, et vous pouvez voir les similitudes, mais ils ne ressemblent pas à ce que vous pensez normalement être le même langage.

Python me semble être un peu plus prévisible (peut-être corrélé au point 2 `` propre '' et `` sain d'esprit ''), mais je ne sais pas vraiment si c'est à cause du langage lui-même ou simplement qu'il est généralement utilisé par des personnes avec des valeurs différentes . Je n'ai jamais tenté de magie profonde en Python. Je dirais certainement que les deux langues sont bien pensées.

Les deux scores bien en 1 et 4. [Edit: en fait 1 est assez discutable - il y a "eval" dans les deux, comme commun dans les langages interprétés, mais ils sont à peine conceptuellement purs. Vous pouvez définir des fermetures, attribuer des méthodes aux objets, etc. Je ne sais pas si cela va aussi loin que vous le souhaitez.]

Personnellement, je trouve Ruby plus amusant, mais c'est en partie parce qu'il est plus facile de se laisser distraire en pensant à des façons sympas de faire les choses. J'ai en fait davantage utilisé Python. Parfois, vous ne voulez pas être cool, vous voulez continuer donc c'est fait avant le coucher ...

Aucun d'entre eux n'est difficile à aborder, vous pouvez donc simplement décider de faire votre prochaine tâche mineure dans l'un, et l'autre dans l'autre. Ou prenez un livre d'introduction sur chacun dans la bibliothèque, lisez-les tous les deux et voyez ce qui vous attire.

Steve Jessop
la source
15

Avez-vous envisagé Smalltalk? Il offre une syntaxe très simple, claire et extensible avec des capacités de réflectivité et d'introspection et un environnement de développement entièrement intégré qui tire parti de ces capacités. Jetez un œil à certains des travaux effectués dans Squeak Smalltalk par exemple. De nombreux chercheurs utilisant Squeak se retrouvent sur la liste de diffusion Squeak et #squeak sur freenode, afin que vous puissiez obtenir de l'aide sur des problèmes complexes très facilement.

Autres indicateurs de sa pertinence actuelle: il fonctionne sur n'importe quelle plateforme que vous voudriez nommer (y compris l' iPhone ); Gilad Bracha fonde son travail sur Newspeak sur Squeak; l'équipe V8 a fait ses armes sur les VM Smalltalk ; et Dan Ingalls et Randal Schwartz sont récemment retournés au travail de Smalltalk après des années dans la nature.

Bonne chance dans votre recherche - dites-nous ce que vous décidez à la fin.

mykdavies
la source
14

Lisp satisfait tous vos critères, y compris les performances, et c'est le seul langage qui n'a pas de syntaxe (étrange). Si vous l'évitez sur une base si étonnamment mal informée / mal avisée et que vous manquez par conséquent l'expérience de l'utilisation par exemple d'Emacs + SLIME + CL, vous vous rendrez un très mauvais service.

user23611
la source
4
Ou vous pouvez essayer Clojure, que je trouve très sympa.
pupeno
1
Tout à fait d'accord. Si vous voulez la puissance de Lisp, plongez-vous et ayez-la! Il est en fait assez facile de s'habituer aux parents; ils ne sont pas aussi importants que la plupart des gens le prétendent.
Dan Burton
11

Vos 4 points "importants" mènent exactement à Ruby, tandis que les 2 points "assez importants" gouvernés par Python. Ainsi soit-il.

Néo
la source
11

Vous décrivez Ruby.

  • Bonne métaprogrammation. Possibilité de créer des classes, des méthodes, des fonctions, etc. au moment de l'exécution. De préférence, distinction minimale entre le code et les données, style Lisp.

Il est très facile d'étendre et de modifier les primitives existantes au moment de l'exécution. Dans ruby, tout est un objet, des chaînes, des entiers, même des fonctions.

Vous pouvez également créer des raccourcis pour le sucre syntaxique, par exemple avec class_eval .

  • Syntaxe agréable, propre et saine et sémantique cohérente et intuitive. Fondamentalement, un langage moderne bien pensé et amusant à utiliser.

Ruby suit le principe de moins de surprise , et en comparant le code Ruby à l'équivalent dans un autre langage, beaucoup de gens le considèrent plus "beau".

  • De multiples paradigmes. Aucun paradigme ne convient à chaque projet, ni même à chaque petit sous-problème d'un projet.

Vous pouvez suivre impératif, orienté objet, fonctionnel et réfléchi.

  • Un langage intéressant qui affecte en fait la façon dont on pense la programmation.

C'est très subjectif, mais de mon point de vue, la possibilité d'utiliser plusieurs paradigmes en même temps permet des idées très intéressantes.

J'ai essayé Python et cela ne correspond pas à vos points importants.

FelipeC
la source
11
-1 J'utilise Python et cela correspond parfaitement, les différences entre Python et Ruby se situent dans d'autres aspects. Bruiteur fanboy-ish, vous êtes.
gorsky
6
Beaucoup de discussions mais pas de marche. Voulez-vous fournir un exemple en Python d'ajout dynamique d'une méthode pour dire, la classe String?
FelipeC
6
@john C'est précisément mon point; c'est très compliqué et moche (pour ne pas mentionner impossible pour la classe String). OTOH dans Ruby c'est très simple: "self.class.send (: define_method,: method_name) {method_code}"
FelipeC
2
Ruby peut essayer de suivre le PoLS, mais je ne dirais pas qu'il le fait . Par exemple, le lambda/ Proc.newmess a été appelé "comportement surprenant" et "hautement contre-intuitif" ici sur SO. :-) Toute langue aussi grande et complexe que Ruby est liée à de telles zones déroutantes.
Ken
2
@Token voici un exemple de monkey-patching Stringdans Ruby à des fins de métaprogrammation: coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/… . Le sous-classement ne ferait pas l'affaire; cependant, une simple fonction à deux arguments le ferait.
P Shved
8

Comparez les exemples de code qui font la même chose (joindre avec une nouvelle ligne des descriptions non vides des éléments d'une myListliste) dans différentes langues (les langues sont organisées dans l'ordre alphabétique inverse):

Rubis :

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

Ou

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

Python :

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

Ou

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

Perl :

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

Ou

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")

Voici un guide Io .

J.F. Sebastian
la source
3
(format nil "~ {~ a ~ ^ ~% ~}" (supprimer nil (mapcar # 'description mylist)))
Rainer Joswig
sympa, mais où est la métaprogrammation ici? cela semble être un style légèrement fonctionnel, lié à distance à la question.
entier le
6

Ruby serait meilleur que Lisp en termes de "grand public" (quoi que cela signifie vraiment , mais une préoccupation réaliste est de savoir à quel point il serait facile de trouver des réponses à vos questions sur la programmation Lisp si vous deviez aller avec ça.) Dans tous les cas , J'ai trouvé Ruby très facile à prendre. Dans le même temps que j'avais passé pour la première fois à apprendre Python (ou d'autres langages d'ailleurs), j'ai rapidement écrit un meilleur code beaucoup plus efficacement que jamais auparavant. C'est juste l'opinion d'une personne, cependant; prenez-le avec un grain de sel, je suppose. J'en sais beaucoup plus sur Ruby à ce stade que sur Python ou Lisp, mais sachez que j'étais une personne Python pendant un bon moment avant de changer.

Lisp est vraiment cool et vaut la peine d'être examiné; comme vous l'avez dit, la taille de la communauté, etc. peut changer assez rapidement. Cela étant dit, la taille elle-même n'est pas aussi importante que la qualité de la communauté. Par exemple, la #ruby-langchaîne est toujours remplie de personnes incroyablement intelligentes. Lisp semble aussi attirer des personnes très intelligentes. Je ne peux pas parler beaucoup de la communauté Python car je n'ai pas beaucoup d'expérience de première main, mais elle semble parfois "trop ​​grande". (Je me souviens que les gens étaient assez impolis sur leur canal IRC, et d'après ce que j'ai entendu d'amis qui aiment vraiment Python, cela semble être la règle plutôt que l'exception.)

Quoi qu'il en soit, certaines ressources que vous pourriez trouver utiles sont:

1) La série Pragmatic Programmers Ruby Metaprogramming ( http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming ) - pas gratuite, mais les derniers épisodes sont assez intrigants. (Le code est gratuit, si vous souhaitez le télécharger et voir ce que vous allez apprendre.)

2) Sur Lisp par Paul Graham ( http://www.paulgraham.com/onlisp.html ). C'est un peu vieux, mais c'est un classique (et téléchargeable gratuitement).

Benjamin Oakes
la source
5

J'utilise Python pour de nombreux projets et je pense que Python fournit toutes les fonctionnalités que vous avez demandées.

important:

  1. Métaprogrammation: Python prend en charge les métaclasses et la génération de classes / méthodes d'exécution, etc.
  2. Syntaxe: Eh bien, c'est en quelque sorte subjectif. J'aime la syntaxe de Pythons pour sa simplicité, mais certaines personnes se plaignent que Python est sensible aux espaces.
  3. Paradigmes: Python prend en charge la programmation fonctionnelle de base, orientée objet et procédurale.
  4. Je pense que Python a un style très pratique, c'était très inspirant pour moi.

Assez important:

  1. Performance: Eh bien, c'est un langage de script. Mais l'écriture d'extensions C pour Python est une pratique d'optimisation courante.
  2. Documentation: je ne peux pas me plaindre. Ce n'est pas aussi détaillé que quelqu'un peut le savoir de Java, mais c'est assez bon.

Comme vous êtes étudiant, vous voudrez peut-être lire cet article en affirmant que Python est tout ce dont un scientifique a besoin . Malheureusement, je ne peux pas comparer Python à Ruby, car je n'ai jamais utilisé ce langage.

Cordialement, Dennis

xardias
la source
3
Python n'est pas sensible aux espaces Il est sensible à l'indentation.
jfs
5

@Jason Je suis respectivement en désaccord. Il existe des différences qui rendent Ruby supérieur à Python pour la métaprogrammation - à la fois philosophique et pragmatique. Pour commencer, Ruby obtient l'héritage juste avec l'héritage unique et les mixins . Et quand il s'agit de métaprogrammation, vous devez simplement comprendre que tout est une question de soi . La différence canonique ici est que dans Ruby, vous avez accès à l' objet self au moment de l'exécution - en Python, ce n'est pas le cas!

Contrairement à Python, dans Ruby, il n'y a pas de phase de compilation ou d'exécution distincte. Dans Ruby, chaque ligne de code est exécutée sur un objet self particulier . Dans Ruby, chaque classe hérite à la fois d'un objet et d'une métaclasse masquée. Cela donne une dynamique intéressante:

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

L'utilisation de self.name accède à la méthode de nom de métaclasse des classes Ninja pour renvoyer le nom de classe de Ninja. La métaprogrammation fleurit-elle si belle en Python? J'en doute sincèrement!

Eric Davidson
la source
4

Eh bien, si vous n'aimez pas la syntaxe lisp, peut-être que l'assembleur est la solution. :-)

Il a certainement une distinction minime entre le code et les données, est multi-paradigme (ou peut-être pas de paradigme) et c'est une expérience en expansion (si fastidieuse) à la fois en termes d'apprentissage et de trucs que vous pouvez faire.

Rickardg
la source
Je pense que j'ai fait plus de métaprogrammation en langage assembleur que dans tout autre langage. Le code est des données et les données peuvent essayer d'être du code. Et les données ne sont ni signées ni non signées, c'est l'opcode qui décide.
Nosredna
1
J'ai du code assembleur que vous pourriez prétendre être OO. Il a des choses qui ressemblent plutôt à des méthodes - vous appelez celle qui dépend de la "classe".
justintime
4

Io satisfait tous vos points "importants". Je ne pense pas qu'il existe un meilleur langage pour faire du méta-piratage fou.

frigolitmonster
la source
Merci pour ça, je ne le savais pas. Ça a l'air amusant à première vue, peut-être beaucoup de (()) mais de toute façon. J'espère que je trouverai le temps de jeter un coup d'œil, bientôt.
flq
3

celui qui prend en charge les hacks de métaprogrammation qui peuvent pas être effectués dans un langage compilé statiquement

J'aimerais trouver un langage qui permette certains des trucs sympas que Lisp ne

Lisp peut être compilé.

RHSeeger
la source
3

Avez-vous essayé Rebol?

Anon
la source
3

Ma réponse ne serait ni l'un ni l'autre. Je connais les deux langages, j'ai suivi un cours sur Ruby et je programme en python depuis plusieurs années. Lisp est bon pour la métaprogrammation car son seul but est de transformer des listes, son propre code source n'est qu'une liste de jetons donc la métaprogrammation est naturelle. Les trois langues que j'aime le mieux pour ce type de chose sont Rebol, Forth et Factor. Rebol est un langage de dialecte très puissant qui prend le code de son flux d'entrée, exécute une expression contre lui et le transforme en utilisant des règles écrites dans le langage. Très expressif et extrêmement bon en dialecte. Factor et Forth sont plus ou moins complètement séparés de la syntaxe et vous les programmez en définissant et en appelant des mots. Ils sont généralement rédigés dans leur propre langue. Vous n'écrivez pas d'applications au sens traditionnel du terme, vous étendez la langue en écrivant vos propres mots pour définir votre application particulière. Factor peut être particulièrement intéressant car il possède de nombreuses fonctionnalités que je n'ai vues que dans smalltalk pour évaluer et travailler avec le code source. Un très bel espace de travail, des documents interactifs, etc.

ToddB
la source
2

Il n'y a pas vraiment grand-chose à séparer Python et Ruby. Je dirais que la communauté Python est plus grande et plus mature que la communauté Ruby, et c'est vraiment important pour moi. Le rubis est un langage plus flexible, qui a des répercussions positives et négatives. Cependant, je suis sûr qu'il y aura beaucoup de gens pour entrer dans les détails sur ces deux langues, donc je vais jeter une troisième option dans le ring. Et JavaScript?

JavaScript a été initialement conçu pour être Scheme pour le Web, et il est basé sur un prototype, ce qui est un avantage par rapport à Python et Ruby en ce qui concerne le multi-paradigme et la métaprogrammation. La syntaxe n'est pas aussi agréable que les deux autres, mais c'est probablement le langage le plus largement déployé et les performances s'améliorent chaque jour.

Jim
la source
2

Si vous aimez le concept code-is-data de style lisp, mais que vous n'aimez pas la syntaxe Lispy, peut-être que Prolog serait un bon choix.

Que cela soit qualifié de "langage moderne et amusant", je laisserai aux autres le soin de juger. ;-)

JesperE
la source
2

Ruby est mon choix après avoir exploré Python, Smalltalk et Ruby.

ryw
la source
2

Et OCaml?

Fonctionnalités d'OCaml: un système de type statique, l'inférence de type, le polymorphisme paramétrique, la récursivité de la queue, la correspondance de modèles, les fermetures lexicales de première classe, les foncteurs (modules paramétriques), la gestion des exceptions et le ramasse-miettes automatique générationnel incrémentiel.

Je pense que cela satisfait ce qui suit:

Important:

  1. Syntaxe agréable, propre et saine et sémantique cohérente et intuitive. Fondamentalement, un langage moderne bien pensé et amusant à utiliser.
  2. De multiples paradigmes. Aucun paradigme ne convient à chaque projet, ni même à chaque petit sous-problème d'un projet.
  3. Un langage intéressant qui affecte en fait la façon dont on pense la programmation.

Assez important:

  1. Performance. Ce serait bien si les performances étaient correctes, mais lorsque les performances sont une vraie priorité, j'utiliserai D à la place.
  2. Bien documenté.
Robert Vuković
la source
OCaml vous permet de créer des classes / méthodes au moment de l'exécution? Comment ça marche?
Jason Creighton le
Je viens de lire sur OCaml et peut-être qu'il ne peut pas créer de trucs au moment de l'exécution, je l'ai donc supprimé.
Robert Vuković
2

J'utilise un peu Python, mais beaucoup plus Ruby. Cependant, je dirais qu'ils fournissent tous les deux ce que vous avez demandé.

Si je vois tous vos quatre points, vous pouvez au moins vérifier: http://www.iolanguage.com/

Et Mozart / Oz peut être intéressant pour vous aussi: http://mozart.github.io/

Cordialement Friedrich

Friedrich
la source
1

Pour la syntaxe de style python et les macros de type lisp (macros qui sont du vrai code) et un bon DSL, voir converger .

Kasprzol
la source
1

Je ne suis pas sûr que Python remplisse tout ce que vous désirez (en particulier le point sur la distinction minimale entre le code et les données), mais il y a un argument en faveur de python. Il existe un projet qui vous permet de programmer facilement des extensions pour python en D, afin que vous puissiez avoir le meilleur des deux mondes. http://pyd.dsource.org/celerid.html

Mauli
la source
1

si vous aimez la rose, vous devez apprendre à vivre avec les épines :)

Agent orange
la source
1

Je vous recommanderais d'aller avec Ruby.

Quand j'ai commencé à l'apprendre, je l'ai trouvé très facile à comprendre.

Mardix
la source
1

Ne pas mélanger le langage de programmation Ruby avec les implémentations Ruby, en pensant que les threads POSIX ne sont pas possibles dans ruby.

Vous pouvez simplement compiler avec le support pthread, et cela était déjà possible au moment de la création de ce fil , si vous pardonnez le jeu de mots.

La réponse à cette question est simple. Si vous aimez le lisp, vous préférerez probablement le rubis. Ou, tout ce que vous aimez.

nonanonyme
la source
0

Je vous suggère d'essayer les deux langues et de choisir celle qui vous plaît. Python et Ruby peuvent faire ce que vous voulez.

Lisez également ce fil .

Alexander Kojevnikov
la source
0

Allez avec JS, il suffit de consulter AJS (Alternative JavaScript Syntax) sur mon github http://github.com/visionmedia, cela vous donnera des fermetures plus propres, etc.: D

TJ Holowaychuk
la source
0

Concernant votre point principal (méta-programmation): La version 1.6 de Groovy a la programmation AST (Abstract Syntax Tree) intégrée en tant que fonctionnalité standard et intégrée. Ruby a RubyParser, mais c'est un add-on.

groovy
la source