Aller au menu - Aller au contenu

Sortie de Racket 5.0.1, un langage fonctionnel dérivé de Scheme

Revenir à la liste des news
Participer à la discussion

Image

Informations

Contributeur(s) : colbseton
Publié : le 08/08/2010 à 18:59:02
Catégorie : Programmation
Visualisations : 3 006

Licence : Creative Commons BY SA

Sortie de Racket 5.0.1, un langage fonctionnel dérivé de [...]

Racket, un langage de programmation multi-plate-forme et influencé par Scheme, fait parler de lui en étant disponible dans une nouvelle version 5.0.1 annoncée le 3 août dernier. Les développeurs espèrent bien que le langage remportera un franc succès et deviendra plus connu du public.


Les caractéristiques de Scheme


En créant le langage fonctionnel Scheme en 1975, Guy L. Steele et Gerald Jay Sussman, tous deux développeurs du MIT, voulaient élaborer un dialecte de Lisp plus épuré, d'où la syntaxe et la sémantique simple de Scheme.

Le mode d'évaluation de Scheme



Image utilisateur
Scheme est typé dynamiquement et utilise l'évaluation stricte (ou non-paresseuse). Cela veut dire que les paramètres d'une fonction sont évalués avant l'application de la fonction elle-même. On peut comprendre cela avec un calcul mathématique, qui, dans le cas d'un langage fonctionnel, correspond à une évaluation de fonctions :
(+ 7 (+ 1 1))(+ 7 2)9 .

La définition de variable utilise le mot clé define . Pour une variable x qui vaut 5 définie par (define x 5) , l'évaluation remplacera d'abord x par sa valeur :
(+ 2 (+ x 3))(+ 2 (+ 5 3))(+ 2 8)10 .

L'optimisation tail-rec


Le standard de Scheme a pour but d'optimiser la récursion terminale au travers de toutes ses implémentations. Le compilateur pouvant transformer ce cas de récursivité en itération (une boucle), la pile d'exécution est économisée. Pour plus d'information sur cette pratique, voyez le tutoriel sur la récursivité de bluestorm.


Racket, un langage dérivé de Scheme


Image utilisateur
Dans le milieu des années 90, Matthias Felleisen a fondé PLT, un groupe de recherche qui proposait des cours et des exercices destinés aux débutants. En janvier 1995, le projet est devenu un environnement de programmation pédagogique. Le 7 juin dernier, PLT Scheme a changé de nom pour devenir Racket, les développeurs désirant en effet être plus indépendant vis-à-vis du standard de Scheme.

Racket est un langage de programmation multi-paradigmes (fonctionnel, orienté objet) basé sur Scheme. Néanmoins, le développeur a la possibilité de développer lui-même ses propres paradigmes grâce aux macros, qui constituent une grande caractéristique des langages de la famille de Lisp. Comme Scheme, Racket optimise la récursion terminale et possède lui aussi une évaluation stricte.

Typed Racket


Par défaut, le typage de Racket est dynamique. C'est à dire que que le type est évalué selon les besoins. Avec Typed Racket le typage peut devenir statique.

Voici un code écrit en Racket sans Typed Racket :
Code : Scheme - Un code Racket sans Typed Racket
1
2
3
4
(define-struct pt (x y)) ; on définit une structure nommée pt avec les champs x et y

(define (mag p)
    (sqrt (+ (sqr (pt-x p)) (sqr (pt-y p)))))


Avec Typed Racket, le code devient :
Code : Scheme - Le même code mais avec Typed Racket cette fois
1
2
3
4
5
6
7
#lang typed/racket ; on charge typed racket
; on définit la même structure, en précisant que x et y sont des Réels
(define-struct: pt ([x : Real] [y : Real])) 
  
(: mag (pt -> Number)) ; une fonction de type pt -> Number
(define (mag p)
    (sqrt (+ (sqr (pt-x p)) (sqr (pt-y p)))))


