Aller au menu - Aller au contenu

Des nouvelles du langage Ruby !

Revenir à la liste des news
Participer à la discussion

Image

Informations

Contributeur(s) : robin850
Publié : le 05/11/2011 à 14:28:51
Catégorie : Programmation
Visualisations : 11 014

Licence : Creative Commons BY SA

Des nouvelles du langage Ruby !

La version 1.9.3 du célèbre langage de programmation Ruby vient de sortir (version 1.9.3p0 qui signifie patch 0, soit aucun patch correctif). Cette nouvelle version apporte son lot de nouveautés et notamment un abandon de la licence GPL.

Le langage Ruby


Image utilisateur
Ruby est un langage de programmation orienté objet, libre et multiplateforme qui essaye de mettre l'accent sur la simplicité et la productivité. La conception du langage débute en 1993 par Yukuhiro Matzumoto (plus connu sous le nom de Matz) à qui aucun langage ne convenait à l'époque. Il publiera une première version du langage en 1995. La syntaxe du langage est assez proche de celle des langages tel que Python ou Perl. Le langage a la particularité d'être totalement orienté objet. Depuis sa première version, Ruby a fait un petit bout de chemin et est maintenant assez connu et est à la base d'un framework web très connu dans le monde professionnel : Ruby on Rails.

Les changements de cette version


Cela fait bientôt un an que la version 1.9.2 du langage est apparue permettant ainsi de stabiliser la branche 1.9 du langage. Cette nouvelle version du langage (1.9.3), apporte quelques nouveautés intéressantes que nous allons développer ici.

Kernel#require


La méthode Kernel#require a connu des changements et réduit le temps de chargement du code. Nous vous parlons de cette nouveauté car le framework Ruby on Rails utilise beaucoup cette méthode dans son code source. Vous pouvez d'ailleurs le regarder par vous-même.

Gem est ce que l'on appelle un gestionnaire de paquets. Il est dédié à Ruby et fonctionne sur tous les systèmes où Ruby fonctionne. Une gem est un paquet pouvant être installé via le gestionnaire de paquets Gem. On les appelle aussi RubyGems.


Abandon de la licence GPL


La version 1.9.3 abandonne la licence GPL version 2 (notamment utilisé par le noyau Linux) au profit de la licence BSD certainement pour rendre la distribution du code compatible avec la GPL version 3.

Nouveaux encodages


Cette nouvelle version se voit dotée du support de nouveaux encodages tels que CP950, CP951, UTF-16 et UTF-32. On constatera aussi que l'encodage SJIS change de nom et devient Windows-31 J.

Les expressions régulières (connues aussi sous le nom de RegExp) supportent désormais l'Unicode 6.0.

Nouvelles méthodes


Pas mal d'objets se sont vu dotés de nouvelles méthodes et notamment ARGF avec les méthodes write, write_to_io et puts (pour ne citer qu'elles). On pourrait également parler de l'objet IO avec sa nouvelle méthode write permettant d'écrire dans des fichiers ou la méthode binwrite équivalente à la méthode write en version binaire. L'objet Module a, lui aussi, deux nouvelles méthodes : Module#private_constant et Module#public_constant qui permettent de définir la "visibilité" d'une constante (publique ou privé). Par exemple :
Code : Ruby
1
2
3
4
module Personnage
  name = 'CJ'
  public_constant :name
end


L'objet Matrix quant à lui possède désormais plus d'une quinzaine de nouvelles méthodes. Cet objet permet de représenter une matrice mathématique. On peut par exemple citer Matrix#diagonal? (permettant de vérifier si la matrice est une diagonale). Cet objet s'adresse particulièrement aux scientifiques.

En résumé


Ruby est un langage de programmation orienté objet. Il vient actuellement de sortir une nouvelle version 1.9.3. Cette version apporte plusieurs nouveautés et notamment des changements au niveau de la méthode Kernel#require très utilisé par le framework Ruby on Rails. Une version 2.0 de Ruby est prévu pour 2013 mais une version 1.9.4 verra le jour avant le changement de branche.

Liens et sources


76 Participations

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1  2  3  Suivante
Pseudo Discussion
1 visiteur sur cette news (0 membre et 1 Anonyme)
Page 1  2  3  Suivante
Hors ligne sérégon # Posté le 05/11/2011 à 14:51:50
La POO il n'y a que ca de vrai
Avatar

Je ne conaissait pas ce langage, tres interessant et news bien faite ;)

J'ai découvert la puissance du C++ et de Qt

POUET_FOREVER et PARAZE fan ;)
 
Hors ligne anonyme # Posté le 05/11/2011 à 14:55:21

