portaldacalheta.pt
  • Principal
  • Design De Marque
  • Personnes Et Équipes Produit
  • Innovation
  • Kpi Et Analyses
Interface Web

Les nombreux interprètes et exécutions du langage de programmation Ruby



introduction

Tout comme il y a de nombreuses nuances de la gemme rubis , il existe plusieurs implémentations de l'interpréteur Ruby.

L'interpréteur Ruby le plus couramment utilisé est l'implémentation de référence, Ruby IRM , développé en C par le créateur de Ruby (Yukihiro Matsumoto) et l'équipe principale de Ruby.



Notre Guide de recrutement Ruby on Rails mentionne que certains des inconvénients de Rails peuvent potentiellement être résolus ou évités en utilisant un autre interpréteur Ruby. Cet article présente les différentes implémentations et environnements d'exécution de l'interpréteur Ruby disponibles aujourd'hui, en discutant des avantages et des inconvénients de chacun.



Une liste d



Historique des versions de Ruby (et comment cela affecte les implémentations alternatives)

Malheureusement, il n'y a pas d'équivalent Référence du langage Python pour Ruby ( ISO / CEI 30170: 2012 décrit Ruby 1.8 / Ruby 1.9, mais aucune spécification correspondante n'existe pour Ruby 2.x). En l'absence d'une telle spécification de langage, les implémenteurs de Ruby s'appuient généralement sur la communauté RubySpec qui spécifie les comportements attendus du langage Ruby grâce à des tests qui peuvent être exécutés dans n'importe quel interpréteur Ruby. RubySpec est donc utilisé par les implémenteurs Ruby pour vérifier la conformité comportementale de leurs implémentations Ruby avec le standard de facto.

En raison de l'absence de spécification formelle, les nouvelles versions de Ruby correspondent souvent simplement aux nouvelles versions de Ruby MRI. Il convient de noter qu’il existe un problème ouvert qui traite d'un processus de conception pour découpler Ruby (le langage) de l'IRM Ruby.



Cependant, étant donné le couplage étroit actuel entre le langage Ruby et l'implémentation de référence MRI, les développeurs d'implémentations alternatives de Ruby ont parfois du mal à suivre les changements de langage introduits dans chaque nouvelle version de MRI.

Jamais cela n'a été aussi difficile que lors de la transition entre Ruby 1.8 et Ruby 1.9. En 2007, dans un effort pour nettoyer et consolider la syntaxe de Ruby (comme le langage avait évolué au cours de la décennie qui a suivi la sortie de Ruby 1.0), l’équipe principale de Ruby a publié Ruby 1.9.0, une version qui a introduit beaucoup incompatibilités en amont dans la langue. En conséquence, toutes les implémentations de Ruby n'ont pas investi l'effort nécessaire pour faire le saut syntaxique de 1.8 à 1.9. En tant que tel, il existe plusieurs implémentations de Ruby basées sur la version 1.8 qui ne sont plus utilisées par la communauté, mais que vous pouvez toujours trouver en ligne ou dont les anciens Ruby parlent.



Une nouvelle version de Ruby MRI est publiée chaque Noël, suivant un principe de versioning sémantique. Ruby 2.0 (sortie 2013) et 2.1 (sortie 2014) ont chacune introduit des fonctionnalités de langage supplémentaires qui Développeurs Ruby peut profiter de, sans renoncer à la rétrocompatibilité avec Ruby 1.9.

Pourquoi utiliser une implémentation Ruby alternative? Quel est le problème avec l'IRM?

Il existe une variété d'implémentations alternatives de Ruby, prenant en charge un large éventail de cas d'utilisation et d'environnements. Environnements Java Enterprise. Applications mobiles. Implémentations JavaScript. Machines à faible CPU / RAM. En plus de prendre en charge ces cas d'utilisation, des implémentations alternatives peuvent parfois offrir une augmentation supplémentaire de la vitesse ou une utilisation plus efficace de la mémoire, en fonction des caractéristiques de votre application.



Pendant longtemps beaucoup Rubis sur rails les développeurs ont utilisé Ruby Enterprise Edition (REE) au lieu de l'IRM, en tirant parti des meilleures techniques de gestion de la mémoire dans REE par rapport à la version IRM à l'époque. (REE a ensuite été abandonné en 2012.)

Bien que l'IRM soit l'implémentation par défaut de Ruby, ce n'est pas nécessairement le bon choix pour tous les environnements et scénarios. Par exemple, la prise en charge de la concurrence par MRI est inférieure à celle de JRuby ou Rubinius. En outre, bien que les schémas de mémoire et de ramassage des ordures de MRI s’améliorent constamment, ils ont encore quelques problèmes.



L’enquête sur les implémentations de Ruby qui suit est destinée à vous aider à sélectionner l’interprète le mieux adapté aux objectifs et contraintes opérationnels de votre projet.

Interprète Ruby de Matz (IRM) / CRuby

Ecrit en C par l'équipe de base de Ruby dirigée par Yukihiro Matsumoto («Matz», le créateur de Ruby), MRI est l'implémentation de référence de Ruby qui sert de standard de facto. Si un fournisseur de système d'exploitation inclut une version de Ruby dans le cadre du logiciel installé sur le système d'exploitation, par exemple, il s'agit généralement de la version MRI. MRI bénéficie de plus de membres de l'équipe de base rémunérés que toute autre implémentation de Ruby, ainsi que de ressources contribuées dédiées par des personnes ou des entreprises qui souhaitent améliorer l'écosystème Ruby.



Une nouvelle version de Ruby MRI - implémentant souvent de nouvelles fonctionnalités de langage, en plus des changements de bibliothèque standard - est publiée chaque Noël. Les fonctionnalités sont d'abord implémentées dans Ruby MRI, généralement sur la base de discussions sur le Liste de diffusion des développeurs Ruby Core . D'autres implémentations de Ruby sont à la traîne, dans certains cas même de plusieurs années.

JRuby

JRuby est une version de Ruby implémentée en plus de Machine virtuelle Java (JVM) . Comme il devient populaire pour des langages autres que Java de s'exécuter au-dessus de la JVM (je regarde dans votre direction, Clojure et Échelle ), une implémentation Ruby basée sur JVM est susceptible de gagner en popularité.

Ruby dans la JVM signifie également que Ruby peut s'exécuter partout où Java peut s'exécuter (comme les téléphones Android, en utilisant Ruboto par exemple). De plus, grâce à l'interopérabilité de la JVM, le code JRuby peut utiliser la plate-forme Java, y compris les bibliothèques standard et tierces.

JRuby est également utile pour intégrer une solution basée sur Rails dans un environnement de déploiement uniquement Java, en regroupant l'application Rails sous la forme d'un .war fichier à déployer sur un Matou conteneur ou en tant qu'applet Java s'exécutant dans le cadre de votre interface Web, par exemple.

Pour ceux qui ne sont pas habitués à la JVM, cependant, JRuby apporte des problèmes standard liés à la JVM tels que le démarrage lent de l'interpréteur Ruby, le débogage des problèmes de CLASSPATH si vous utilisez des bibliothèques Java tierces, une plus grande utilisation de la mémoire et le fait que maintenant votre code doit être écrit en tenant compte des considérations de sécurité des threads.

En outre, certaines fonctionnalités de Ruby (API C et l’un des puissants outils d’introspection de Ruby, le ObjectSpace module) ne sont pas implémentés dans JRuby.

Cela dit, les avantages de l'utilisation de la JVM peuvent l'emporter sur les inconvénients pour certaines situations ou certains projets. La JVM permet de nombreuses optimisations de performances, telles que l'activation du compilateur JIT ou l'utilisation d'objets Java et d'API natifs.

À titre d'exemple d'un cas d'utilisation convaincant de JRuby, un ancien de mes collègues a eu un problème de processeur intensif qu'il a initialement résolu avec des threads dans Ruby 1.9.3. Lorsqu'il est passé à JRuby et a utilisé le java.util.concurrent.Executors de Java, il a constaté une amélioration des performances de plusieurs ordres de grandeur (des dizaines de milliers de fois plus rapide) pour cette opération. Voir son expérience Ici .

lois de la gestalt de l'organisation perceptive

Rubinius

Rubinius est une implémentation de Ruby qui implémente un runtime générique pour les langages dynamiques en plus d'un Machine virtuelle de bas niveau (LLVM) . En utilisant cette infrastructure et la technologie de compilateur JIT, Rubinius peut souvent exécuter du code Ruby avec moins de frais généraux que l'IRM.

Rubinius est également construit en utilisant autant de Ruby que possible pour rendre le développement de l'interpréteur / runtime plus rapide et plus facile.

Fait amusant: RubySpec a initialement vu le jour lors de la mise en œuvre de Rubinius.

Comme JRuby, Rubinius comprend un compilateur JIT, une meilleure gestion de la mémoire et une machine virtuelle plus mature que Ruby MRI. Cependant, contrairement à JRuby, Rubinius prend en charge les bibliothèques Ruby C et les fondements de Rubinius sont écrits en C ++, pas en Java.

Rubinius peut être un bon moyen terme lorsque vous avez besoin de hautes performances sur vos serveurs Rails sans la courbe d'apprentissage ou d'autres inconvénients de JRuby.

mruby

mruby est conçu pour être une version intégrable de Ruby (supportant Ruby 1.9.3). Avec mruby, vous pouvez proposer Ruby comme langage de script / d'automatisation dans les applications natives, l'utiliser pour le script de jeu, et même pour la programmation de cartes microcontrôleurs comme le Tarte aux framboises .

Si votre plate-forme a des contraintes de ressources sévères, mruby peut être juste l'interpréteur Ruby pour vous. mruby est également utilisé pour:

  • Créez des applications iOS (en tant que concurrent de RubyMotion, décrit ci-dessous)
  • Intégrez Ruby dans les applications iOS, pour une vitesse de développement
  • Offrir aux utilisateurs finaux un langage de script intégré à des fins d'automatisation

Avec le Internet des objets devenant de plus en plus une réalité, la domotique prenant tout son sens, et les ordinateurs extrêmement portables (et relativement puissants) étant de plus en plus courants, le paysage des plates-formes cibles à prendre en charge se diversifie de plus en plus. mruby permet de le faire avec le même langage productif que celui utilisé sur le bureau.

Opale

Opale est un joueur pour transformer Ruby en JavaScript.

Avec la montée de Coffeescript , les développeurs apprennent qu'ils n'ont pas besoin de taper JavaScript pour avoir JavaScript. Bien que Coffeescript ait certes ses avantages, utilisez-le suffisamment longtemps et vous serez obligé de rencontrer des choses que vous n'aimez pas dans la langue.

Entrez Opal: Tapez Ruby, obtenez Javascript . Plutôt cool.

Opal s'efforce d'être aussi cohérent que possible avec les autres implémentations de Ruby et est donc également testé contre un sous-ensemble de RubySpec. Certaines incompatibilités existent cependant, en raison de la nature des environnements d'exécution JavaScript et JavaScript. Par exemple, les chaînes et les symboles dans Opal sont égaux, et Opal ne fournit aucun mécanisme d'exécution de thread ou de shell.

Opal fonctionne de manière autonome ou peut être utilisé dans le cadre du Pipeline d'actifs Rails (par exemple, pour transpiler automatiquement votre fichier somefile.js.rb en JavaScript).

Peut-être que vous avez un domaine de problème bien adapté au modèle de concurrence asynchrone de JavaScript (comme un petit service Node.js) mais que vous voulez le langage ou certaines gemmes de l'espace Ruby. Opal peut être une bonne solution pour vous dans ce cas.

Ou peut-être souhaitez-vous écrire une application Web Ruby pleine pile. Avec Opal, c'est possible. Ayez un interpréteur Ruby exécutant votre code Ruby côté serveur, puis faites en sorte qu'Opal génère du JavaScript à exécuter côté client.

Opal reconnaît que vous allez probablement interagir avec d'autres API JavaScript (le DOM ou Node.js par exemple). Il facilite donc la transition vers JavaScript et fournit du sucre syntaxique Ruby par rapport aux bibliothèques JavaScript courantes telles que jQuery .

Cependant, la nature centrée sur JavaScript d'Opal est à la fois sa force et sa faiblesse. En revanche, le runtime d'Opal est le runtime JavaScript, et Opal est informé par les décisions de conception JavaScript. Donc, si vous recherchez une bonne implémentation de Ruby pour écrire un petit script shell avec, ou si vous recherchez un meilleur runtime Ruby pour votre application Rails, Opal n'est probablement pas votre meilleur choix.

RubyMotion

RubyMotion est à la fois (a) une implémentation Ruby (écrite en Objective-C et Cacao ) et (b) un ensemble de liaisons de langage permettant aux développeurs d'accéder aux API Cocoa via Ruby.

qu'est-ce que les rails pour ruby

RubyMotion est un produit commercial qui vous permet d'écrire des applications natives Cocoa dans Ruby. RubyMotion 2.0 vous permet d'écrire des applications iOS et Mac OS X dans Ruby, et RubyMotion 3 promet d'apporter ce même support à Android.

RubyMotion implémente la version 1.9 du langage Ruby.

Implémentations obsolètes

Au fil des années depuis l'introduction de Ruby, certaines des implémentations de Ruby qui ont vu le jour ont été abandonnées ou abandonnées, telles que:

  • Ruby Enterprise Edition (REE). REE était un fork de l'IRM 1.8 des gens de Passager Phusion qui a implémenté de nombreuses améliorations de mémoire et de récupération de place pour les développeurs Web. Pendant plusieurs années, il s'agissait de l'implémentation Ruby par défaut déployée pour les sites de production Rails. Cependant, il n'a jamais été mis à jour pour Ruby 1.9 ou Ruby 2.0 et a finalement été abandonné en 2012.
  • IronRuby. IronRuby est Ruby implémenté sur Microsoft .NET, écrit en C #, et pendant un certain temps, le projet a été financé par Microsoft. Abandonné en 2011, IronRuby a pris en charge pour la dernière fois Ruby 1.8.6.

Emballer

Il existe une grande variété d'exécutions et d'interprètes parmi lesquels choisir dans le paysage Ruby. Pour la plupart Projets Ruby , l'implémentation de référence Ruby (Ruby MRI) reste l'interpréteur de choix. Cependant, des implémentations alternatives de Ruby peuvent très bien être le bon choix pour votre projet, en fonction de vos objectifs et contraintes fonctionnels et techniques.

Dans son rôle d'implémentation de référence de Ruby, MRI obtient de nouvelles fonctionnalités de langage plus rapidement, a assez bien concurrence et des histoires de mémoire (qui ne font que s'améliorer), et a la plus grande compatibilité avec les gemmes (certaines partiellement écrites en C). Dans l'ensemble, l'IRM est un choix solide et fiable pour le code Ruby à usage général.

