|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre chevronné
![]() ![]() Développeur informatique Inscription : avril 2004 Messages : 679 ![]() |
Il y a des adeptes d'Erlang ici? J'ai acheté le livre écrit par Joe Armstrong "Programming Erlang" et c'est très bon! J'ai quelques commentaires négatifs à propos du langage, mais son support pour la concurrence est si simple et si puissant!
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Simple question : pourquoi as-tu acheté un bouquin sur Erlang ? Par besoin, par curiosité ?
Tu pourrais dire ce que tu en penses, les reproches que tu ferais au langage, etc. ? Ça m'intéresserait d'avoir ton avis. J'avais déjà regardé un peu le langage. De ce que j'ai vu, il y a du pattern matching, des tuples, des listes, du typage dynamique... Et en effet, ça a l'air plutôt pas mal pour la programmation concurrente et distribuée. |
|
|
00
|
|
|
#3 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 961 ![]() |
Citation:
ce serait cool si tu pouvais une critique de ce livre... un peu sur ce modèle http://algo.developpez.com/livres/#L2100058878 ![]() perso, je me suis intéressé à Erlang, et surtout à son utilisation dans ejabberd... mais je n'ai pas tenté de programmer avec (je ne fais pas assez de distribué |
|
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Citation:
Jamais essayé pour ma part... |
|
|
|
00
|
|
|
#5 | |
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 512 ![]() |
Citation:
http://fr.wikipedia.org/wiki/Erlang_%28langage%29 Apparemment il y a les listes-en-compréhension, mais wikipédia n'est pas très bavard sur le modèle de concurrence. |
|
|
00
|
|
|
#6 | |
|
Invité régulier
![]() Inscription : août 2007 Messages : 6 ![]() |
Pour ma part, j'ai découvert Erlang en 2004 grace au bouquin en français (le seul à ma connaissance) "Erlang Programmation". Je me demandais à l'époque comment un langage aussi bien foutu pouvait rester à ce point dans un relatif anonymat. Je dis "relatif" parce que quelques plus ou moins grosses start-up spécialisées n'ont pas hésité à faire leur business basé sur ce langage et en faire leur principal atout face à la concurrence (commerciale, celle-ci).
Bossant dans le domaine des réseaux de télécoms, le domaine dont vient Erlang, ce langage s'est avéré me convenir parfaitement. Exit l'impératif et la POO qui faisait que la programmation me rebutait jusque-là. Je viens de recevoir le bouquin qui est sorti il y a quelques jours, en anglais, par Joe Armstrong, un des créateurs du langage, et il est vraiment trés bien écrit. La progression est trés bien pensée : il couvre les aspects nécessaires à un débutant (en tenant compte de ceux venant d'autres langages), en commencant par la programmation séquencielle, puis concurrente, mais il aborde aussi les sujets assez avancés et permet assez rapidement de se mettre à écrire des applications complexes. Concernant le modèle de concurrence d'Erlang, il s'agit d'acteurs (de processes) ayant chacun leur propre mémoire et n'échangeant des informations que par envoi et réception de messages. Par analogie avec la POO ou le bloc élémentaire de construction est l'objet, en Erlang, c'est le process qui est la brique de base. On peut voir un process Erlang comme un thread mais en beaucoup, beaucoup plus léger (env. 300 octets de heap à la création) et beaucoup, beaucoup plus rapide à créer (de l'odre d'une dizaine de µs). Ils peuvent donc se compter par centaines de milliers, voire millions. Les process Erlang s'éxécutent dans une VM. Et les VM s'éxecutant sur différentes machines peuvent communiquer de manière transparente (mécanisme de distribution). La VM Erlang peut également répartir l'éxécution des différents process sur plusieurs processeurs/coeurs de la même machine sans l'intervention du programmeur et ainsi utiliser le maximum de puissance de calcul disponible. L'ensemble des bibliothèques de base, nommé OTP, est assez complet. Il permet de structurer l'organisation de son appli et d'utiliser de manière optimale les mécanismes de distribution, de supervision des processes, de tolérance aux pannes ... La syntaxe est plutôt simple, mais puissante : on écrit beaucoup moins de lignes de code pour faire la même chose en Erlang qu'en C (du fait, je pense, du typage dynamique, mais surtout du "pattern matching"). Pour quelqu'un venant d'un autre langage, il faut se faire à l'assignation unique des variables, et s'habituer à "penser concurrence" pour découper correctement son appli en processes. C'est une chose assez naturelle pour le cerveau humain, mais qui vient plus difficillement pour quelqu'un habitué à d'autres paradigmes que pour un débutant tout frais Citation:
|
|
|
|
00
|
|
|
#7 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 961 ![]() |
Citation:
si tu pouvais nous en faire une petite critique de ces livres, ce serait cool... surtout pour la rubrique fonctionnelle en plein essor
|
|
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() ![]() Développeur informatique Inscription : avril 2004 Messages : 679 ![]() |
C'est pas grand chose:
1. Le support pour les chaînes de caractères. latin-1? On pourrait avoir du UTF-8 S.V.P? Et ce qui vient avec, upper(), lower(), etc. 2. On peut pas avoir la documentation d'une fonction directement dans l'interpréteur. J'aime bien que dans Python je puisse faire <tt>help(foo)</tt> et avoir la définition et documentation pour l'objet foo. 3. Encore par rapport à l'interpréteur, on peut pas utiliser tout les "constructs" d'Erlang. Particulièrement, on peut pas définir des fonctions (non-anonymes) directement. 4. Je suis pas fou de comment on démarre une application Erlang. Je détesterais pas une fonction main/1 qui serait le point d'entrée. Pour l'instant, rien du langage ne m'a vraiment fait lever le coeur. Peut-être que ça viendra, mais pour l'instant je suis très exité par ce que je lis sur Erlang Vincent |
|
00
|
|
|
#9 | ||||||||
|
Invité régulier
![]() Inscription : août 2007 Messages : 6 ![]() |
Citation:
Citation:
Citation:
Citation:
Tu peux la nommer comme tu veux, ta fonction de démarrage : Code :
Et puis utiliser OTP n'est pas obligatoire du tout. D'ailleurs, "Programming Erlang" n'en parle pas avant le chapitre 16 ... en t'en ayant précedemment fait presque réinventer tous les mécanismes (gen_server, event_handler, supervisor ...) pour en comprendre l'utilité Citation:
![]() Citation:
Comment fait-on ? |
||||||||
|
|
00
|
|
|
#10 | ||
|
Membre chevronné
![]() ![]() Développeur informatique Inscription : avril 2004 Messages : 679 ![]() |
igwan: pour démarrer une application, je parle plutôt de:
Code :
|
||
|
00
|
|
|
#11 | |||||
|
Invité régulier
![]() Inscription : août 2007 Messages : 6 ![]() |
Citation:
Code :
Code :
|
|||||
|
|
00
|
|
|
#12 |
|
Membre chevronné
![]() ![]() Développeur informatique Inscription : avril 2004 Messages : 679 ![]() |
igwan: tu fais du Erlang professionellement?
|
|
00
|
|
|
#13 | |
|
Invité régulier
![]() Inscription : août 2007 Messages : 6 ![]() |
Citation:
|
|
|
|
00
|
|
|
#14 |
|
Membre chevronné
![]() |
J'ai commencé à lire l'ouvrage de Joe Armstrong qui vient de sortir.
Je suis du monde impératif, objet. Ayant quelques bases en fonctionnel avec Lisp et Scheme, effectivement la syntaxe est bien différente. Mais je suis quand même sur le Q. Tout comme GnuVince, j'avais quelques questions auquelles igwan est venu y répondre. Je découvre donc Erlang depuis hier après midi et effectivement c'est un outil vraiment très puissant, les exemples de l'ouvrage sont bien foutu et correctement expliqué, mais je trouve qu'il manque des commentaires dans le code source de ceux-ci afin d'avoir plus simple à les relires.
__________________
Nul ne peut mieux connaitre la connaissance qu'elle-même. |
|
00
|
|
|
#15 |
|
Membre chevronné
![]() ![]() Développeur informatique Inscription : avril 2004 Messages : 679 ![]() |
J'ai fait mon premier programme concurrent hier (j'ai pas eu beaucoup de temps pour jouer avec Erlang.) Je vais le poster ce soir. C'est pas très avancé, ça calcule la somme des fibonacci de 1 à 40, mais comme l'algorithme récursif est très lent, c'était une bonne façon de voir si en utilisant deux CPU ça allait plus vite. Résultat: 1 CPU prend environ 40 secondes, 2 CPUs prennent environ 24 secondes
|
|
00
|
|
|
#16 | |||||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Ceci est instantané : Code Haskell :
Code Haskell :
-- Jedaï |
|||||
|
|
00
|
|
|
#17 | ||||||||
|
Membre chevronné
![]() ![]() Développeur informatique Inscription : avril 2004 Messages : 679 ![]() |
Jedai: en effet. Il faut par contre que les gens distinguent la différence entre une fonction qui utilise la récursivité et les algorithmes récursifs et itératifs.
Exemple: voici une fonction récursive d'un algorithme récursif: Code :
Code :
Voici maintenant la même fonction, mais qui utilise un algorithme itératif et sa transformation. Notez que la récursivité est quand même utilisée: Code :
J'espère que mes explications ont été assez claires. Pour les gens d'Erlang, voici un algorithme fibonacci plus efficace; on conserve les nombres calculés dans un dict (un hash en termes Perl): Code :
|
||||||||
|
00
|
|
|
#18 |
|
Expert Confirmé Sénior
![]() ![]() |
Je ne suis pas d'accord, les deux algorithmes sont parfaitement récursifs, la seule différence c'est que le deuxième code se prête à une optimisation classique ('tail call' ou 'appel terminal') qui évite une explosion de la pile lors de la récursion, mais c'est l'affaire du compilateur, la fonction, elle, est bien écrite de manière récursive.
Par ailleurs, ton amélioration de fib en Erlang n'est pas géniale : en effet tu retiens l'intégralité des éléments alors que deux suffisent, ta fonction est en O(n) en complexité spatiale (sans parler du fait que les dictionnaires ont souvent un facteur constant assez fort) alors que pour fibonacci du O(1) en complexité spatiale suffit. Enfin ça n'a pas une importance énorme sauf si tu calcule fib 50000 ... (Par curiosité, combien de temps ça te prend de calculer fib 50000 avec cette fonction ?) -- Jedaï |
|
|
00
|
|
|
#19 | ||
|
Membre chevronné
![]() ![]() Développeur informatique Inscription : avril 2004 Messages : 679 ![]() |
Ma définition d'algorithme récursif vs itératif vient du cours SICP. Regarde les vidéos, ils en parlent dans le... 3e ou 4e vidéo. Je suis plus certain.
75,896,385 microsecondes avec mon code original; 446,333 microsecondes en conservant seulement 2 valeurs. Merci pour l'optimisation Nouveau code: Code :
|
||
|
00
|
|
|
#20 |
|
Candidat au titre de Membre du Club
![]() ariden padDéveloppeur Web Inscription : septembre 2010 Messages : 12 ![]() |
Hello, je découvre Erlang depuis peu, je me suis acheté un bon livre (Programmer en Erlang chez Person), je suis un peu les tutos présents sur le web mais deux questions restent sans réponses pour le moment :
erreur 1 : pourquoi j'ai toujours cette erreur : syntax error before: '->' par exemple dans la function suivante : a() -> b(). b() -> c(). c() -> 3 = 4. erreur 2 : Je n'arrive pas à créer un module tel que : -module(mysets.erl). -export([a/0]). qui me retourne cette erreur : ** exception error: undefined shell command module/1 Par contre, des scripts comme celui-ci fonctionnent quant'à eux très bien : ex : JoeAttributeList= [{shoeSize,42},{pets, [pets,[{cat, zorro}, {cat,daisy}]]}, {children,[{thomas,21}, {claire,17}]}]. JoeTuple = {person, "joe", "armstrong", JoeAttributeList}. MikeAttributeList= [{shoeSize,41},{likes, [boats,wine]}]. MikeTuple= {person, "Mike", "Williams", MikeAttributeList}. People= [JoeTuple,MikeTuple]. J'ai envie de dire pourquoi. A noter : j'ai créé un fichier demo.beam dans un répertoire quelquonque. J'ai ensuite créé dans ce même répertoire un fichier mysets.erl. Puis j'ai ouvert demo.beam avec werl. ma version de erlang est erts-5.8.1.1 |
|
00
|
Copyright © 2000-2013 - www.developpez.com