La conférence sur le rubis central russe du 28 septembre marque 10 ans. Cette année,
RubyRussia a un nouveau lieu, autant que 4 flux de rapports sélectionnés, la communication et, bien sûr, l'after-party légendaire! Parmi les conférenciers, il y a Yukihiro Matsumoto, Takashi Kokubun, Xavier Noria, Nick Sutterer, Genadi Samokovarov et plus encore!
En préparation, nous discutons avec des conférenciers de Ruby, du travail et de la vie. Aujourd'hui, nous publions du matériel dans lequel
Dmitry Matveyev (chef de projet à
Evrone ) pose des questions à
Takashi Kokubun .
Le haut-parleur RubyRussia 2019, un optimiseur pour le compilateur Ruby JIT, prend en charge Haml et ERB, un ingénieur backend pour ArmTreasure Data.Dites-moi ce qui sera discuté dans votre rapport lors de la conférence?À propos du travail sur le compilateur JIT. Je voudrais me concentrer sur trois points. Le premier est la fonction inline. La fonction doit être «propre», sans effets secondaires, afin que son corps puisse être en ligne. S'il y a trop de fonctions, le compilateur commence à fonctionner lentement. Je vais décrire comment résoudre ce problème.
Le deuxième point concerne l'optimisation du placement des objets en mémoire. Dans les applications volumineuses et complexes comme Rails, vous devez créer de nombreux objets en une seule demande. Si vous optimisez ce processus, vous pouvez améliorer les performances. Habituellement, les objets sont créés dans le tas. Par conséquent, vous devez y gérer des structures de données complexes. Vous devez également appeler le garbage collector pour supprimer les objets inutilisés. Et si nous devions placer des objets sur la pile, nous augmenterions simplement le pointeur de la pile lors de l'ajout d'un objet et le diminuerions lorsque l'objet doit être supprimé. L'utilisation de la pile pour stocker des objets est plus rapide en soi, et le garbage collector commence à fonctionner plus rapidement. Mais pour utiliser la pile, nous devons nous assurer que les objets ne sont pas utilisés ailleurs. Pour cela, nous utilisons une technique appelée «analyse d'échappement». Nous devons analyser chaque méthode et nous assurer que chacun de ses objets internes n'est pas utilisé en externe et n'est pas renvoyé comme résultat de la méthode actuelle. Si nous pouvons le faire, nous pouvons placer des objets sur la pile, ce qui augmentera la productivité. Mon idée est d'ajouter des métadonnées pour les instructions. Maintenant, c'est une expérience, mais je vais faire une demande de pull au maître avec ce code dans un proche avenir.
Le troisième point concerne l'optimisation de la répartition des appels de fonction dans JIT. Actuellement, ce processus génère une forte ramification de la logique, ce qui affecte négativement le mécanisme de prédiction de branche du processeur. Cela ralentit le processeur dans son ensemble. Nous devons simplifier cette logique, c'est-à-dire réduire le nombre de conditions. J'examine actuellement comment faire cela.
Ceci est un rapport hardcore avec beaucoup de code et de concepts! Cela semble difficile?Je pense que la plupart des gens n'implémentent pas de compilateurs par eux-mêmes, et je comprends que comprendre cela peut être difficile. Mais je vais essayer de tout expliquer le plus simplement possible avec des exemples et des illustrations. Autrement dit, mon rapport devrait être compréhensible pour les personnes sans expérience particulière dans le développement de compilateurs.
Est-il possible d'utiliser le nouveau compilateur en production maintenant, et dans quels cas?L'idée est de rendre les applications RoR plus rapides. Par exemple, mon entreprise actuelle en bénéficiera. Mais je ne dirais pas que tout est prêt pour la production. Il s'est avéré que seules les applications RoR ne sont pas particulièrement accélérées. En effet, ces applications sont généralement volumineuses et génèrent beaucoup de code C, ce qui conduit à une utilisation inefficace de la mise en cache dans le processeur. J'ai quelques idées sur la façon de résoudre ce problème. C'est ce sur quoi je travaille en ce moment. Mais maintenant, mon compilateur peut être utile pour les petites applications. Par exemple, je sais que la gemme karafka fonctionne plus vite avec elle que sans elle.
J'ai lu que le compilateur JIT est déjà versé dans le maître de brunch en langage Ruby et est disponible depuis la version 2.6. En est-il ainsi?Oui, ma demande de fusion a déjà été acceptée. Mais c'est la première version, et beaucoup de travail reste à faire. Des améliorations seront déjà présentes dans Ruby 2.7, et encore plus dans Ruby 3.
Dites-moi comment vous avez commencé à écrire en Ruby?Au début, je travaillais avec Objective-C, mais je n'aimais pas vraiment ça. Une fois qu'il était nécessaire d'écrire une application dorsale, des amis ont recommandé d'essayer Ruby On Rails. C'est exactement ce que j'ai fait - et j'étais très satisfait du résultat! J'ai aimé la syntaxe simple et compréhensible de la langue, et j'ai commencé à l'étudier et à l'utiliser plus profondément.
Êtes-vous en train d'écrire en Ruby au travail?Je travaille avec Treasure Data depuis quelques années. Il s'agit d'une plate-forme qui suit les données des utilisateurs dans les applications clientes. Ce projet a été à l'origine écrit en Ruby On Rails, et mon message s'appelait "Ruby Developer". J'ai donc beaucoup écrit en Ruby. Mais maintenant, je travaille sur certains services distribués écrits en Java et Kotlin, et j'utilise aussi parfois Python.
Le projet Treasure Data est associé à une charge élevée et à des mégadonnées. Mais Ruby n'est pas la langue la plus rapide. Comment avez-vous réussi à créer une application à haute charge qui fonctionne avec des données volumineuses sur la plate-forme RoR?L'application enregistre les données utilisateur et les enregistre dans le stockage. Il fournit également une interface pour interroger des données dans des langues comme Hive et Presto, et un panneau d'administration. Ce n'était pas un problème de tout écrire sur des rails. De plus, nous avons créé une infrastructure compétente et avons la capacité d'augmenter les ressources de mémoire et de processeur aux pics de charge. Le principal problème que nous avons avec Ruby est qu'il ne convient pas au calcul parallèle. Et nous devons utiliser Kotlin à cet effet.
Pourquoi aimez-vous Ruby? S'il y avait un projet qui pourrait être implémenté à la fois en Ruby et en Python, lequel choisiriez-vous?J'aime la syntaxe propre de Ruby, elle est très lisible et intuitive. Cela vous permet d'écrire rapidement et facilement la logique d'application, ce qui est important d'un point de vue commercial. C'est un langage purement objet, je l'apprécie vraiment. J'ai de l'expérience en Python, mais cela ne me semble pas aussi intuitif. Je le choisirais uniquement pour les projets d'apprentissage automatique.
Une autre chose sur laquelle vous avez travaillé récemment est le moteur de modèle Haml ...J'ai travaillé sur Haml et ERB à un emploi précédent. Maintenant, je ne consacre pas trop de temps à cela, mais parfois je regarde les pull-quests dans ces projets.
Que pensez-vous des perspectives des moteurs de modèles tels que Haml, Slim ou ERB, en général, étant donné que dans le monde moderne, il y a une tendance à séparer complètement l'arrière et l'avant en deux applications différentes, et à donner la formation de pages HTML complètement à JavaScript? Autrement dit, dans une telle configuration, les moteurs de modèles deviennent complètement inutiles?Je suis d'accord que pour les tâches avec une interface utilisateur complexe, il est logique de mettre cette logique dans une application distincte. Cela doit être fait afin de rivaliser avec d'autres entreprises, qui augmentent de plus en plus la complexité et la fonctionnalité de l'interface utilisateur. Mais il y a toujours un besoin de solutions plus simples et, plus important encore, moins coûteuses qui ont du sens pour écrire sur RoR avec des moteurs de modèles classiques. Ainsi, ils sont toujours en fonctionnement et seront utilisés pendant longtemps.
Je vois que vous pouvez programmer dans de nombreux langages, au moins en Ruby, Python, Java, Kotlin et C. Un bon ensemble. Pouvez-vous donner des conseils aux débutants sur la façon d'apprendre autant de langues? Comment devenir un bon programmeur?Je pense que l'efficacité de la formation sera élevée lorsque la langue sera adaptée aux tâches auxquelles est confronté un programmeur. Ruby est bon pour écrire des applications Web, car travailler avec des chaînes est très facile par rapport à Java. Python est plus adapté à l'apprentissage automatique (il dispose d'une infrastructure riche dans ce domaine). Si vous voulez apprendre Python, je recommanderais de résoudre des tâches d'apprentissage automatique plutôt que d'écrire des applications Web. Si vous êtes plus intéressé par Java, Kotlin ou d'autres langages basés sur JVM, je suggère d'écrire des systèmes distribués. Ruby n'est actuellement pas bien adapté à l'informatique exigeante ou parallèle. Pour résoudre de tels problèmes dans Ruby, nous avons besoin de nombreux processus qui consomment beaucoup de ressources, donc ils ne seront pas efficaces. Ainsi, l'utilisation d'outils appropriés pour les problèmes pertinents aidera à comprendre pourquoi cet outil est conçu de cette manière. Cela aidera à mieux comprendre son essence.
Quels livres sont en haut de votre «note» personnelle?Le premier est Ruby sous un microscope. Il est écrit très simplement et décrit les détails de l'interprète. Une compréhension approfondie du fonctionnement de l'interprète aidera à résoudre des problèmes complexes et renforcera également la confiance dans la propriété de l'outil, c'est-à-dire la langue. Je recommande ce livre même aux débutants.
Le second est «Code lisible». Il s'agit de savoir comment écrire du code clair, curieusement :). Nous écrivons beaucoup de code et lisons beaucoup de code, et nous devons être capables d'écrire du code que les autres comprendront. Et pour cela, nous devons regarder le code sous l'angle de la perception de quelqu'un d'autre. Des livres comme celui-ci aident. Je le recommande également même aux débutants. Eh bien, le troisième livre ... C'est un livre en japonais, sur la façon dont le processeur est organisé, sur son architecture, jusqu'aux transistors qui le composent. Comprendre comment un ordinateur fonctionne à un niveau aussi bas est parfois très utile même lors de la résolution de problèmes à des niveaux beaucoup plus élevés. Je recommande de lire tout bon livre sur la conception des microprocesseurs, même si à première vue cela ne semble pas évident.
Qu'attendez-vous de la Russie et de la conférence RubyRussia ?
Je ne suis jamais allé en Russie auparavant. Je m'attends à voir beaucoup de tout beau, par exemple, de belles maisons, de beaux paysages ... De plus, en Russie, il devrait faire plus froid qu'au Japon. Il sera intéressant pour moi de voir et de ressentir toutes ces différences entre nos pays.
Cool! Je peux vous assurer que même s'il fait froid (en fait, fin septembre il ne fait pas si froid avec nous), la conférence et l'after-party seront quand même chauds!Nous vous attendons également à la conférence! Vous pouvez poser vos questions en personne (et à la légendaire afterparty :) le 28 septembre. Le programme est
là et le billet coûte maintenant 9 000 roubles.
Merci aux entreprises qui soutiennent
RubyRussia :
Organisateur -
EvroneAssocié commandité -
ToptalPartenaire Gold -
GettPartenaires Silver -
JetBrains et
BookmatePartenaire Bronze -
InSales