sacado a écrit 3 commentaires

  • [^] # Re: Différences notables avec scheme ?

    Posté par  . En réponse à la dépêche Le langage Arc, issu de Common Lisp et Scheme, a un mois. Évalué à 3.

    En fait, l'affectation avec =, au début j'étais un peu sceptique, mais finalement je suis assez fan. L'argumentaire de Graham à ce sujet, c'est que le signe =, c'est deux bandes, ce qui attire l'attention (et signale un danger).

    Pour ce qui est des principales différences :

    - Pas de différence entre le symbole nil, la liste vide et le booléen faux : le mal absolu pour les schemeurs (et même pour McCarthy lui-même) ; on aime ou on n'aime pas, il y a des avantages et des inconvénients, l'avantage étant la concision, l'inconvénient étant de prendre une liste vide pour un booléen faux dans un cas où ça n'a rien à voir.

    - Macros non hygiéniques : en scheme, les variables définies dans une macro ne peuvent pas entrer en conflit avec celles qui sont définies par l'utilisateur (la capture de variable). C'est une source de bug fréquente et assez difficile à repérer. Mais la capture de variable peut parfois être voulue. Par exemple, arc définit une macro "aif" (anaphoric if) qui affecte à la variable "it" le résultat du test :

    (aif (max une-liste-très-longue) (prn it) (prn "vide !"))

    équivalent de :

    (let it (max une-liste-très-longue) (if it) (prn it) (prn "vide !"))

    - Des divergences dans la façon de concevoir les programmes. Par exemple, là où Scheme incite fortement le programmeur à suivre le paradigme fonctionnel, Arc est assez "agnostique" : il y a tout ce qu'il faut pour écrire des algos fonctionnels (map, filter, reduce, tail-recursion, ...) comme des algos procéduraux (notamment beaucoup de types d'itérateurs) ; ce qui explique en partie l'absence de "!" dans les noms des fonctions.

    Toutes ces divergences, c'est ce que Graham a retenu de Common Lisp. Mais globalement, je trouve Arc plus proche de Scheme.

    Enfin, Arc contient un peu de syntaxe :

    (~f x) <=> (not (f x))

    (f:g x) <=> (f (g x))

    a.b <=> (a b)

    a!b <=> (a 'b)
  • [^] # Re: bootstrapping myself

    Posté par  . En réponse à la dépêche Le langage Arc, issu de Common Lisp et Scheme, a un mois. Évalué à 6.

    Dans le cas d'Arc, c'est un peu particulier. Ce n'est pas le compilateur/interpréteur qui est "bootstrappé", c'est le langage lui-même. À partir de quelques axiomes de base (if, cons, car, cdr, eval, quote, fn, les opérations mathématiques de bases, l'affection et quelques autres), tout le reste du langage est défini (le langage est lui-même sa propre spécification) : la définition de fonction, les opérateurs and et or, les divers systèmes d'itération, le système de macro, etc.

    L'intérêt, c'est de permettre d'adapter le langage aux problèmes auxquels on se trouve confronté, de A à Z : selon la devise Lispienne, c'est "un langage de programmation programmable".
  • [^] # Re: Le théoricien rêveur et le programmeur pragmatique, quelle blague

    Posté par  . En réponse à la dépêche Le langage Arc, issu de Common Lisp et Scheme, a un mois. Évalué à 10.

    "Cette phrase a certainement été écrite alors que tu n'étais pas bien réveillé. Il n'y a aucune opposition entre être un programmeur et un théoricien."

    Oui, enfin il y a quand même quelques divergences dans les objectifs visés. Dans le monde Lisp, il y a traditionnellement de véritables scissions entre les adpetes de Common Lisp, qui ont bidouillé leur langage pour l'optimiser à mort, au détriment de la pureté conceptuelle, et ceux de Scheme, qui sont au contraire plus intéressés par la pureté et le minimalisme conceptuel afin d'avoir le langage le plus simple possible, au détriment de l'efficacité. Je n'invente rien : cherche des Schemeurs dans le monde industriel, tu en trouveras peu. Cherche des Common Lispers parmi les théoriciens des langages, tu en verras aussi peu. Le but de Graham est en quelque sorte de trouver un compromis entre ces deux tendances.

    Et puis, il n'y avait rien de péjoratif là-derrière, j'ai passé plus de temps dans ma vie à utiliser Scheme ou Smalltalk qu'avec C ou C++. J'ai juste voulu préciser ce point en voyant venir de très loin les commentaires du genre "Ouais, mais d'abord, c'est nul Lisp, encore un délire de chercheur dans sa tour d'ivoire qui fait des langages fonctionnels alors que ça sert à rien dans la réalité". Ce genre de choses.