Ça serais pas mal d'avoir un petit benchmark pour voir si l'optimisation de Kernel#require est vraiment importante. Le changement de licence n'est pas une mauvais chose non plus.
Toutefois, petite news, plutôt une brève.
Hors ligne webshinra # Posté le 05/11/2011 à 15:33:10 Commentaire supprimé pour le motif suivant : Pas de début de troll.
Hors ligne Mow # Posté le 05/11/2011 à 15:46:23
La vie sans compromis.
Avatar
Flux RSS

Ville : Grenoble
Pays : France métropolitaine

merci pour la news ;)
 
Hors ligne Jeremy0201 # Posté le 05/11/2011 à 16:06:42 Commentaire supprimé pour le motif suivant : Pas de début de troll.
Hors ligne VainEntetement # Posté le 05/11/2011 à 16:17:08 Commentaire supprimé pour le motif suivant : Pas de début de troll.
Hors ligne guk92 # Posté le 05/11/2011 à 16:46:25
Avatar

Études : BTS NEWTON ENREA

Déjà entendu parler de ce langage en effet, il n'est pas aussi populaire et répandu que le PHP, sa syntaxe n'est pas des plus facile non plus (il me rappelle l'Algol), mais ça reste tout de même un langage qui a au moins 15 ans comme le PHP.

Comme Maeln l'ai dit, ce serait bien d'avoir un benchmark, voir un benchmark comparatif entre plusieurs langages récents.
Hors ligne remvst # Posté le 05/11/2011 à 17:26:39
Avatar

Ville : Amiens
Pays : France métropolitaine

J'avais cru comprendre que le Ruby était plus performant que le PHP. Quelqu'un peut confirmer ?
Citation : guk92
... sa syntaxe n'est pas des plus facile non plus (il me rappelle l'Algol)...

Question d'habitude, et franchement, si ça ne ressemble pas du tout au C, je le trouve bien plus simple à lire que PHP et compagnie (cela dit j'aime pas la syntaxe non plus).

Image utilisateur
 
Hors ligne anonyme # Posté le 05/11/2011 à 17:34:13

Voilà votre benchmark http://shootout.alioth.debian.org/u64q [...] on&calc=chart (pensez à regarder aussi les caractéristiques de la machine servant à tester). Donc tout-le-monde est à peu près au même niveau.
Connecté robin850 # Posté le 05/11/2011 à 17:35:02
Avatar

Ville : Avesnes-sur-helpe
Pays : France métropolitaine

Je tenais à remercier Mon Ouïe et remontees pour leurs conseils sur cette news ! :)

Concernant vos remarques. Ruby est en fait un langage aussi vieux que PHP mais il laisse beaucoup plus de liberté. On peut écrire un code qui produira la même chose mais de manière différentes. Il reprend aussi des concepts de certains langages. Par exemple, on peut aussi bien faire :
Code : Ruby
1
array.each do |i| i end

ou bien
Code : Ruby
1
array.each { |i| i }


et c'est vrai que quand on vient de Java, PHP ou C, on a l'habitude de mettre des crochets. J'oublie d'ailleurs encore souvent le do ... end. Ceux qui trouve ça syntaxe dure se trompe. Il est assez haut niveau et est beaucoup plus simple que du C ou du PHP. Enfin, je ne souhaite pas alimenter le troll car chaque langage a ses bons et ses mauvais côtés. Ruby est réputé pour ne pas être très rapide (c'est d'ailleurs pour ça que l'on peut étendre nos programmes avec du C).

Merci pour vos conseils, je prends note pour la news de l'année prochaine. :D

Pardonnez mes fautes d'orthographe.
Image utilisateur


Utilisation de Twig, un moteur de Templates
 
Hors ligne Jeremy0201 # Posté le 05/11/2011 à 17:40:18
Avatar
Groupe : Bannis

Mon message a été supprimé alors qu'il parlait de la nouvelle licence.. je voit pas en quoi c'était un troll !

Image utilisateur
 
Hors ligne guk92 # Posté le 05/11/2011 à 17:47:00
Avatar

Études : BTS NEWTON ENREA

Citation : remvst
J'avais cru comprendre que le Ruby était plus performant que le PHP. Quelqu'un peut confirmer ?


Oui c'est vrai, j'ai vu des Benchmark où le Ruby et Python sont devant le PHP, mais la différence de performance n'est pas énorme (le C est très loin devant).
De plus le PHP à l'avantage d'être très léger consommation ressource comparé à ces deux là et sa syntaxe est plus facile à apprendre, raison pour laquelle le PHP est l'implémentation la plus répandu chez les hébergeurs mutualisés et possède un grande communauté.

Concernant sa syntaxe je ne suis pas d'accord, c'est verbeux.
J'estime qu'un langage se doit au moins de posséder des crochets pour déterminer le début et la fin d'un bloc d'instruction, donc c'est facile pour les petits blocs, mais lorsque tu crée une fonction qui fait plus de 100 lignes de code ça commence à se compliquer ;)
Hors ligne Artefact2 # Posté le 05/11/2011 à 17:50:05
Avatar

Ville : Reims
Pays : France métropolitaine
Études : Université de Reims

Citation : robin850
Je tenais à remercier Mon Ouïe et remontees pour leurs conseils sur cette news ! :)

