Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Ritchie : un nouveau langage de programmation dérivé de C
Qui veut combiner la facilité de Python et la vitesse de C

Le , par Michael Guilloux

57PARTAGES

7  0 
Depuis un peu plus d’un an, une équipe de développeurs travaille sur un langage de programmation baptisé Ritchie et qui repose sur le langage de programmation C. La vision de ces derniers est d’offrir un langage capable de combiner la concision de Python et l’efficacité du langage C, mais aussi d’autres caractéristiques propres aux langages de haut niveau.

« Ritchie est un langage expressif et efficace pour l’écosystème C », d’après sa description sur GitHub. Il « utilise des bibliothèques C nativement et génère un code C facile à comprendre ». Se rapprochant de sa première version, le langage a été conçu pour répondre à cinq principes de base :

  • faciliter la programmation, en s’inspirant de Python ;
  • offrir une rapidité similaire à celle de C ;
  • offrir un langage de type sécurisé comme Scala ;
  • offrir la possibilité d’écrire du code C ;
  • Ritchie n’a pas de mots réservés, tout peut être redéfini.

Après avoir été comparé avec Python et C, selon le benchmark Prime Counting, Ritchie a été trouvé presque aussi rapide que C et plus concis que Pyhton. En effet, pour le code exécuté, son écriture en langage Ritchie a utilisé 423 caractères contre 542 pour C et 474 pour Pyhton. Et l’exécution du code s’est faite en 457 ms pour Ritchie, 424 ms pour C, et 7836 pour Pyhton.


Ritchie est encore en phase de développement et de nombreuses fonctionnalités n’ont pas encore été pleinement implémentées. Parmi les caractéristiques actuelles du langage, on peut toutefois noter :

  • Ritchie est sensible aux espaces ;
  • il utilise l’inférence de type. À titre d’illustration, si l'on considère l’identificateur point et le type Point, la déclaration Java passe-partout Point point = new Point (x, y) devient en langage Ritchie point = Point x, y ;
  • le langage Ritchie utilise la notion de verbe pour regrouper ce que les autres langages appellent fonctions, méthodes ou sous-programmes ;
  • Ritchie n'a pas de mots-clés. Il utilise par contre des symboles avec des significations prédéfinies, mais tous ces symboles pourraient être redéfinis. Ritchie a été développé avec une langue standard qui lui est propre. À cet effet de nombreux symboles qui fonctionnent comme des mots-clés pourraient avoir une autre utilisation dans d’autres langages. À titre d’illustration, pour définir une classe dans Ritchie, vous pourrez taper SomeClass :: SomeBaseClass. Le :: est tout simplement un verbe qui veut dire « devenir une sous-classe de » ;
  • Ritchie essaie de suivre la construction linguistique (Sujet / Verbe / Objet) dans la plupart de ses expressions. Par exemple pour l’expression hello = "Hello", l’analyse donne hello comme sujet, = comme verbe et "Hello" comme objet ;
  • le langage introduit un type spécial de verbes classés comme des verbes de contrôle de flux. If, While et For font partie de ce type de verbe, et ne sont donc pas des mots-clés comme dans les autres langages. Ils peuvent toutefois être redéfinis même si cela n’est pas recommandé.

La liste des caractéristiques de Ritchie et des fonctionnalités restant à implémenter est disponible sur GitHub.

Liste des principales tâches de développement restant avant d'atteindre la version 1.0

Source : GitHub

Et vous ?

