Oui oui, on est d'accord :)
C'est juste que = n'est pas un opérateur d'égalité (ou d'assignation), mais de « matching » (ou d'assignation).
Pour moi, un opérateur d'égalité rend une valeur vraie en cas d'égalité, et une valeur fausse en cas de différence. Comme je le faisais remarquer,
X=3, % assigne
Y=4, % assigne
X=Y. % lance une exception
montre bien qu' = n'est pas un test d'égalité.
C'est un truc que je trouve laid, mais auquel on s'habitue vite, car ça a ses avantages pratiques quand on code.
>> Encore une fois, le comportement "variable existante = test d'égalité" de Erlang est parfois bien pratique (si on sait définir l'égalité).
En fait, c'est du pattern matching plus qu'un test d'égalité.
Ça retourne l'objet matché, et fait potentiellement des déclarations si des noms de variables non associés sont utilisés. [3=3,_=3,3==3,{Z,_}={42,3}].
==> [3,3,true,{42,3}]
Z.
==> 42
Si je fais 1=2 j'obtiens ** exception error: no match of right hand side value 2
>> Je crois que c'est la principal question à se poser : pour quel usage le langage d'apprentissage doit-il être choisi ?
Question inutile.
Tu prends Scheme/Common Lisp, c'est fait pour tous les usages :)
T'as du fonctionnel, de l'impératif, de l'objet, du concurrent (à la Erlang, avec Termite/Gambit-C), etc.
Ça marche pour les calculs matheux (maxima), pour le jeu vidéo (abuse, farmageddon (sur iphone !)), pour comparer les prix les moins chers de vols en avion (itasoftware), pour animer la tête de Gollum dans Le seigneur des anneaux (Mirai), pour faire des serveurs webs ultra rapides (teeteepeedee), des WM (stump), etc.
Un truc de ce genre, ptet ?
-module(toto).
-export([main/0]).
%% Retourne {false,3}
foo() ->
X = 3, % Assigne
R = case {1,2} of
{X,_} -> true; % teste si la première projection vaut 3. Vrai si oui,
_ -> false % Faux si non.
end,
{R,X}.
%% Retourne {true,1}
bar() ->
case {1,2} of
{X,_} -> X = X; % teste si la valeur est une paire, si oui, lie X et 1, puis
% vérifie via pattern match si X = X est vrai.
_ -> X = ohmygod % assigne ohmygod à X sinon
end, %% Maintenant, X vaut 1, alors qu'on est sorti de la portée du CASE
{true,X}.
% Que retourne cette fonction?
% quux() ->
% X = 41,
% X = 42.
>> Le problème, c'est que les parenthèses retirent l'ambiguïté au niveau du compilateur / interpréteur, mais qu'au niveau du programmeur humain la chose la plus visuelle est l'indentation.
C'est pas un problème !
C'est même un avantage certain !
Vu que les parenthèses reflètent la structure du code, tu peux, de manière automatique et sans ambiguïté, recréer l'indentation, la bonne seule et unique qui correspond à l'intention du programmeur (s'il a écrit ce qu'il voulait écrire), et à celle de toute personne qui sait lire un programme.
Donc, impossible de se tromper, vu que l'indentation *dépend* du parenthésage, et que le parenthésage est en bijection avec la structure intentionnelle du code.
Techniquement, et avec un peu de pratique, même sur une seule ligne, tu t'en sors : les parenthèses retirent toute ambiguïté.
Mais oui, je conçois que ma phrase était rentre-dedans.
L'avantage, c'est que l'indentation qui découle du parenthésage et la structure du code sont interdépendants.
Le coup classique du if test1 then if test2 then foo else bar relève alors plus de la faute grave que de la faute d'étourderie. Si ton langage est basé uniquement sur l'indentation, quelques espaces en plus ou en moins sur le else bar risquent d'avoir un effet pervers sur ton code… (nota : en CL ou Scheme, on utilisera (when test1 (if test2 foo bar)) ou (if test1 (when test2 foo) bar) pour rajouter une couche de clarté à ce que la commande d'indentation automatique de ton éditeur aura déjà exprimé pour toi.
Ouais, enfin si tu programmes avec notepad, c'est *ta* faute.
On code en Scheme/Lisp avec des éditeurs qui gardent/indiquent le balancement correct de parenthèses. Tu peux même avoir une coloration différente en fonction de la profondeur.
Et d'ailleurs, les parenthèses font le même effet visuel que l'indentation, mais rendent impossible une erreur dans un programme à cause d'une indentation foireuse…
>> De telles performances, et une telle expressivité, quel est le revers de la médaille ?
Une syntaxe de merde, des erreurs cryptiques genre « machin has type int instead of type int » (Je sais plus comment, mais on pouvait créer des erreurs de même), l'absence de macros (j'ai pas touché à camlp4)…
Cela dit, j'aime bien, hein. J'en ai fait pendant longtemps.
Mais ces temps-ci, je trouve plus agréable de programmer en Haskell (pour son côté paresseux), Gambit-C Scheme ou Common Lisp (pour leur expressivité)…
>> [1] : Avec accès ssh chrooté dessus […] pour voir si on peut avoir confiance en chaque serveur.
T'as un troll de barbus récemment qui disait « si tu crois que chroot ça sert à la sécurité, t'es qu'un idiot. » Et donc, qu'on devrait pas avoir confiance comme tu le suggères.
Le mieux ne serait-il pas le louer de l'espace virtuel chez Amazon ?
Je pertinente.
SETI, Folding, toussa. Y a des gens utiles qui aimeraient bien avoir accès à ton CPU.
Sinon, tu peux aussi compiler OOo, ou monter un distcc et proposer un accès aux devs d'un OS ou mainteneurs de paquets d'une distro qui sont prêts à grappiller un peu de puissance de calcul sur le net pour leurs compilations.
> un peu trop compliqué par rapport à ce dont je cherche.
« à ce dont j'ai besoin » ou « à ce que je cherche, » mais pas un mélange des deux.
(désolé.)
Mais sinon, un bon gros coup de `tcpdump | perl compte.pl`, ça va pas ?
Chaque ligne de tcpdump est un paquet, puis tu peux filtrer pour chercher un header SMTP et donc compter les emails, filtrer les GET pour compter le nombre de page webs vues, etc.
Titre : Gestion centralisée des avatars, alternatives à Gravatar.
Contenu : il existe des initiatives non centralisées pour diffuser son avatar. Ces solutions seront passées en revue dans la suite de la dépêche !
Sinon, bon article.
Pavatar me parait pas pire, je vais essayer ça.
>> Desole mais j'ai jamais vu personne creer un soft parce qu'il avait envie de faire de la concurrence,
Euh, le jeu vidéo, c'est plutôt pas mal ça pourtant.
Tu veux faire jouer la concurrence pour choper des parts de marché à autrui…
Et beaucoup de logiciels sont conçus pour les mêmes raisons…
> il faudra s'interroger sur le fait que ce soit resté présent dans le code depuis l'an 2000 sans que personne ne remarque quoi que ce soit.
Parce qu'après avoir audité ton code (ou l'avoir fait audité par quelqu'un en qui tu as confiance), tu crois vraiment que tu vas recommencer un audit tous les ans à Noël ?
Si tu ne détectes rien de louche après audit, ben, tu assumes que ça marche comme il faut…
Déclaration universelle des droits de l'homme qui n'a apparemment aucune portée juridique et dont les clauses de présomption de l'innocence ne sont pas suivies par tous les pays d'Europe, si j'en crois wikitralalapédia.
# Synchrones
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 2.
Ça aussi, c'est fun !
(Ni intercal ou unlambda, mais c'est une autre histoire…)
[^] # Re: Mainstream || hype || marginal
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 2.
[^] # V
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 2.
C'est juste que = n'est pas un opérateur d'égalité (ou d'assignation), mais de « matching » (ou d'assignation).
Pour moi, un opérateur d'égalité rend une valeur vraie en cas d'égalité, et une valeur fausse en cas de différence. Comme je le faisais remarquer,
X=3, % assigne
Y=4, % assigne
X=Y. % lance une exception
montre bien qu' = n'est pas un test d'égalité.
C'est un truc que je trouve laid, mais auquel on s'habitue vite, car ça a ses avantages pratiques quand on code.
[^] # Re: Erlang
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 2.
En fait, c'est du pattern matching plus qu'un test d'égalité.
Ça retourne l'objet matché, et fait potentiellement des déclarations si des noms de variables non associés sont utilisés.
[3=3,_=3,3==3,{Z,_}={42,3}].
==> [3,3,true,{42,3}]
Z.
==> 42
Si je fais
1=2
j'obtiens** exception error: no match of right hand side value 2
[^] # Re: Mainstream || hype || marginal
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 4.
Question inutile.
Tu prends Scheme/Common Lisp, c'est fait pour tous les usages :)
T'as du fonctionnel, de l'impératif, de l'objet, du concurrent (à la Erlang, avec Termite/Gambit-C), etc.
Ça marche pour les calculs matheux (maxima), pour le jeu vidéo (abuse, farmageddon (sur iphone !)), pour comparer les prix les moins chers de vols en avion (itasoftware), pour animer la tête de Gollum dans Le seigneur des anneaux (Mirai), pour faire des serveurs webs ultra rapides (teeteepeedee), des WM (stump), etc.
[^] # Re: Différents langages
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 4.
Tu réécris DLFP en Lisaac ?
[^] # Re: Erlang
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 2.
-module(toto).
-export([main/0]).
%% Retourne {false,3}
foo() ->
X = 3, % Assigne
R = case {1,2} of
{X,_} -> true; % teste si la première projection vaut 3. Vrai si oui,
_ -> false % Faux si non.
end,
{R,X}.
%% Retourne {true,1}
bar() ->
case {1,2} of
{X,_} -> X = X; % teste si la valeur est une paire, si oui, lie X et 1, puis
% vérifie via pattern match si X = X est vrai.
_ -> X = ohmygod % assigne ohmygod à X sinon
end, %% Maintenant, X vaut 1, alors qu'on est sorti de la portée du CASE
{true,X}.
% Que retourne cette fonction?
% quux() ->
% X = 41,
% X = 42.
main() ->
%io:format("~w, ~w, ~w~n",[foo(),bar(),quux()]).
io:format("~w, ~w~n",[foo(),bar()]).
[^] # Re: LISP
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 6.
C'est pas un problème !
C'est même un avantage certain !
Vu que les parenthèses reflètent la structure du code, tu peux, de manière automatique et sans ambiguïté, recréer l'indentation, la bonne seule et unique qui correspond à l'intention du programmeur (s'il a écrit ce qu'il voulait écrire), et à celle de toute personne qui sait lire un programme.
Donc, impossible de se tromper, vu que l'indentation *dépend* du parenthésage, et que le parenthésage est en bijection avec la structure intentionnelle du code.
[^] # Re: LISP
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 2.
Mais oui, je conçois que ma phrase était rentre-dedans.
L'avantage, c'est que l'indentation qui découle du parenthésage et la structure du code sont interdépendants.
Le coup classique du
if test1 then if test2 then foo else bar
relève alors plus de la faute grave que de la faute d'étourderie. Si ton langage est basé uniquement sur l'indentation, quelques espaces en plus ou en moins sur leelse bar
risquent d'avoir un effet pervers sur ton code… (nota : en CL ou Scheme, on utilisera(when test1 (if test2 foo bar))
ou(if test1 (when test2 foo) bar)
pour rajouter une couche de clarté à ce que la commande d'indentation automatique de ton éditeur aura déjà exprimé pour toi.[^] # Re: LISP
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 3.
On code en Scheme/Lisp avec des éditeurs qui gardent/indiquent le balancement correct de parenthèses. Tu peux même avoir une coloration différente en fonction de la profondeur.
Et d'ailleurs, les parenthèses font le même effet visuel que l'indentation, mais rendent impossible une erreur dans un programme à cause d'une indentation foireuse…
[^] # Re: Différents langages
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 2.
Une syntaxe de merde, des erreurs cryptiques genre « machin has type int instead of type int » (Je sais plus comment, mais on pouvait créer des erreurs de même), l'absence de macros (j'ai pas touché à camlp4)…
Cela dit, j'aime bien, hein. J'en ai fait pendant longtemps.
Mais ces temps-ci, je trouve plus agréable de programmer en Haskell (pour son côté paresseux), Gambit-C Scheme ou Common Lisp (pour leur expressivité)…
[^] # Re: Techniquement possible
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au journal Décentraliser Wikipédia. Évalué à 2.
T'as un troll de barbus récemment qui disait « si tu crois que chroot ça sert à la sécurité, t'es qu'un idiot. » Et donc, qu'on devrait pas avoir confiance comme tu le suggères.
Le mieux ne serait-il pas le louer de l'espace virtuel chez Amazon ?
# Faut pas abuser
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au journal Merci la sncf. Évalué à 9.
on te file les infos 5 jours en avance, et tu te plains ?
[^] # Re: En tout cas ça a le mérite d'exister
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au journal Diaspora mal conçu?. Évalué à 2.
[^] # Re: Des moufles, parce qu'il fait froid.
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au message Quelle solution opensource pour creer un site d'enchere temps réelle ?. Évalué à 3.
(Sinon, cf. le commentaire ci-dessus)
[^] # Re: BOINC
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au message Mon serveur s'ennui.... Évalué à 5.
SETI, Folding, toussa. Y a des gens utiles qui aimeraient bien avoir accès à ton CPU.
Sinon, tu peux aussi compiler OOo, ou monter un distcc et proposer un accès aux devs d'un OS ou mainteneurs de paquets d'une distro qui sont prêts à grappiller un peu de puissance de calcul sur le net pour leurs compilations.
# Des moufles, parce qu'il fait froid.
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au message Quelle solution opensource pour creer un site d'enchere temps réelle ?. Évalué à 3.
De bien faire attention aux « race conditions. »
[^] # Re: rrdtools
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au message Compteur d'impulsions. Évalué à 3.
« à ce dont j'ai besoin » ou « à ce que je cherche, » mais pas un mélange des deux.
(désolé.)
Mais sinon, un bon gros coup de `tcpdump | perl compte.pl`, ça va pas ?
Chaque ligne de tcpdump est un paquet, puis tu peux filtrer pour chercher un header SMTP et donc compter les emails, filtrer les GET pour compter le nombre de page webs vues, etc.
# Titre de la dépêche et contenu incohérents.
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Gestion (a)centralisée des avatars, alternatives à Gravatar.. Évalué à 3.
Contenu : il existe des initiatives non centralisées pour diffuser son avatar. Ces solutions seront passées en revue dans la suite de la dépêche !
Sinon, bon article.
Pavatar me parait pas pire, je vais essayer ça.
[^] # Re: Skype...
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au journal Pourquoi n'existe-il pas de Skype libre ?. Évalué à 3.
Euh, le jeu vidéo, c'est plutôt pas mal ça pourtant.
Tu veux faire jouer la concurrence pour choper des parts de marché à autrui…
Et beaucoup de logiciels sont conçus pour les mêmes raisons…
[^] # Re: Les chinois du FBI...
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au journal Backdoor dans OpenBSD ?. Évalué à 2.
Parce qu'après avoir audité ton code (ou l'avoir fait audité par quelqu'un en qui tu as confiance), tu crois vraiment que tu vas recommencer un audit tous les ans à Noël ?
Si tu ne détectes rien de louche après audit, ben, tu assumes que ça marche comme il faut…
[^] # Re: Ah cool du Tarot :)
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au journal Boulot, métro, Tarot !. Évalué à 3.
Ouch, tu peux le dire…
[^] # Re: C++ aété créépour augmenter le salaire des programmeurs
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au journal C++ a été créé pour augmenter le salaire des programmeurs. Évalué à 9.
[^] # Re: Erreur
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au journal Quelques questions à propos de l'affaire wikileaks…. Évalué à 2.
[^] # Entrevue…
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au journal Entrevue avec Richard Stallman !. Évalué à 4.