Concernant vos remarques. Ruby est en fait un langage aussi vieux que PHP mais il laisse beaucoup plus de liberté. On peut écrire un code qui produira la même chose mais de manière différentes. Il reprend aussi des concepts de certains langages. Par exemple, on peut aussi bien faire :
Code : Ruby
1
array.each do |i| i end

ou bien
Code : Ruby
1
array.each { |i| i }


et c'est vrai que quand on vient de Java, PHP ou C, on a l'habitude de mettre des crochets. J'oublie d'ailleurs encore souvent le do ... end. Ceux qui trouve ça syntaxe dure se trompe. Il est assez haut niveau et est beaucoup plus simple que du C ou du PHP. Enfin, je ne souhaite pas alimenter le troll car chaque langage a ses bons et ses mauvais côtés. Ruby est réputé pour ne pas être très rapide (c'est d'ailleurs pour ça que l'on peut étendre nos programmes avec du C).

Merci pour vos conseils, je prends note pour la news de l'année prochaine. :D


En PHP aussi, il y a plusieurs syntaxes différentes pour faire la même chose… De là à dire qu'il y a plus de "liberté"… C'est juste du sucre syntaxique.

Code : PHP
1
2
3
4
5
6
7
8
<?php
foreach($array as $i) {
    echo $i;
}

foreach($array as $i):
    echo $i;
endforeach;


(Cf, endif, endfor, endwhile etc.)

PS: les crochets sont []. Tu voulais sûrement parler des accolades {}.
Hors ligne guk92 # Posté le 05/11/2011 à 17:58:13
Avatar

Études : BTS NEWTON ENREA

Citation : Artefact2
PS: les crochets sont []. Tu voulais sûrement parler des accolades {}.

Oui, moi aussi j'ai fais l'erreur :p
Hors ligne spider-mario # Posté le 05/11/2011 à 18:10:40
Avatar

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

Citation : guk92
Oui c'est vrai, j'ai vu des Benchmark où le Ruby et Python sont devant le PHP, mais la différence de performance n'est pas énorme (le C est très loin devant).
De plus le PHP à l'avantage d'être très léger consommation ressource comparé à ces deux là […].

Contradiction ?

Citation : guk92
[la syntaxe de PHP] est plus facile à apprendre

Pourquoi, s’il te plaît ? :)
Hors ligne Mon ouïe # Posté le 05/11/2011 à 18:13:08
Flux RSS

maeln: Tu peux voir ici : http://www.rubyinside.com/ruby-1-9-3-f [...] ire-4927.html
(Remarque que ça ne concerne quand même que le temps de démarrage, vu qu require n’est pas appelé au milieu de l’exécution d’ùn programme)

elf32: Je ne sais pas pour ce qui est des autres langages, mais en tout cas le code des benchmarks Ruby ne ressemble pas du tout au code Ruby utilisé dans la réalité.
Hors ligne pacman2 # Posté le 05/11/2011 à 18:13:34
Zzzz
Avatar

Tiens j'ai jamais vu de projets de zéros codés en Ruby (et en RoR), personne n'en fait ?
 
Hors ligne hussem26 # Posté le 05/11/2011 à 18:37:12 Commentaire supprimé pour le motif suivant : Flood interdit, merci.
Hors ligne guk92 # Posté le 05/11/2011 à 18:42:07
Avatar

Études : BTS NEWTON ENREA

@spider-mario

Je ne vois pas où est la contradiction, j'ai vu des Benchmark qui montraient bien que le PHP était très léger.


Pourquoi, s’il te plaît ?
Le langage fait assez oldschool à mon goût.
Il n'y a des accolades pour déterminer le début et fin d'un bloc d'instruction, souvent quand tu as des begin et end l'utilitaire ne t'indique pas le début ou fin du bloc c'est très perturbant (ex: T-SQL sous SQL Server), je n'ai pas vu de parenthèses pour les conditions ou boucles donc il faut taper plus de mot sur le clavier, il n'y a pas de point-virgule pour déterminer la fin d'une instruction et quand tu as une instruction qui fait plus d'une ligne c'est moins lisible sur plusieurs lignes.
On ne met pas de type pour PHP, mais le fait de mettre un symbole dollar montre qu'il s'agit d'une variable, et en le colorant avec un utilitaire.
Hors ligne neowillow # Posté le 05/11/2011 à 18:53:05
(/◔ ◡ ◔)/
Avatar
Groupe : Anciens