Quels commentaires pouvez-vous faire des caractéristiques de Ritchie ? Quelles sont ses forces et faiblesses ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Tryph
Membre émérite https://www.developpez.com
Le 09/12/2015 à 13:35
indenter son code correctement n'est pas une contrainte débile, c'est juste une question de respect pour ceux qui vont devoir passer sur le code après soi (qu'on soit en Python ou dans n'importe quel autre langage).
par contre devoir se fader le code d'un professionnel qu'est pas foutu de faire une indentation correcte (et on sait tous qu'ils sont pas si rares que ça), ça c'est une contrainte.
indenter correctement son code c'est la base, ça doit être un automatisme pour n'importe quel gars un minimum sérieux, et pas que pour un dev Python.

sinon puisque le fait de devoir indenter son code te parait être une contrainte débile, que penses-tu de ces contraintes-ci?
  1. ajouter un point-virgule en fin d'instruction (un saut de ligne ça devrait pouvoir suffire non?)
  2. délimiter les blocs de code par des accolades (en quoi une accolade est moins débile qu'une indentation?)
  3. ne pas pouvoir commencer un nom de variable par un chiffre (si je veux nommer ma variable 1664, je devrais pouvoir, non?)
  4. etc, etc... (en fait un langage c'est juste un ensemble de règles plus ou moins arbitraire hein)


pour ton "analogie", je vois vraiment pas le rapport. mais puisque t'as l'air de bien aimer les voitures, je livre la mienne d'analogie:
"en France on n'est pas censé conduire bourré, c'est la base. Quand on passe le code on a même de grande chances de tomber sur une question traitant de ce sujet. bien entendu, il y a quand même des crétins qui s'imaginent que conduire bourré c'est pas bien grave et que rien ne devrait pouvoir nous empècher de le faire, d'autant que maintenant les voitures sont bardées d'assistances. pourtant des constructeurs commencent à intégrer des apareils pour vérifier le taux d'alcoolémie et empècher le focntionnement de la voiture en cas de non respect de la règle."

et au cas ou ça serait pas assez clair voici ce que ça pourrait donner appliqué au code (en quelque langage que ce soit):
"quand on code on n'est pas censé faire une indentation anarchique ou mettre toutes les instructions au même niveau, c'est la base. quand on poste son code sur un forum, on se fait rembarrer parfois violemment si le code n'est pas indenté et on passe pour un gignol si on montre du code non indenté en entretien. bien entendu y a des grands penseurs qui estiment que l'indentation c'est pour faire joli et que ça sert à rien, et que rien ne devrait nous obliger à faire une indentation propre; d'autant que si on veut du code indenté de nos jours suffit de demander à l'IDE de le faire pour nous. hè ben heureusement que certain langages permettent de remettre un peu ces guignols dans le droit chemin"

edit:
- si demain tu te retrouve à bosser sur du C avec un gars qui ne mets pas systématiquement les point-virgules à la fin des instructions, empèchant le programme de compiler, tu te diras que le problème vient du gars ou du langage?
- si la semaine prochaine, tu bosses en Java avec un gars qui ne déclare pas les variables avant de les utiliser, empêchant le programme de compiler, tu accuseras le gars ou le langage?
je pense que je connais les réponses que tu donneras à ces 2 questions (enfin j'espère). maissi un gars qui bosse en Python indente son code n'importe comment, empèchant ainsi le programme de fonctionner, là tu estimes que le problème vient du langage et pas du gars... pourquoi?

je pense vraiment que la "peur" de l'indentation imposée, c'est juste une question d'habitude de résistance à ce qu'on ne connait pas trop. et je pense ça parce que y a 3 ans, je me disais la même chose que les detracteurs de la syntaxe Python dont les arguments peuvent se résumer ainsi en général: "ça perturbe mes habitudes, alors j'aime pas".
bah au bout de bientôt 3 ans de pratique, à travailler uniquement sur du code bien indenté, je redoute vraiment le moment ou je vais devoir retourner sur un langage ou y aura toujours des comique pour mêler des espaces et des tabulations, pour ne pas corriger l'indentation quand ils modifient un bout de code en rajoutant (ou enlevant) un niveau de bloc.
et puis je me dis que ça doit être compliqué de faire respecter des conventions de codage à un gars qui estime que l'indentation est une contrainte débile... mais les conventions de codage ne sont peut être que d'autres contraintes débiles qui n'assurent en rien une homogénéité du code produit, et une facilité à le relire et le comprendre pour tous ceux qui respectent ces même conventions.
7  0 
Avatar de Gugelhupf
Modérateur https://www.developpez.com
Le 08/12/2015 à 10:56
Le langage Ritchie Rich par la compagnie Riz au Lait (c'était plus fort que moi désolé )
Il y a quelques exemples de code Ritchie ici. Je n'ai pas compris pourquoi ils mettent le test avant le mot-clé if ou while, histoire que le langage soit "différent" des autres ?
Je suis sûr que la création de ce langage part d'une bonne intention, un peu comme D pour C++, mais comme le dit Bjarne, sortir un nouveau langage aujourd'hui c'est pas gagné.
5  0 
Avatar de
https://www.developpez.com
Le 09/12/2015 à 5:43
Salut forum,

Quels commentaires pouvez-vous faire des caractéristiques de Ritchie ? Quelles sont ses forces et faiblesses ?
Citation Envoyé par Michael Guilloux Voir le message


    il utilise l’inférence de type. À titre d’illustration, si l'on considère l’identificateur point et le type Point, la déclaration Java passe-partout Point point = new Point (x, y) devient en langage Ritchie point = Point x, y ;

Je pense que c'est une mauvaise idée.
Cette idée est déjà utilisé en VB6/VBA (et bien avant même). Ce problème est déjà connu, pour le résoudre, on déclare Option Explicit ce qui permet de générer une erreur de compilation si cette variable n'existe pas déjà (Pas déjà déclaré quelque part dans le code peut importe la portée).

La plupart des développeurs diront qu'il faut toujours déclarer ces variables. Cela ne change rien que la programmation soit statique ou dynamique. C'est un problème indépendant.

Si une variable nommée point existe dans une portée accessible, la ligne point = Point x, y va redéfinir la valeur de la variable déjà existante appartenant à une portée différente si celle-ci existe déjà. C'est un comportement indésirable car on souhaite déclaré une nouvelle variable appelée point, puis lui affecter la valeur Point x, y, hors, une variable situé dans une portée différente existe déjà, et c'est cette variable qui va prendre la valeur Point x, y.

Au final, le code ne fera pas ce que l'on pense qu'il fait.

A moins qu'ils aient une méthode qui permettent de mettre les choses au clair dans le code, je pense que c'est une mauvaise idée.

Pour le reste du langage, je ne sais pas. A voir.
Mais si il génère du code C en sortie comme langage intermédiaire, c'est un grand avantage.
Si il permet d'utiliser les bibliothèque C en entrée, c'est un grand avantage également. Le must serait peut être d'avoir une bibliothèque standard interne (Ritchie Lib) et externe (C Lib).

P.S.:
En VB/C#, le mot clé Dim/var signifie "Je déclare une variable".

Pour l'Option Explicit:
http://www.developpez.net/forums/d12...t-on-s-passer/
http://bbil.developpez.com/tutoriel/...bles#LXIII-C-2
http://faq.vb.free.fr/index.php?question=190
https://msdn.microsoft.com/fr-fr/lib.../y9341s4f.aspx
5  0 
Avatar de Tryph
Membre émérite https://www.developpez.com
Le 09/12/2015 à 10:15
Citation Envoyé par robertledoux Voir le message
"Ritchie est sensible aux espaces ;"

mais pourquoi utiliser la pire chose de Python ?
il me semble que c'est justement l'une des meilleures choses de Python que de forcer une indentation correcte.
après j'arriverai à comprendre qu'un gars qui n'a pas l'habitude d'indenter correctement son code trouve ça chiant; mais dans ce cas le problème vient du gars, pas du langage.
5  0 
Avatar de gangsoleil
Modérateur https://www.developpez.com
Le 15/12/2015 à 11:47
Citation Envoyé par DonQuiche Voir le message
Le C en lui-même est un langage dépassé en termes de fonctionnalité et productivité.

Mais il reste souvent le meilleur choix pour le bas niveau pour des raisons liées à l'écosystème et parce que très peu de nouveaux langages se sont attaqués à cette niche. Ce qui est heureusement en train de changer (Rust et Julia, et d'autres pour les systèmes critiques)..
Sans parler de bas niveau, les clients des entreprises dans lesquelles j'ai travaillé demandent du code qui tourne sous Linux, Solaris et AIX. Rust et Julia n'existent visiblement pas pour les deux derniers, c'est déjà une très forte limitation -- et je n'ai même pas spécifié des entreprises ésotériques qui feraient de l'embarqué sur des systèmes qui n'implémentent même pas le C standard.

Enfin, l'un des gros avantages du C est sa stabilité : il m'est régulièrement arrivé de modifier des codes qui avaient plus de 20 ans, et qui tournent toujours très bien, justement car le langage est stable, et qu'il n'y a pas besoin de se demander si le passage à la version 7.4.8.42 va tout casser par rapport à la 41. Je ne connais pas beaucoup de langages qui peuvent en dire autant, et encore moins les langages récents.
Après, pour ce qui est de faire un prototype, je suis d'accord sur le fait qu'il est probablement plus rapide, en théorie, de l'écrire dans un langage plus récent. Mais mon soucis est que la plupart des prototypes que j'ai écrits ou revus sont aujourd'hui en production chez les clients, tels quels, et ce pour encore pas mal d'années. Donc là encore, si je les avais écris dans un langage évoluant, je devrai me taper le portage régulièrement.
5  0 
Avatar de gangsoleil
Modérateur https://www.developpez.com
Le 09/12/2015 à 13:44
Bonjour,

Je ne vois pas bien l'intérêt de ce langage : qu'apporte-t-il vraiment de plus par rapport à ceux existant ?

Et il a pour moi 2 inconvénients majeurs :
  • son côté "Ritchie essaie de suivre la construction linguistique (Sujet / Verbe / Objet)" est mis en cause sur les structures conditionnelles : je ne connais pas de langue qui ne mette pas le SI en premier (français, anglais, espagnol, allemand, italien, ...), pareil pour le "tant que", ...
  • il est sensible aux espaces : j'indente correctement mon code en C, et pourtant je n'ai jamais révé d'un langage qui en dépende
4  0 
Avatar de e-ric
Membre expert https://www.developpez.com
Le 09/12/2015 à 14:18
Salut,

Bon un nouveau langage de plus... Je ne suis pas trop convaincu de l'intérêt de la chose. Il va falloir finaliser le langage, écrire les bibliothèques, créer l'écosystème et par là même dissiper des développeurs concentrés sur d'autres sujets ... Mon avis est qu'il aurait sans doute mieux valu optimiser un langage existant (comme Python puisqu'il est cité).

En outre, le monde des langages de programmation est déjà bien encombré. Pour le compilateur, l'annonce indique que l'environnement produit du langage C facile à comprendre, tant mieux cela apporte de la portabilité mais la lisibilité du code produit n'est pas un avantage significatif.

Enfin, introduire une syntaxe exotique risque d'être un inconvénient pour son adoption.

@foetus: l'indentation obligatoire de Python poursuit deux objectifs:
- forcer une présentation standard et rigoureuse du code,
- alléger la syntaxe en se débarrassant des symboles de début et fin de bloc d'instruction ({ et }, begin et end...)
Perso, cela ne m'a jamais dérangé même si je n'ai pas une très grande expérience de Python. Je trouve ton analogie rigolote mais mal fondée, ne pas mettre de porte serait un manque fonctionnel et non une simple contrainte (bien qu'on puisse se le permettre sur certaines voitures de course).

Cdlt
4  0 
Avatar de e-ric
Membre expert https://www.developpez.com
Le 09/12/2015 à 18:24
@maske

Citation Envoyé par maske  Voir le message
C'est quoi une syntaxe exotique ? C'est quoi une syntaxe tordue (inutilement) ?

C'est quand c'est pas du Java ou du C ? C'est quand on comprend pas ?

J'apprécie les syntaxes "classiques" à la java, python par la force de l'habitude, des expressions du type:
Code ritchie : Sélectionner tout
1
2
3
4
5
6
 
Integer : factorial Integer n 
    result = 1 
    i for 1,n+1 
        result = result * i 
    -> result
sont certes originales mais n'apportent pas grand chose, la rupture de forme (le for suit la variable) n'a pas, à mon sens, une grande utilité et peut augmenter inutilement le temps d'assimilation de la syntaxe et possiblement décourager son adoption.

Enfin, je suis contre la profusion des langages de programmation qui ne font que dissiper les développeurs, je pense qu'il vaut mieux renforcer les outils existants. Mais si le langage apporte réellement quelque chose de nouveau et d'utile ou qu'il se rapporte à un domaine spécifique alors je ne conteste pas.

Cdlt
4  0 
Avatar de ternel
Expert éminent sénior https://www.developpez.com
Le 08/12/2015 à 11:11
En pratique c'est un langage compilé vers le C. Avoir des performances équivalentes sur de petits programmes, ca me parait normal, pas vous?

L'idée clé du langage, à ce que je vois, c'est que toute instruction prenne la forme sujet verbe objet, par exemple a = 2 ou a<0 if a = 0.
Du coup, avoir utilisé if est un peu dommage, j'aurai plutot repris le ? : à cette place.
3  0 
Avatar de robertledoux
Membre habitué https://www.developpez.com
Le 08/12/2015 à 11:59
"Ritchie est sensible aux espaces ;"

mais pourquoi utiliser la pire chose de Python ?
7  4 
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web