Les développeurs indiquent travailler sur une prochaine optimisation de Typed Racket.

Le module Slideshow


Le module Slideshow est en quelque sorte une bibliothèque de dessin d'images. Par exemple, avec le module Slideshow chargé, quand on tape > (circle 10) on obtient en sortie Image utilisateur.
circle est donc une fonction qui prend en argument la taille du cercle en pixels. Si vous transmettez plus d'un paramètre à la fonction circle, cette dernière renvoie une erreur. Il est aussi possible de nommer le cercle qui a été créé : (define c (circle 10)) .

La fonction qui suit, nommée « suite », prend en paramètre une autre fonction et affichera à la suite trois images, chacune étant plus grande que l'autre. On exploite ainsi le côté fonctionnel du langage puisque l'argument de la fonction est une fonction :
Code : Scheme - Le code Racket de la fonction « suite »
1
2
(define (suite f)
    (hc-append 4 (f 5) (f 10) (f 20)))

La fonction hc-append combine les images qu'on lui passe en paramètre, on peut aussi préciser l'espacement entre chacune. Ainsi lorsqu'on tape > (suite circle) on a en sortie Image utilisateur .


Cette présentation est très brève. Racket a plusieurs points communs avec Scheme, mais il apporte néanmoins de nouveaux éléments dans le but de se démarquer, comme une multitude de modules.


Les nouveautés de la version 5.0.1


Deux nouveaux arrivants : Datalog et Racklog


Datalog est un langage logique de requêtes (Prolog restreint) et de règles pour les bases de données déductives et est à présent intégré à Racket.