Citation : guk92
Concernant sa syntaxe je ne suis pas d'accord, c'est verbeux.
J'estime qu'un langage se doit au moins de posséder des crochets pour déterminer le début et la fin d'un bloc d'instruction, donc c'est facile pour les petits blocs, mais lorsque tu crée une fonction qui fait plus de 100 lignes de code ça commence à se compliquer ;)

Deux questions :
  • En quoi le manque d'accolade pour délimiter les blocs d'instructions rend t-il la syntaxe verbeuse ? En Caml ou en Python, on a pas ça, et pourtant on ne peut pas dire que l'on ait à supporter le caractère verbeux de leur syntaxe...
  • Tu crois pas que si t'arrives à pondre une fonction de plus de 100 lignes, surtout dans un langage comme Python ou Ruby, c'est qu'il faut te poser des questions sur la manière d'organiser ton code ?

#LGDF: victor vaincra !
« Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi »
Statistiques mondiales en temps réel. - FAQ C - The C LRG - FAQ Java - Python - OCaml - quoi.info - La France vue par différentes populations




 
Hors ligne AporieDramatique # Posté le 05/11/2011 à 18:56:02
Groupe : Aigris++.
Groupe : Bannis

Citation : guk92
@spider-mario

Je ne vois pas où est la contradiction, j'ai vu des Benchmark qui montraient bien que le PHP était très léger.


Ce benchmark est ridicule. Non seulement il évalue les deux langages sur un exemple tellement simple qu'il en est insignifiant, mais en plus sa conclusion sur la consommation mémoire est aberrante. L'utilisation d'un range(0,5000000) provoque l'allocation d'une liste de 5000000 éléments. Tu es surpris que ça consomme plus de mémoire qu'une simple boucle for ? Pas moi.

Pour revenir dans le sujet, il est inutile de chercher à comparer les performances de langages comme PHP, Python ou Ruby. Dans tous les cas, elles sont très mauvaises. Ce qui compte, c'est que Ruby (et Python, à plus forte raison) aient une sémantique plus propre que celle de PHP.

La syntaxe, c'est tellement secondaire…

 
Hors ligne spider-mario # Posté le 05/11/2011 à 19:24:57
Avatar

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

Citation : guk92
je n'ai pas vu de parenthèses pour les conditions ou boucles donc il faut taper plus de mot sur le clavier

Oui, clairement, if truc: est plus long que if($truc).

Par ailleurs, je ne vois pas en quoi les accolades rendent les blocs plus évidents que l’indentation ou des begin/end.

Plusieurs des arguments que tu donnes en faveur de la syntaxe de PHP dépendent complètement d’outils spécifiques. Mon environnement n’a pas besoin de dollars pour colorer les variables.
Connecté robin850 # Posté le 05/11/2011 à 19:30:04
Avatar

Ville : Avesnes-sur-helpe
Pays : France métropolitaine

@Artefact2 : c'était un exemple. Je ne dis pas que Ruby est meilleur que PHP mais je dis juste qu'il laisse plus de liberté de mon point de vue. ;) Chacun pense ce qu'il veut du langage dont il est fan. Pour le "sur plusieurs lignes les accolades c'est mieux", c'est pour ça que Ruby laisse la liberté de choisir ce que tu veux : accolades ou do ... end mais normalement avec l'indentation tu le vois bien et je ne dis pas que PHP ne la laisse pas pour autant.

Après les comparatifs avec PHP sont récurrent sur la plupart des news sur Ruby ou Rails et je trouve ça assez dommage. On s'en fout, c'est juste qu'ils sont pas fait pour la même chose et chacun en pense ce qu'il veut.

Pardonnez mes fautes d'orthographe.
Image utilisateur


Utilisation de Twig, un moteur de Templates
 
Hors ligne guk92 # Posté le 05/11/2011 à 19:56:14
Avatar

Études : BTS NEWTON ENREA

Citation : spider-mario

Oui, clairement, if truc: est plus long que if($truc).

Pour moi cette syntaxe n'est pas très lisible, moi ce que j'ai vu en Ruby c'est :
if condition then
# Instructions
end

