blabla@fonctionnel : Taiche ne sert à rien - Langages fonctionnels - Programmation
Marsh Posté le 06-03-2007 à 14:32:00
J'ai voté multi de stiffler \o/
Marsh Posté le 06-03-2007 à 14:33:50
une sorte de langage qui marche donc pas lingo ni actionscript
Marsh Posté le 06-03-2007 à 14:41:33
Masklinn n'a pas d'amis
Elmoricq a écrit : c'est quoi un langage fonctionnel |
Un langage dans lequel l'unité de calcul est la fonction au sens mathématique du terme, avec une emphase sur le principe d'application de fonction plutôt que celui de changement d'état
Dans les concepts fonctionnels importants on trouve
Naturellement des langages non fonctionnels peuvent avoir des caractéristiques fonctionnelles (e.g. Python et Ruby ont des first-class functions)
Marsh Posté le 06-03-2007 à 14:42:01
mais c'est fini oui ?
edit: je réouvre, ménage fait, mais ce topic peut éventuellement servir à ceux qui ne connaissent pas le paradigme fonctionnel et qui auraient des questions
Marsh Posté le 06-03-2007 à 14:47:49
C'est quelque chose de sain, une forme de dépucelage. La cat ADA est morte dans d'atroces souffrances, c'est ça que tu veux Harko ?
Marsh Posté le 06-03-2007 à 14:59:03
Chaos Intestinal a écrit : C'est quelque chose de sain, une forme de dépucelage. La cat ADA est morte dans d'atroces souffrances, c'est ça que tu veux Harko ? |
Elle est encore là la cat Ada, il y a même des questions sur Ada dedans, de temps en temps
Marsh Posté le 06-03-2007 à 15:42:31
masklinn a écrit : Dans les concepts fonctionnels importants on trouve
[...snip...] |
Je suis curieux de voir à quoi ça ressemble cette fonctionnalité... A tout hasard, en aurais-tu un exemple (si possible en ruby, questioin de s'y retrouver un peu dans la syntaxe ) stp?
Marsh Posté le 06-03-2007 à 15:58:33
IrmatDen a écrit : Je suis curieux de voir à quoi ça ressemble cette fonctionnalité... A tout hasard, en aurais-tu un exemple (si possible en ruby, questioin de s'y retrouver un peu dans la syntaxe ) stp? |
en ruby ça correspond aux blocks: les blocks sont simplement le nom des first-class functions en Ruby (ça lui vient de Smalltalk) e.g.
Code :
|
En se rappelant qu'il y a deux syntaxes différentes pour les blocks en Ruby (donnant globalement des résultats identiques, mais pas exactement):
Code :
|
Marsh Posté le 06-03-2007 à 16:30:34
IrmatDen a écrit : Je suis curieux de voir à quoi ça ressemble cette fonctionnalité... A tout hasard, en aurais-tu un exemple (si possible en ruby, questioin de s'y retrouver un peu dans la syntaxe ) stp? |
Erlang : http://fr.wikipedia.org/wiki/Erlang_%28langage%29
La syntaxe de Erlang me fait un peu penser à Prolog...
Marsh Posté le 06-03-2007 à 16:32:01
J'ai pas compris pourquoi tu l'avais quoté
rufo a écrit : La syntaxe de Erlang me fait un peu penser à Prolog... |
Les premières implémentations d'Erlang étaient en Prolog, et la syntaxe d'Erlang est effectivement tirée directement de celle de Prolog (avec quelques additions pour les processus par exemple)
Marsh Posté le 06-03-2007 à 16:37:14
masklinn a écrit : J'ai pas compris pourquoi tu l'avais quoté |
Je me demandais, en erlang, comment on pouvait passer des objets via les messages entre processus? Un message peut contenir autre chose que du texte ou des nombres?
ps : je connais erlang que de nom et de principe (évoqué en cours d'architecture de systèmes distribués)
Marsh Posté le 06-03-2007 à 17:25:36
rufo a écrit : Je me demandais, en erlang, comment on pouvait passer des objets via les messages entre processus? Un message peut contenir autre chose que du texte ou des nombres? |
Normalement on peut passer n'importe quoi d'un processus à l'autre.
Le seul truc dont je suis pas sûr et certain c'est pour passer directement des fonctions d'un processus à un autre (je testerais ça ce soir, même si c'est pas d'un intérêt terrible), mais tout le reste (listes, tuples, symboles, strings, nombres, records) peut servir de message (un message est un objet Erlang quelconque, il n'y a pas fondamentalement d'objet message).
Pour envoyer un message à un processus tiers c'est trivial: en considérant qu'on a son pid (son adresse, si tu veux) on fait comme ça:
Code :
|
Sympa hein?
De l'autre côté, le processus destinataire a une "boite aux lettres" dans lequel notre message est stocké, et il utilise "receive" pour récupérer des messages dans sa boite (receive fait du pattern-matching btw).
Par exemple dans ce cas si il veut aller voir sa boite et qu'il cherche uniquement un message:
Code :
|
Marsh Posté le 06-03-2007 à 17:30:50
On notera que sans la coloration syntaxique il est un peu dur de différencier les commentaires et le code
Marsh Posté le 06-03-2007 à 17:32:51
le coup de l'envoi/réception des messages, j'avais compris : j'avais vu ça en cours (le principe) et la mise en application pour erlang (lien wikipedia que j'ai donné plus haut).
C'est vrai que pour le distribué, ça a l'air assez sympa En +, j'ai vu qu'on pouvait attendre des messages pendant un temps donné et si rien ne se passe, déclencher une action...
Marsh Posté le 06-03-2007 à 17:33:40
masklinn a écrit : On notera que sans la coloration syntaxique il est un peu dur de différencier les commentaires et le code |
%% est un commentaire. Ca se comprend assez facilement.
Marsh Posté le 06-03-2007 à 17:37:12
rufo a écrit : En +, j'ai vu qu'on pouvait attendre des messages pendant un temps donné et si rien ne se passe, déclencher une action... |
Oui, la dernière clause du receive peut commencer par "after" (suivi d'un int, genre "after 3000" ) et ça timeout proprement (les receive étant bloquants)
rufo a écrit : %% est un commentaire. Ca se comprend assez facilement. |
Oui mais ça rend pas le truc beaucoup plus lisible
Marsh Posté le 06-03-2007 à 17:39:01
question sans doute bête : on peut coder une appli entière avec erlang? (logique métier + IHM)
Marsh Posté le 06-03-2007 à 17:48:05
masklinn a écrit : [explication ruby, blocks, 1st class functions...] |
Merci pour tes exemples détaillés (et du coup, j'ai appris plusieurs trucs sur ruby aussi genre comment créer une fonction utilisant les blocks ).
Marsh Posté le 06-03-2007 à 17:51:25
rufo a écrit : question sans doute bête : on peut coder une appli entière avec erlang? (logique métier + IHM) |
Ouaip (il y a un GTK/Erlang et un wxErlang pour la GUI même si c'est pas non plus pour ça qu'il a été créé).
Néamoins, Erlang est habituellement utilisé pour des trucs qui n'ont pas tellement besoin de GUI. La manière dont c'est fréquement fait est qu'Erlang gère toute la logique applicative, la distribution tout ça et si il y a besoin d'accéder au hardware c'est fait en C/C++ (ce qu'on appelle des "drivers" en Erlang), qui est ensuite appelé via des FFI.
Le recours au C/C++ n'étant que rarement nécessaire à moins de créer le software e.g. d'un switch telecom
IrmatDen a écrit : Merci pour tes exemples détaillés (et du coup, j'ai appris plusieurs trucs sur ruby aussi genre comment créer une fonction utilisant les blocks ). |
Obtenir une référence sur un block
(transformer un block en proc en fait)
Marsh Posté le 06-03-2007 à 18:10:29
Très juste, désolé
Quelque part, c'est fort semblable aux foncteurs en C++ à la (grosse) différence qu'on peut localiser le code de la fonction fournie en paramètre à l'endroit précis de son utilisation?
Marsh Posté le 06-03-2007 à 18:24:33
IrmatDen a écrit : Très juste, désolé |
Mouais...
En beaucoup plus flexible puisque les blocks sont scopés (comme n'importe quel autre objet du langage), n'ont pas besoin d'être nommés (fonctions anonymes) et peuvent être déclarés n'importe où (et le fait que ce soient des objets classiques signifie qu'on peut non seulement les ballader entre les fonctions, mais on peut aussi les stocker dans un Array ou un Hash, ou comme variable membre d'un objet, ou ...)
Marsh Posté le 06-03-2007 à 18:33:47
Ah ouais, j'ai pas pensé à tout ça (vi, je débute en Ruby et j'ai jamais touché python).
Merci pour les détails
Marsh Posté le 06-03-2007 à 18:36:58
IrmatDen a écrit : Ah ouais, j'ai pas pensé à tout ça (vi, je débute en Ruby et j'ai jamais touché python). |
C'est pas fondamentalement une tare de pas savoir ça, les langages "mainstream" n'offrant pas tellement cette possibilité
(elle pue en C et C++, elle superpue en Java [classes anonymes], elle a commencé à apparaître en C# 2.0 mais c'est encore assez bof par rapport à ce qu'on peut trouver ailleurs)
Marsh Posté le 06-03-2007 à 19:26:02
pour quoi?
Marsh Posté le 06-03-2007 à 22:02:59
masklinn a écrit : Le seul truc dont je suis pas sûr et certain c'est pour passer directement des fonctions d'un processus à un autre (je testerais ça ce soir, même si c'est pas d'un intérêt terrible) |
Voila, donc je viens de tester avec le script suivant:
Code :
|
Et je confirme que ça ne pose effectivement strictement aucun problème de balancer des fonctions d'un process à l'autre:
$ erlc test_send.erl $ erl -noshell -noinput -run test_send start {this,[105,115],97,#Fun<test_send.1.126143062>} |
Ici je balance tout d'abord 3 messages de "sauce" à "torrent": une fonction, un string et un int "torrent" appelle les fonctions (et imprime leur valeur de retour) et imprime les strings et ints.
Puis "sauce" envoie un message de terminaison à "torrent" qui répond en envoyant un tuple composé d'un symbol, d'un string, d'un int et d'une fonction, et "sauce" imprime le tout avant de se terminer
Marsh Posté le 06-03-2007 à 22:27:43
Harkonnen a écrit : c'est illisible ces langages |
C'est pas colorisé et codé à la porc pour aller vite surtout
Colorisé c'est déjà largement moins pire e.g.
Après c'est sûr que pour quelqu'un qui ne fait que du C# et du SQL ça peut choquer
Marsh Posté le 07-03-2007 à 06:59:30
Ça à l'air facile de faire une environnement visuel ou semi-visuel genre boiboites à relier pour un truc pareil en fait ...
Marsh Posté le 07-03-2007 à 10:05:17
0x90 a écrit : Ça à l'air facile de faire une environnement visuel ou semi-visuel genre boiboites à relier pour un truc pareil en fait ... |
Je rappelle que quand on code en erlang il faut réfléchir hein
Marsh Posté le 07-03-2007 à 10:07:46
masklinn a écrit : Je rappelle que quand on code en erlang il faut réfléchir hein |
Et ? la seule manière de réfléchir c'est en regardant une grille de caractères colorés ?
Death to the TextBox
Marsh Posté le 07-03-2007 à 10:59:28
0x90 a écrit : Et ? la seule manière de réfléchir c'est en regardant une grille de caractères colorés ? |
C'est pas en reliant des boiboites dans visio en tout cas
Marsh Posté le 07-03-2007 à 14:25:06
masklinn a écrit : C'est pas en reliant des boiboites dans visio en tout cas |
J'ai pas parlé de "développer" en UML heing Je parle qu'on s'astique devant des intelli-bidule et de la coloration syntaxique sur des patés de texte alors que ça fait un moment qu'on a quand même un peu plus de trucs qu'avant dans les toolkits graphiques et que y'a ptêtre moyen de faire un poil plus communicant.
Marsh Posté le 06-03-2007 à 14:31:27
Règles du topic:
1] Ce topci n'est pas un topci sur le cyclimse.
2] Toutes les questions générales, l'actu, même la branlette intellectuelle sont les bienvenues tant que ça concerne les langages fonctionnels.
3] Pour troller, utiliser les catégories approriées du forum comme Seti ou OSA.
4] Pour les questions plus spécifiques, créez un topic.
Pour les liens intéressants et autres ressources, me MP je mettrai ça dans le topic.
Des sondages intéressants pourront apparaître aléatoirement, comme ça, suivant si j'ai envie ou pas, si j'ai chié mou la veille, etc.
Règles du topic:
1] No bitch
2] No 4chan
3] No dawa
Faites pas les malins, j'ai la modération en MP ©
Message édité par Chaos Intestinal le 29-10-2007 à 17:24:22