Toujours dans le domaine de la programmation logique, Racklog lui est aussi intégré à Racket. Concrètement il offre à Racket une programmation logique comme le langage de programmation Prolog tout en gardant les conventions de code de Racket.
Code : Scheme - Exemple d'utilisation de Racklog pour calculer la longueur d'une liste
1
2
3
4
5
6
7
; code d'acieroid, dans le cadre de l'atelier Prolog
(define %length
  (%rel (x x1 head tail)
        [('() 0)]
        [((cons head tail) x)
           (%length tail x1)
           (%is x (+ x1 1))]))

Racket contient également d'autres langages que le Racket lui-même, comme un Scheme R6RS.

Syntaxe


Le macro define-struct a maintenant un équivalent struct qui a été implémenté pour s'inscrire plus naturellement à la macro match pour le pattern matching, dont voici un exemple d'utilisation :
Code : Scheme - Exemple d'utilisation du pattern matching avec Racket
1
2
3
4
5
(match "apple"
    [(regexp #rx"p+") 'yes]
    [_ 'no])

; renverrait 'yes car « apple » vérifie la regexp


Deux nouvelles fonctions d'affichage eprintf et displayln font leur entrée dans Racket.

On peut également noter l'existence de ffi/unsafe , une bibliothèque qui permet d'appeler du code C à l'intérieur d'un programme codé en Racket, sans avoir à réécrire le code C. Initialement nommée scheme/foreign , cette bibliothèque a été réarrangée dans la version 5.0.1 de Racket.



Liens et sources

24 Participations

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Pseudo Discussion
1 visiteur sur cette news (0 membre et 1 Anonyme)
Page 1 
Hors ligne Anonyme # Posté le 08/08/2010 à 19:04:23

L'article est très lisible, je suis content de découvrir un langage fonctionnel et OO, on en apprends tout les jours
Hors ligne Marg51 # Posté le 08/08/2010 à 19:24:55

Avatar

Ville : Saint pierre de boeuf
Pays : France métropolitaine

Je n'en avais absolument jamais entendu parler, news très enrichissante

user powered by Image utilisateur
 
Hors ligne yoch # Posté le 08/08/2010 à 19:36:38
Avatar

Intéressant, je me suis penché sur Scheme depuis peu, et j'étais tombé par hasard sur Racket en voulant télécharger PLT-Scheme.

La news parait intéressante (j'ai l'impression qu'il y a pas mal de news sur de nouveaux langages dernièrement).

Sinon, je n'aime pas du tout le nom du projet, mais enfin bon...
 
Hors ligne anonyme # Posté le 08/08/2010 à 19:45:51

Félicitations à Colb-Seton pour cette news, qui marque son arrivée (méritée) chez les verts :) . À part certains (courts) passages, je trouve que l'article est bien écrit, synthétique et intéressant. En un mot : frais.

Concernant Racket, c'est cool que certains développeurs semblent avoir envie de promouvoir leur implémentation de Scheme, quitte à s'en démarquer. Scheme est un langage intéressant, mais bouffé par les nombreuses et différentes implémentations plus ou moins compatibles qui en existent (la norme est une blague). Quand on arrive sur la page de Racket, on tombe sur du concret, par exemple

Code : Autre
1
2
3
(for ([path (in-directory)])
  (when (regexp-match? #rx"[.]rkt$" path)
    (printf "source file: ~a\n" path)))
Hors ligne nietzsche # Posté le 08/08/2010 à 19:54:48 Commentaire supprimé pour le motif suivant : Le flood est strictement interdit.
Hors ligne spider-mario # Posté le 08/08/2010 à 19:55:16
Avatar

Ville : Montigny-lès-cormeilles
Pays : France métropolitaine
Études : INSA Rouen

Citation : yoch
Intéressant, je me suis penché sur Scheme depuis peu, et j'étais tombé par hasard sur Racket en voulant télécharger PLT-Scheme.

À noter que Racket est l’ancien PLT-Scheme qui a été renommé. ;)
Hors ligne aerth # Posté le 08/08/2010 à 20:01:59
Que la lumière soit
Avatar

jamais, mais alors jamais du tous entendu parlé...
Je suis content, j'en apprend des choses avec les news du sdz ^^

L'intelligence artificielle ça dépote : Le blog TPE sur le sdz.

plop...plop'plop
o_O qu'es ce qu'y a flupy, parle :o

 
Hors ligne keke21410 # Posté le 08/08/2010 à 20:10:06
"Belong to web"
Avatar

Ville : Ancey
Pays : France métropolitaine

Merci pour la news :)

je ne connaissais pas du tout et n'avais pas du tout entendu parlé !!

Drôle de syntaxe je trouve tout de même o_O
 
Hors ligne SpaceFox # Posté le 08/08/2010 à 20:29:46
Utilise ton cerveau !
Avatar
Validateurs
Flux RSS

Études : UTT

News sympa et bien écrite.

Je suis sûr qu'on peut trouver un langage avec encore plus de parenthèses ^^

Image utilisateur
 
Hors ligne d2r2 # Posté le 08/08/2010 à 20:30:39
Avatar

Citation : keke21410

Drôle de syntaxe je trouve tout de même o_O


Je dirais même plus, cette syntaxe est repoussante ! o_O
Hors ligne 11TLP # Posté le 08/08/2010 à 20:56:36
i'm a fag, a 東方 fag
Avatar

Ville : Limoges
Pays : France métropolitaine
Études : Lycée Gay-Lussac - Limoges

Mais non, mais non, ce n'est pas repoussant. C'est juste différent.

En train de développer un JV du type shoot'em up / jeu de cartes.

Pourquoi les Goto/Lbl en Ti-Basic c'est LE MAL ! (et partout d'ailleurs)
 
Hors ligne colbseton # Posté le 08/08/2010 à 20:59:42
Have you met me ?
Avatar
Groupe : Anciens

Merci ça donne envie de continuer quand on a des commentaires comme ça :) .
Quand vous choisissez un langage, il ne faut pas s'arrêter à sa syntaxe, c'est une erreur.

 
Hors ligne planete.game57 # Posté le 08/08/2010 à 21:34:04
Avatar

Études : IRIS

Pour ma part, je viens de découvrir aussi, j'ai déjà entendu parler du Scheme mais pas de Racket.

Merci pour cette news, elle m'a appris bien des choses. ;)

xHTML/CSS |||||||||| 100% | PHP/MySQL |||||||||| 100% | Langage C |||||||||| 8.5%
Python |||||||||| 100% | JavaScript |||||||||| 5.5% | Photoshop |||||||||| 0.0%
Smarty |||||||||| 100%

Image utilisateurImage utilisateur
 
Hors ligne Abraxasz # Posté le 08/08/2010 à 21:42:29
It just doesn't matter
Avatar

Totalement nouveau pour moi. Je code un peu en Common Lisp, mais je n'avais jamais entendu parler de Racket. Je vais jeter un coup d'oeil sur le site pour voir si la communauté d'adepte (racketteurs???) est nombreuse, et si le projet est actif..

Keep it small, keep it simple, let it happen..

 
Hors ligne spider-mario # Posté le 08/08/2010 à 22:27:06
Avatar

Ville : Montigny-lès-cormeilles
Pays : France métropolitaine
Études : INSA Rouen

Citation : d2r2
Citation : keke21410

Drôle de syntaxe je trouve tout de même o_O


Je dirais même plus, cette syntaxe est repoussante ! o_O

Il n’y a pourtant pas de quoi, elle est jolie par sa simplicité (Scheme est d’ailleurs un langage réputé (et conçu) pour être épuré) : (f a b c) est, tout simplement, un appel de la fonction f avec les arguments a, b et c.

Les fonctions peuvent prendre un nombre fixe ou un nombre indéfini d’arguments. La fonction +, par exemple, est dans le second cas ; c’est ainsi qu’il est possible d’écrire (+ 1 2 3), qui vaut 6.
Similairement, la fonction list permet de construire une liste (mais un raccourci existe : il est possible, plutôt que d’écrire (list 1 2 3), d’écrire '(1 2 3), cela fait entrer en jeu le quoting).

Enfin, la syntaxe est extensible à l’aide de macros. Il est ainsi possible, par exemple, de réécrire if à partir de cond (cond étant similaire au if d’Erlang, pour ceux qui connaissent) :
Code : Scheme
1
2
3
4
5
6
7
8
(define-syntax myIf
  (syntax-rules ()
    [(_ condition true-expr false-expr) (cond [condition true-expr]
                                              [else false-expr])]))

; myIf est alors utilisable comme le if défini par défaut.
; L’expression suivante vaut 42, ce qui prouve qu’il ne s’agit pas juste d’une fonction puisque l’évaluation n’est pas paresseuse :
(myIf #t 42 (/ 1 0))


Si myIf avait été défini comme une fonction, ses arguments auraient été évalués, (/ 1 0) compris. Il s’agit donc bel et bien d’une extension de la syntaxe.
Hors ligne Qebab # Posté le 08/08/2010 à 22:43:28
Pouet
Avatar

Intéressant comme news, je connaissais pas du tout Scheme et dérivatifs, juste entendu parler.
Je regrette juste que le contenu présentant 2-3 caractéristiques du langage sois un peu flou ..
Hors ligne Stefanletroll # Posté le 08/08/2010 à 23:06:13
Avatar

La news est bonne, comme dit précédemment, par contre je trouve qu'il manque au début quelque info pour donné le concept du langage.

A par la phrase sur le compilateur, impossible de savoir par exemple si c'est un language compilé ou interprété. (A par une allusion sur le compilateur)

Enfin bref, je trouve dommage qu'il manque une petite phrase sur le contexte du language.

Sauver Terre 18, la seul planete ou il y a des vignes farcis a la courgette :D - Création de site internet sur Aix les bains
Image utilisateur
 
Hors ligne Triviak # Posté le 08/08/2010 à 23:24:10
vous aime !
Avatar

Bonne news !

Je viens de découvrir un nouveau langage....

Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur
Image utilisateur
 
Hors ligne rks` # Posté le 08/08/2010 à 23:44:21
Avatar

Études : Paris 7 Denis Diderot

Citation : planete.game57
Pour ma part, je viens de découvrir aussi, j'ai déjà entendu parler du Scheme mais pas de Racket.

Malgré ce que semble dire l'article. Racket est bien une (des nombreuses) implémentations de Scheme, rien de plus, rien de moins. (bon ok, avec une stdlib conséquente en plus).
Comme l'a déjà rappellé spider-mario, ça s'appellait jusqu'à récement « PLT-scheme » et l'interpréteur utilisé par genre tout le monde était mzscheme, maintenant que je tape mzscheme dans ma console il se passe ça :
Code : Console
zsh/3 1001 % mzscheme
Welcome to Racket v5.0.
>


Voilà, voilà.

The Lambda Church
« What we represent to them is freedom. »
 
Hors ligne fungio # Posté le 09/08/2010 à 09:01:57
[Impossible is Nothing]
Avatar

Études : IUT Havre

la syntaxe rappelle un peu le Lisp ^^
news interessante

Image utilisateur
 
Hors ligne acieroid # Posté le 09/08/2010 à 10:11:26
#foo waz here
Avatar
Flux RSS

Études : FSA ULB

Citation : Dark-Side
Racket est bien une (des nombreuses) implémentations de Scheme, rien de plus, rien de moins.


Le langage Racket n'est pas en tout point compatible avec Scheme, par exemple les cons cells ne sont pas mutables en Racket alors qu'elles le sont bien en Scheme. Néanmoins ils implémentent aussi un scheme plus ou moins conforme au R6RS, mais qui est différent du langage Racket (au même titre que leur implémentation de Datalog, qui n'utilise même pas de s-exps).

Citation
A par la phrase sur le compilateur, impossible de savoir par exemple si c'est un language compilé ou interprété. (A par une allusion sur le compilateur)


Citation : documentation de racket

Before expanded code is evaluated, it is first compiled.

For example, the eval procedure takes a syntax object and expands it, compiles it, and evaluates it.

(voir ici)
C'est donc bien un langage compilé (mais qui reste interactif au travers d'un REPL (de la même manière que les autres lisps, ou que python par exemple).

It's awesom.
 
Hors ligne bluestorm # Posté le 09/08/2010 à 14:02:25
dont ask to ask
Avatar
Groupe : Anciens
Flux RSS

Très bon sujet de news ! Ça fait plaisir de voir des langages moins connus sur le SdZ, mais qui méritent de faire parler d'eux, être mis en avant comme ça.

En voyant le titre de la news, je me suis dit que iPoulet ou gnomnain avaient encore frappé. Content de voir encore du sang neuf (enfin, neuf, Colb-Seton on le croise sur des sujets proches depuis quelques temps déjà).
 
Hors ligne spider-mario # Posté le 09/08/2010 à 15:33:12
Avatar

Ville : Montigny-lès-cormeilles
Pays : France métropolitaine
Études : INSA Rouen

Citation : fungio
la syntaxe rappelle un peu le Lisp ^^

Le contraire serait surprenant : il s’agit d’un Lisp. ;)
Hors ligne Sota # Posté le 09/08/2010 à 16:52:03
Avatar

En voilà, une news fort sympathique qui, comme déjà dit avant, met sur les feux de la rampe du site du zéro un langage qui vaut le détour et qui m'intéresse depuis toujours. Merci Colb-Seton !

La World Compagny
The Lambda Church
"C'est bon, fais pas genre il est encore en vie ce blog.
C'est un Zombie (Holocaust) et tout le monde le sait."
Drksd.
"Beer and Yoghurt." Katen.
 
Pour accéder à cette section
Connectez-vous !
connexion_rpx

Revenir à la liste des news