Pour les déploiements d'entreprise plus importants, ou pour les situations dans lesquelles vous devez interagir avec du code Java (ou d'autres langages JVM) ou des modèles de concurrence hautement évolués, JRuby est une option intéressante.

Et bien sûr, si vous avez des besoins uniques (par exemple, écrire du JavaScript, s'exécuter sur la génération actuelle d'appareils intégrés, etc.), les autres alternatives Ruby peuvent être exactement ce que vous recherchez.

Avec une grande variété d'exécutables et d'interprètes Ruby parmi lesquels choisir, Ruby se révèle être un langage flexible, utile pour un large éventail d'environnements informatiques, allant d'un grand magasin de déploiement Java d'entreprise à un logiciel qui contrôle ce feu rouge dans votre bureau. vous avez connecté votre Raspberry Pi le week-end dernier. Choisir le bon outil pour le bon usage est essentiel, oui, mais j'espère que cet article vous a montré que Ruby est bien plus que l'interpréteur Ruby par défaut fourni avec votre système d'exploitation.

Le monde de Ruby est grandement amélioré par des équipes d'implémentation alternatives de Ruby qui travaillent avec l'équipe principale de Ruby MRI à mesure que des modifications du langage sont proposées. Ils ajoutent de la diversité à la communauté d'implémentation Ruby, en ajoutant leurs expériences d'implémentation Ruby durement gagnées et leurs propres perspectives sur les fonctionnalités entrant dans le langage. Les passionnés de rubis doivent collectivement à ces équipes une grande dette de gratitude. Félicitations à eux pour leurs efforts!