Citation : neowillow
En quoi le manque d'accolade pour délimiter les blocs d'instructions rend t-il la syntaxe verbeuse ? En Caml ou en Python, on a pas ça

Pour te prendre un exemple en Python :
Code : Python
1
2
3
4
5
6
7
8
9
if var == 200:
   print "1 - Got a true expression value"
   print var
elif var == 150:
   print "2 - Got a true expression value"
   print var2
elif var == 100:
   print "3 - Got a true expression value"
   print var


Le Python n'est pas verbeux mais imagine que tes if doivent contenir 10 autres if, une erreur de tabulation et tu vas avoir du mal à t'y retrouver.


Citation : neowillow
Tu crois pas que si t'arrives à pondre une fonction de plus de 100 lignes, surtout dans un langage comme Python ou Ruby, c'est qu'il faut te poser des questions sur la manière d'organiser ton code ?

Non pourquoi ? Il m'est déjà arrivé de créer des fonctions qui font plus d'une centaine de ligne de code. :D


Par expérience avec le T-SQL, on observe que Microsoft incite les utilisateurs à mettre des parenthèses et des point-virgules là où on peut en mettre, et pour 2 raisons à mon avis :
- Cela améliore la compilation
- Cela ajoute de la lisibilité
Hors ligne VainEntetement # Posté le 05/11/2011 à 20:12:49
Avatar

Sauf qu'une erreur de tabulation se fait moins facilement et se remarque beaucoup plus vite qu'une erreur d'accolade, surtout quand tu as 10 `if` imbriqués, comme tu le dis.

Et d'ailleurs, même avec des accolades t'es censé indenter.
Hors ligne rotoclap # Posté le 05/11/2011 à 20:15:11
Avatar
Groupe : Anciens

Ville : Aix-les-bains
Pays : France métropolitaine

Citation : guk92
Non pourquoi ? Il m'est déjà arrivé de créer des fonctions qui font plus d'une centaine de ligne de code. :D

Pauvre fonction, être défigurée comme ça parce qu'on lui demande de faire 30 000 trucs différents, ça doit pas être évident à vivre au quotidien.

Image utilisateurImage utilisateur
 
Hors ligne neowillow # Posté le 05/11/2011 à 20:21:37
(/◔ ◡ ◔)/
Avatar
Groupe : Anciens

Citation : guk92

Citation : neowillow
En quoi le manque d'accolade pour délimiter les blocs d'instructions rend t-il la syntaxe verbeuse ? En Caml ou en Python, on a pas ça

Pour te prendre un exemple en Python :
Code : Python
1
2
3
4
5
6
7
8
9
if var == 200:
   print "1 - Got a true expression value"
   print var
elif var == 150:
   print "2 - Got a true expression value"
   print var2
elif var == 100:
   print "3 - Got a true expression value"
   print var


Le Python n'est pas verbeux mais imagine que tes if doivent contenir 10 autres if, une erreur de tabulation et tu vas avoir du mal à t'y retrouver.

On va comparer ça avec du Java, qui utilise des accolades, lui :

Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public class myclass {
    public static void main(String[] args){
        /* ... */
        if(var == 200) {
            System.out.println("1 - Got a true expression value");
            System.out.println(var);
        }
        else if(var == 150) {
            System.out.println("2 - Got a true expression value");
            System.out.println(var);
        }
        else if(var == 100) {
            System.out.println("3 - Got a true expression value");
            System.out.println(var);
        }
    }
}

C'est sûr que le Python paraît vraiment verbeux à côté... ou pas. Donc, je comprends toujours pas le rapport que tu fais entre "manque d'accolades" et "langage verbeux". De plus, je trouve ça plutôt bien que le Python t'oblige à indenter le code, mais bien sûr si tu ne fais pas attention...

#LGDF: victor vaincra !
« Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi »
Statistiques mondiales en temps réel. - FAQ C - The C LRG - FAQ Java - Python - OCaml - quoi.info - La France vue par différentes populations




 
Hors ligne Romain Tribes # Posté le 05/11/2011 à 20:22:56 Commentaire supprimé pour le motif suivant : Il existe le forum de présentation de projet pour cela....
Hors ligne rotoclap # Posté le 05/11/2011 à 20:28:06
Avatar
Groupe : Anciens

Ville : Aix-les-bains
Pays : France métropolitaine

Y'a une justification à faire des cascades de else if plutot qu'un switch case ?

Image utilisateurImage utilisateur
 
Hors ligne spider-mario # Posté le 05/11/2011 à 21:18:10
Avatar

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

En Python, oui, parce qu’il n’y a pas de switch.
Pour accéder à cette section
Connectez-vous !
connexion_rpx

Revenir à la liste des news

Lire aussi