Introduction à OpenGL: un didacticiel sur le rendu de texte 3D

La Technologie

Introduction à OpenGL: un didacticiel sur le rendu de texte 3D
Sécurité biométrique - La clé de l'authentification sans mot de passe ou une mode?

Sécurité biométrique - La clé de l'authentification sans mot de passe ou une mode?

Mobile

Articles Populaires
Ingénieur senior full-stack, équipe post-embauche des talents
Ingénieur senior full-stack, équipe post-embauche des talents
En souvenir de Matthew Osborne
En souvenir de Matthew Osborne
Comment créer un pipeline de déploiement initial efficace
Comment créer un pipeline de déploiement initial efficace
L'impact du Brexit sur le secteur des services financiers
L'impact du Brexit sur le secteur des services financiers
Comment préparer un modèle de tableau des flux de trésorerie qui s'équilibre réellement
Comment préparer un modèle de tableau des flux de trésorerie qui s'équilibre réellement
 
Conquérir la recherche de chaînes avec l'algorithme Aho-Corasick
Conquérir la recherche de chaînes avec l'algorithme Aho-Corasick
Estimation des coûts logiciels dans la gestion de projet agile
Estimation des coûts logiciels dans la gestion de projet agile
5 qualités indispensables des meilleurs chefs de projet
5 qualités indispensables des meilleurs chefs de projet
Comment recréer gratuitement les ressources d'un terminal Bloomberg
Comment recréer gratuitement les ressources d'un terminal Bloomberg
Noyaux d'arbres: quantification de la similitude entre les données structurées en arborescence
Noyaux d'arbres: quantification de la similitude entre les données structurées en arborescence
Articles Populaires
  • réagir au scanner de code qr natif
  • les diagrammes et les graphiques peuvent être des outils efficaces pour générer des idées.
  • comment utiliser un bot sur discord
  • questions d'entretien sur les fuites de mémoire java
  • graphique de la valeur nette d'elon musc
Catégories
  • Design De Marque
  • Personnes Et Équipes Produit
  • Innovation
  • Kpi Et Analyses
  • © 2022 | Tous Les Droits Sont Réservés

    portaldacalheta.pt