Sur les traces du mouvement russe Scala. 2e partie

Dans la dernière partie de l' enquête, Roman Timushev m'a conseillé de contacter Vlad, ce que j'ai fait. Vlad a précisé ce qui m'intéresse, délinéé et a accepté d'écrire quelques paragraphes. Le lendemain matin, j'ai vu un avis sur Facebook. C'est Vlad qui a trouvé un nouveau témoin - Alexander Podkhalyuzin . De 2008 à 2017, il a travaillé en tant que chef d'équipe sur le plugin Scala dans IDEA et a personnellement vu tout le développement du mouvement Scala, mais surtout pas la partie russe.

«Cliqué» dans ma tête - les plans changent, c'est un nouveau fil conducteur dans l'enquête. Ils ont marqué l'heure et enregistré une interview d'une heure avec Alexander. Il y a tellement d'informations qu'il n'y avait pas d'options pour le placer n'importe où, sauf une partie distincte. Par conséquent, je vous préviens - il y a beaucoup de texte à venir.



Dans cette partie, nous discutons avec Alexander Podkhaluzin et Mikhail Mutsyanko . En dehors du programme - commentaire d' Ilya Sergey . Plugin Scala, les premiers événements Scala en Russie, laissant à Kotlin, Native dans les deux langues, coucher de soleil Eclipse et bien plus encore sous la coupe.

Comment Alexander est arrivé à Scala, est allé à Kotlin et a enseigné


De 2008 à 2017, Alexander Podkhalyuzin a développé le plugin JetBrains Scala dans IDEA en tant que chef d'équipe. Plus tard, il est parti pour Kotlin Tooling d'abord pour Kotlin / Native, puis pour Kotlin dans son ensemble.

Alexander : La tâche est grande, tout est confus après la limitation des années. Soit dit en passant, le mouvement n'a pas commencé en 2010, mais trois ans plus tôt. En 2007, je viens de travailler chez JetBrains et j'ai eu de la chance avec MPS ... Savez-vous ce qu'est MPS?

Vadim : J'ai entendu dire que c'est un langage déclaratif et visuel.

Alexander : MPS est en avance sur le temps. Ceci est le système de programmation Meta - programmation générative tout de suite avec l'IDE. J'ai trouvé un emploi dans l'entreprise sur MPS, mais ils y ont déjà trouvé une personne. J'ai donc eu de la chance - on m'a envoyé pour écrire un plugin Scala.

JetBrains a commencé à écrire un plugin, mais l'a abandonné car il s'agissait de Groovy. Il était populaire et demandait du soutien. Toutes les personnes impliquées dans le plugin Scala sont allées travailler sur le plugin Groovy. Personne n'était impliqué dans Scala et j'ai hérité d'un tel héritage.

J'ai rejoint l'entreprise début 2008. Je ne savais rien, j'ai commencé à creuser un analyseur, corrigé un bug, deuxième, troisième - cela a duré indéfiniment. En conséquence, il s'est assis et l'a réécrit. Tellement lentement allé se développer.

Ilya Sergey a travaillé sur le plugin avant moi. Je l'ai trouvé et j'ai travaillé avec lui sur le plugin. C'est drôle que j'étais mathématicien, et Ilya était programmeur. Mais il voulait être mathématicien, et je voulais être programmeur. J'aimais la programmation, j'étais prêt à le faire et je ne comprenais pas pourquoi Ilya ne l'aimait pas. Et il ne m'a pas compris. En conséquence, la vie a tout remis à sa place.

Ilya a quitté JetBrains et est engagé en informatique en Espagne, presque professeur. Il est récemment arrivé, a expliqué comment rechercher des courses automatiques - c'est une sorte de science. Toujours à une compétition, il s'est assis et a écrit 10 000 lignes sur Scala. Il a dit que tout est super, tout fonctionne. Il a encore roulé les premières Scala Days, semble-t-il en 2009.

Après avoir regardé la biographie d'Ilya, j'ai senti qu'il était important de clarifier les détails de la source d'origine.

Le rapport mentionné par Alexander portait sur l'analyse statique pour trouver les conditions de concurrence dans les applications Java. En 2018, nous avons réalisé un travail avec Facebook. Un rapport et deux autres articles y ont été rédigés. Certes, il y a tout le code sur OCaml. Le concours est le concours de programmation ICFP que j'ai organisé cette année . J'ai également écrit presque tout le code du concours dans Scala en utilisant Scala.js.

J'utilise Scala exclusivement en tant qu'utilisateur. Avec l'aide d'IntelliJ IDEA et du plugin Scala, de nombreux prototypes ont été écrits pour mes projets de recherche: synthèse de programmes avec des pointeurs TyGus / suslik , test d'algorithmes géométriques . À l'université, j'enseigne un cours de multithreading, où la scala est la langue principale.

Ilya Sergey , professeur, Université nationale de Singapour .

Alexander : J'ai commencé à monter Scala Days en 2011. Depuis trois ans, nous écrivons en fait le deuxième compilateur frontal Scala. Cela prend des années, c'est normal. Tout fonctionnait lentement et mal pour nous, mais en même temps il y avait au moins quelque chose. Du point de vue des éditeurs, rien n'était mieux de toute façon. Je ne me souviens pas si Eclipse a commencé à prendre en charge à ce moment-là. Oui, il semble qu'ils l'ont soutenu en parallèle.

Vadim : J'ai parlé avec Roman Timushev et il m'a dit, à environ 13 ans, comment il a commencé à écrire et à tenir des réunions à Moscou. Selon sa version, tout le monde a utilisé Eclipse. C'était tout à fait tolérable, il était officiellement soutenu.

Alexander : Oui, ça l'était. En 2011, Eclipse était très mauvais, et en 2013 a atteint une vitesse comme la nôtre en 2011. Contrairement à Eclipse, nous écrivons notre propre front-end, donc la mise en évidence des erreurs était différente du compilateur. C'est gênant et c'est un problème clé. Certaines erreurs ne sont pas mises en évidence, mais vice versa dans le compilateur. Eclipse utilise le code du compilateur.

L'utilisation du code du compilateur est une mauvaise idée car tout fonctionnera lentement. Dans Kotlin, il en va de même lors de l'utilisation du code du compilateur. La situation n'est pas aussi mauvaise qu'à Scala - ils ont un peu pensé à l'IDE, mais ce n'est toujours pas facile de fournir de bonnes performances du point de vue de l'IDE.

En 2011, Scalathon ( photos ) a eu lieu à Philadelphie. C'est la première conférence à laquelle nous avons été invités, mais c'était étrange que nous y soyons allés. Ils ont contacté JetBrains si nous aimerions assister à l'événement. Avant cela, ils n'ont appelé nulle part avec Scala, et quand nous avons commencé à faire quelque chose, ils l'ont remarqué. Les utilisateurs, comme les programmeurs Scala, avaient un nez de gulkin - environ 100 personnes tout au long de la conférence. Au Scalathon, j'ai rencontré Bill Venners .

Vadim : Le nom est familier, mais je ne me souviens pas de qui il s'agit.

Alexander : L'auteur de deux choses: Scalatest et le livre principal Programming in Scala . Ceci est un livre écrit avec Martin Odersky - notre Bible!

Vadim : Je n'ai pas lu.

Alexander : Ça n'a pas d'importance. À ma place est ce livre dédicacé par Bill Venners et Martin Odersky. Ils me l'ont donné lors d'un des Scala Days en 12 ou 13 ans. Lors d'un dîner pour tous les participants, les personnes qui ont contribué à la communauté ont été récompensées. Soudain, ils m'ont appelé et j'ai reçu un livre pour ma contribution.

Les Scala Days ont également commencé à être visités depuis 2011. Ils ont d'abord eu lieu une fois par an en Europe ou en Amérique, puis deux fois. L'année dernière, j'ai assisté à une conférence, mais je ne suis pas allé à la seconde. L'année dernière, j'ai soumis un rapport sur la comparaison de Kotlin / Native et Scala Native. Personne dans l'équipe de Kotlin ne pensait que le rapport serait accepté, mais il a été pris. Peut-être par respect ou pour d'autres raisons. Le rapport a été suivi par peu d'auditeurs. Les programmeurs Scala ne sont pas intéressés par tout ce qui contient le mot "Kotlin". Il en était ainsi et c'est toujours le cas.

Vadim : Je pense que le mot "Native" a joué un rôle.

Alexander : Non, les Scala Days, tous les reportages sur Scala Native rassemblent toujours des salles pleines, par exemple une performance de Denis Shabalin. Mais en même temps, la technologie est loin de la production. Elle n'est pas destinée à y arriver avant 10 ans au moins.

Vadim : Pourquoi le pensez-vous? J'ai été surpris, mais il y a Richard Whaling qui écrit un livre sur Scala Native - il y a déjà beaucoup de matériel. Il va aux podcasts et explique comment il l'utilise en production. Il a une sphère où il y a beaucoup de données. Il est très satisfait de Native dans ces conditions.

Alexander : Voir mon rapport sur la comparaison de Scala Native et Kotlin / Native , dans lequel j'explique mon point de vue. Au moment de la représentation, une personne travaillait sur Scala Native. Par conséquent, il ne peut être question d'aucun produit. Si nous parlons d'une personne qui a appliqué la technologie quelque part - peut-être. Ce n'est tout simplement pas courant, il y aura peu d'utilisateurs.

Kotlin / Native a une application spécifique - le partage de code entre iOS et Android. Tout cela crée un certain intérêt. Scala Native n'a pas cela et il n'y a rien à quoi s'accrocher. Scala Native peut être utilisé pour les calculs lorsque vous devez combiner du code Scala et des calculs rapides comme Tensorflow. Mais Scala Native ne signifie pas qu'entre Scala et Native, vous pouvez vous appeler ou échanger du code commun en toute sécurité.

Chez Kotlin, nous montons en flèche pour écrire et compiler le même code. C'est un sacré travail au sens de la conception que vous n'utilisez pas POSIX, mais une sorte de bibliothèque intercouche qui fonctionne aussi bien dans la JVM que sans elle. Si vous n’avez pas une telle bibliothèque, c’est tout, krants. Le code sera différent à cet endroit, et s'il est différent, alors comment le maintenir? Comment déployer des bibliothèques dans lesquelles différents points de terminaison doivent être compilés, déployés, il existe également un système de construction, des dépendances? Si vous creusez, alors les questions - l'abîme. Une personne qui développe Scala Native ne peut pas répondre à toutes. L'application est une histoire distincte, et à ce sujet, vous pouvez voir mon rapport.

Vadim : Eh bien, revenons en arrière. En 2011, vous êtes allé aux Scala Days, et avant 2016, étiez-vous toujours avec le plugin Scala?

Alexander : jusqu'en 2017.

Vadim : Ensuite, vous êtes entré dans Kotlin. Qu'est-il arrivé?

Alexander : D'un certain point de vue, je n'ai pas fait tout ce que j'ai pu. Vous pouvez continuer à développer le plugin Scala - beaucoup de puces, il y a quelque chose à terminer. Mais, d'un point de vue commercial, il est un projet réussi. 80% des programmeurs Scala utilisent IntelliJ IDEA. Que savez-vous des produits qui ont conquis 80% du marché? Il y en a peu.

Que faire ensuite? Je veux de nouveaux objectifs, de nouveaux horizons, et au sein du plugin Scala, c'était impossible. JetBrains développe son propre langage de programmation et est sceptique à propos de Scala. Il est impossible de trouver une place pour Scala dans l'entreprise, alors je pars ou je travaille ici et par la suite. En entreprise tout ou autre chose. J'ai dû prendre une décision difficile.

Dans une certaine mesure, je me préparais. Tout d'abord - j'ai réalisé que si je quitte l'équipe, alors Kolya Tropin sera à ma place. Il dirige maintenant l'équipe. Je me préparais, et je l'ai préparé d'une manière particulière, j'ai compris qu'il pouvait se tenir à ma place. Le second - lentement distribué tous les sous-systèmes, les a refusés. Je n'avais plus besoin de les programmer.

L'apothéose de tout cela a été une blessure à la main, une intervention chirurgicale et 2 mois de congé de maladie. Après la sortie, je suis allé voir le directeur général Maxim Shafirov. Il est venu et a dit: "Donnez-moi autre chose." Il y avait un tel déclencheur, quelque chose se préparait inconsciemment pour pouvoir le faire, et ces deux mois ont permis de se décider. Et Max a suggéré. J'ai dit "tout sauf Kotlin". Je vois, je viens du monde Scala, et le monde Scala déteste Kotlin.

Vadim : Ce n'est pas que je déteste ça, c'est juste désagréable qu'un tel produit soit apparu. Ceci est le talon Scala. Dans le même temps, le marketing est actif, le marché est capturé - ces personnes qui pourraient aller du bon côté de Scala.

D'un autre côté, est-ce bien? Si vous imaginez un manque de connaissances que vous devez maîtriser afin d'écrire efficacement en Scala ou Haskell, alors pour un développeur Java, c'est gigantesque. Ici, Kotlin est un point de transbordement que vous pouvez atteindre, asseoir et déplacer en toute sécurité.

Alexander : Ce n'est pas entièrement vrai. Quand il n'y avait pas de Kotlin, des gens venaient à Scala qui n'étaient pas satisfaits de Java - quelque chose manquait, beaucoup de passe-partout. Scala a pris la place de ce qu'on appelle Better Java. Kotlin vise exclusivement ce créneau.

Avec Kotlin, Android et tout ce qui s'est passé, et maintenant multiplateforme, c'est tout. Kotlin ne s'est pas fixé sur un Android, sur un créneau, et est allé plus loin.

Vadim : Je pense que c'est bien - Oracle a remué. Maintenant, au moins certains JEP normaux sont partis pour faire évoluer Java.

Alexander : Je pense que la raison n'est pas Kotlin - c'est une conséquence normale. 2 ans avant que Google n'annonce Kotlin, c'était négligeable. Quand j'ai décidé de déménager, Max Shafirov m'a donné une liste de sélection. Bien que j'aie dit «juste pas Kotlin», l'option de support Kotlin / Native dans IDEA figurait sur cette liste. En conséquence, de toute la liste, j'ai décidé d'essayer de déménager à Kotlin. Le lendemain de ma prise en charge de Kotlin / Native, Andrei Breslav a déclaré que la prochaine entrée / sortie de Google annoncerait que Kotlin est un langage Android officiellement pris en charge.

Voici la pensée: "Dingo." Je pensais que je faisais quelque chose pour une langue marginalement conditionnelle. Il était clair que la niche Better Java était difficile à conquérir. Avec la sortie de Java 8 avec lambdas, cela est devenu encore plus difficile. Scala est d'accord avec cela, il n'est pas fort avec les lambdas et pas avec ce qui est meilleur que Java. C'est aléatoire - des gens aléatoires sont venus à Scala avec la compréhension qu'ils ont besoin d'un meilleur Java.

Après Java 8, le flux de ces personnes a ralenti. Ils n'iront pas à Scala et Kotlin - ils ont des lambdas. C'est suffisant pour commencer, et le meilleur n'est plus intéressé. Je me suis assis, j'ai pensé et réalisé que l'échelle est maintenant différente.

Dans ma tête, je suis passé à une équipe à une échelle pas beaucoup plus grande que dans le plugin Scala. À cette époque, il y avait 100 000 utilisateurs et Kotlin en avait 40 000. Une échelle complètement différente. J'ai réalisé que c'était amusant, qu'ils ne me l'avaient pas dit à l'avance. J'ai décidé d'aller à Kotlin parce que c'était intéressant d'essayer, et non pour des objectifs ambitieux et ambitieux.

En général, Scala est plus agréable à programmer. Lorsque vous commencez à écrire Kotlin après 9 ans de programmation en Scala, vous vous retrouvez sans mains. Il y a de la tristesse là-dedans.

Que ferais-je si j'étais CTO? Pour une tâche Kotlin simple, il serait plus facile pour moi de constituer une équipe. Ce serait moins cher ou plus efficace. J'aurais pu recruter des programmeurs Scala moins cher, mais j'aurais obtenu un résultat pire, car ils feront quelque chose de terrible dans ce Scala. Même si c'est difficile sur le marché du travail, je vais commencer à recruter des programmeurs Java - Kotlin sera beaucoup plus facile à former. C'est du point de vue du démarrage d'un nouveau projet, s'il n'y a pas de choses technologiques sérieuses.

Pour le secteur bancaire, par exemple, il y a des raisons d'utiliser Scala. Kotlin ne peut pas les résoudre. La même métaprogrammation dans Scala est beaucoup plus pratique.

Si vous réfléchissez bien à ce sujet, vous pouvez créer des éléments d'infrastructure sympas sur Scala, mais c'est impossible dans Kotlin. Il existe les mêmes processeurs d'annotation. Un jour, ce sera possible, mais seulement dans la perspective de plusieurs années.

Vadim : Pourquoi pensez-vous que Scala est bon pour les banques?

Alexander : Il y a beaucoup de passe-partout qui ne sont pas liés au langage de programmation. Il s'agit d'un système où il existe des objets de type utilisateur. Cela nécessite beaucoup de duplication, à partir de la base de données et se terminant par tout. Pour changer efficacement quelque chose, vous avez besoin d'un bon support de métaprogrammation. Il est nécessaire partout, mais il faut le coller avec prudence, sinon vous risquez de vous coincer.

En l'an 11, j'ai été appelé à l'université universitaire. J'étais trop paresseux pour enseigner tout le cours et j'étais d'accord avec Sveta Isakova , qui est maintenant avocate développeur Kotlin. Nous avons accepté de suivre le cours en deux, mais il s'agissait de Scala. Elle voulait probablement en savoir plus sur Scala.

Vadim : L'université était-elle en tête à cette époque?

Alexander : Oui, avec une magistrature sur 5-6 cours. Les premières années du concours ont été modestes. Mais la concurrence pour l'endroit a augmenté lorsque JetBrains, Yandex et Transas sont venus avec un parrainage, une invitation à des stages et l'objectif de développer du personnel pour eux-mêmes.

Cela s’est avéré cool: de l’argent privé et une initiative privée sous le couvert de l’État et sous la couverture d’Alferov. Il a donné carte blanche - faites comme vous le souhaitez! Cela s'est avéré formidable, car les cours sont pertinents. Ils ont recruté des gens qui étaient à la pointe de la technologie, ont compris ce qui se passait dans l'industrie en ce moment et il n'y a pas 10 ans, on ne savait pas où. Si nous parlons d'universités ordinaires, ala "mathmech / mehmat", alors Pascal n'y passe pas - cela n'a rien à voir avec la vraie vie.

C'était une université universitaire solide. Les gens ont compris que lorsqu'ils arriveraient sur place, ils entreraient rapidement dans l'industrie. Diplômés universitaires recrutés avec plaisir dans Yandex et JetBrains. Il s'agit d'une bonne étape de carrière et le concours était de 10 étudiants en place. J'y ai enseigné pendant 5 ans. La deuxième année, Sveta ne m'a pas parlé de Scala et j'ai fait appel à divers assistants, en particulier Sveta pour Kotlin. En conséquence, nous avons renommé les langages JVM.

À un moment donné, j'ai obtenu le soutien de Clojure et j'ai un peu compris cette langue. Selon les étudiants, ils ne comprenaient pas ce que faisait Clojure, quel genre de merde c'était. Ils parlent de langages normaux - Scala et Kotlin, et, soudain, ont brouillé Clojure. Je n'étais tout simplement pas un expert. C'était l'histoire.

À propos du premier ScalaSPB / ScalaDev


Alexander : Ensuite, des événements comme Scala Days sont apparus à Saint-Pétersbourg. Le premier ScalaDev est passé et pour le deuxième événement, les organisateurs des Journées Scala originales ont contacté Saint-Pétersbourg et ont demandé à être renommés.

Vadim : En quelle année est-ce?

Alexander : Oui, tout est là - 11-13. L'événement a été fait par des gars de l'e-légion de l'externalisation de Saint-Pétersbourg. Il semble qu'ils aient écrit la demande de Raiffeisenbank. Ils ont même écrit une application mobile à Scala, mais maintenant personne n'écrit de cette façon - les gens sont fous.

Vadim : Un des invités du podcast - Matvey Malkov - a parlé de Scala et d'Android il y a deux ans. Il a dit que tout allait bien pour eux et qu'ils l'utilisaient. Leur principal gain est à la fois le backend Scala et les applications.

Récemment, je lui ai écrit pour lui demander de prendre la parole à la conférence, car vous ne trouverez personne sur les téléphones portables. Il s'est avéré qu'il a quitté l'entreprise et la dernière chose qu'il a faite a été de mettre en place sur CI l'assemblage du module Kotlin de ce projet sur Scala afin que les gars y retournent progressivement.

Alexander : Il y a deux ans, rien n'était clair sur Kotlin. Théoriquement, Google pourrait prendre Scala, mais il ne l'a pas fait.

Nous avons joué lors des premières Scala Days et avons même rassemblé des gens. Plus précisément, non pas sur le premier, mais sur le second, qui s'est tenu chez JetBrains. Puis Sveta Isakova a joué avec une intro à Kotlin.

C'était drôle - tous les développeurs de Scala percevaient Kotlin comme l'ennemi numéro un. Hall a réagi très négativement, a posé des questions: "Pourquoi cela ne se fait-il pas, pourquoi ne l'est-il pas, pourquoi ne l'est-il pas?" C'était effrayant, une sorte de piratage.

Après Sveta, j'étais la deuxième personne à dire quelque chose sur Kotlin à la conférence Scala - sur Kotlin / Native. Mon expérience a montré que cela est inutile. Je ne suis pas dans l'intérêt du rapport, j'étais intéressé de voir Scala Native. Comment cela est organisé à l'intérieur, démarrez des programmes, réjouissez-vous de quelque chose. Même à cette époque, j'étais heureux que la taille binaire de Scala Native soit plus petite que celle de Kotlin. Je pense que Kotlin / Native en a moins maintenant, car 10 personnes y travaillent.

Vadim : Oh, eh bien, vous étranglez définitivement Denis Shabalin .

Alexander : C'est impossible, c'est une technologie très complexe. Nous avons 10 personnes et ce n'est pas suffisant. Et 10 personnes sympas, très cool, essayez-les plus à collectionner. Denis lui-même est cool, mais que peut-il être seul?

L'histoire de la communauté est assez intéressante, tout comme l'histoire de Scala. Beaucoup de gens voulaient créer une sorte de cadre, probablement personne n'en avait besoin, pour faire de la publicité et quitter. De nombreuses étoiles particulières se sont formées, et certaines ont également aidé l'EPFL. L'une des exigences est un travail d'études supérieures d'un étudiant diplômé. Par exemple, Scalameta est l'œuvre de Zhenya Burmako . Dans le processus de travail, les étudiants diplômés augmentent le prix en tant que programmeur, et après l'obtention du diplôme, ils trouvent un travail sympa. Le premier emploi rémunéré est plus que pour les personnes qui travaillent depuis 10 ans. Parce qu'ils sont célèbres, ils ont rapporté un tas de conférences et tourné.

Voici autre chose. Vous regardez, à Kotlin: ici nous allons le faire, le voici, et à Scala absolument pareil. Voici Tasty, dans le backend Kotlin IR. Mais, comme à Scala tout anime la communauté, tout est dans le chaos complet. Il n'y a pas de conception centralisée. Ce qui se passera fonctionnera. L'homme a voulu brûler quelque chose, il s'est avéré. Martin a aimé, l'approbation a été donnée aux masses. Et chez Kotlin, de plus en plus clairement et professionnellement, c'est ce que signifie l'industrie.

À propos d'Eclipse et Jason Zaugg


Alexander : En '13, nous sommes allés à la conférence. Tout le monde dans le compilateur programmé dans Eclipse. Nous nous sommes levés et les gens qui ont utilisé IDEA nous ont approchés. Ils étaient contents, remerciés. Nous détenons 10% du marché, le reste sur Eclipse. Tous les compilateurs sont assis dessus. Ils nous ont longtemps contournés, soudain nous les avons convaincus de l'utiliser. Mais à un moment donné, il y a eu un changement.

En 11 ou 12 ans, nous avons eu un contributeur, Jason Zaugg . Dans le monde Open Source, ce n'est pas étrange, mais il apparaît rarement des gens qui investissent beaucoup de temps et codent beaucoup. Jason est venu, il a fait beaucoup d'argent et il a lui-même travaillé dans une banque. Nous lui avons même donné le droit de commettre. Il n'avait même pas besoin de montrer la revue pour publication. Ils se sont juste assis, ont codé, ont discuté de certaines choses ensemble. Sur la base de notre interface, il a compris comment fonctionne Scala. Tout s'est terminé avec Jason obtenant un emploi de compilateur Scala. Il est triste que nous ne l'ayons pas arrangé pour nous-mêmes. Je pense que ce n'est pas la bonne stratégie. Si une personne travaille pour vous gratuitement - elle doit être arrangée pour elle-même, sinon elle ira au compilateur Scala. Il n'y avait plus rien de tout cela.

Jason est une personne formidable et un contributeur sympa. Il était fan d'IDEA. Le fait est que le plugin Scala se bloque sur le code du compilateur. Le code est complexe - l'injection de dépendance (DI), qui, en substance, est un modèle de gâteau. Lorsque vous ouvrez un fichier, vous devez analyser l'intégralité du compilateur. En raison de DI, il y a TOUT dans le contexte, et tout est là avec l'inférence de type, et vous devez afficher le type partout - tout est entrelacé. L'analyse d'un fichier a pris 5 minutes. Même en configurant le compilateur en tant que projet, le bootstrap est toujours venu. Il doit dépendre de lui-même, cela s'appelle bootstrap. De tels projets étaient difficiles à mettre en place.

Jason et moi avons passé beaucoup de temps à nous adapter. Pour rendre les projets d'amorçage possibles, programmez dans le compilateur, afin qu'au moins vous puissiez taper du code dans ces fichiers complexes. Au début, tout était rouge et j'ai passé beaucoup de temps à tout transformer en vert. Nous avons même fait un test qui a vérifié que notre interface sur le compilateur est verte ou contient peu d'erreurs. Et, en conséquence, l'équipe de compilation est entièrement passée à IDEA.

Vadim Chelysov : À ce moment-là, la sortie d'Eclipse a-t-elle commencé?

Alexander : Il y a plusieurs raisons à la sortie. Tout d'abord, IDEA a publié une version communautaire. Cela signifie que vous pouvez mettre le plugin Scala sur la version gratuite de l'utilisateur. Nous étions Open Source depuis le tout début, et quand nous avons commencé, c'était propriétaire, avec des sources ouvertes. Mais il a été installé sur un IDE payant. Pour cela, ils ont écrit le support Eclipse, car ils avaient besoin d'un outil standard qui peut être utilisé gratuitement. Par conséquent, nous sommes également devenus libres.

La seconde - Eclipse en tant que plate-forme a commencé à disparaître en '14. Il n'est pas mort, c'est ridicule de le dire, mais le financement est brusquement rompu. La Fondation Eclipse a commencé à collecter moins d'argent et on ne sait pas comment développer la plateforme dans de telles conditions.

La troisième raison est qu'ils n'ont pas pu créer un IDE rapide. Le compilateur de présentation a fonctionné lentement, et si nous parlons d'une sorte de fonctionnalité - il s'agit généralement de tryndets, le refactoring est extrêmement difficile à faire. Dans le compilateur, du point de vue de l'optimisation, les arbres sont construits unidirectionnellement, vous ne pouvez pas prendre de parent. Pour trouver le nœud parent, vous devez prendre un fichier d'en haut, aller vers eux et regarder - horreur terrible.

La quatrième raison est qu'ils fonctionnent avec l'affichage dans le compilateur. Il s'agit de l'arbre obtenu après découplage. L'éditeur est écrit dans l'instruction front, et dans le compilateur de présentation, il n'est généralement pas clair quel type de code. On ne sait pas comment travailler avec cela et organiser la refactorisation. Comment extraire cette déclaration avant, et pas toute cette merde folle? En conséquence, les fonctionnalités sont apparues lentement.

Dans le même temps, notre front-end était misérable et ne fonctionnait pas bien. Mais pour qu'il soit au moins comme ça, il devait faire des choses terribles. Il était une fois, la méthode pour {i <- 0 to 10} println(i) nécessitait un support pour 80% de la langue. Parce qu'il est découplé et que vous avez une conversion implicite pour la Range - 1 to 10 , le long du chemin une conversion implicite pour la map , les paramètres implicites sont CanBuildFrom . De plus, il y a encore une hiérarchie folle de collections et de lambdas, et quelques autres lambda anonymes avec un paramètre inconnu - l'étain complet. Une fois que cet exemple fonctionne, vous devez comprendre qu'il fonctionne à 80% du frontend. Par conséquent, même un front-end médiocre signifiait que nous prenions en charge une quantité incroyable de fonctionnalités Scala.

Maintenant, IDEA a écrit de nombreux convertisseurs de langue. Ils sont étranges, mais différents, et quand tout a commencé, personne ne se souvient. En 2009, je suis allé à une conférence et là j'ai été choqué - pourquoi ne pas faire une conversion de Java à Scala? Nous avons discuté du fait que vous vous lasserez des points-virgules pour supprimer et développer les types - vous devez vous déplacer d'une manière ou d'une autre. Je me suis assis et j'ai écrit mille lignes le soir - un simple convertisseur d'une langue dans une autre.

Mais je suis allé plus loin et j'ai trouvé comment faciliter la recherche de cette fonctionnalité. Lorsque je copie dans du code Java, je m'attends à insérer et à supprimer des points-virgules maintenant. C'est mon cas préféré lorsque vous créez une fonctionnalité idéale pour la découverte. Bien que vous n'ayez pas besoin d'elle, vous ne la connaissez pas. Dès que vous en avez besoin, vous l'obtenez immédiatement. C'est comme un style Apple - simple et direct. En conséquence, depuis ce temps, de nombreux convertisseurs ont été écrits par JetBrains, et la caractéristique publicitaire est qu'ils sont proposés sur l'insert. Mais oui, je l'ai trouvé, c'est ma fierté.

À propos des compilateurs


Mikhail Mutsianko , l'un des développeurs actuels du plugin Scala chez JetBrains, est connecté à l'enregistrement. Dans ce numéro du podcast, Mikhail et son collègue Andrei Kozlov ont discuté plus en détail du plugin.

Alexander : J'appât des histoires de Scala ici. Misha, dis-moi comment tu es apparue?

Michael : Je suis apparu à l'origine dans Kotlin. Andrei Breslav a effectué l'un des premiers stages - un étudiant. Je suis arrivé au projet de génération du bytecode Kotlinovsky DSL de la bibliothèque Android UI. Elle s'appelle maintenant anko . Ensuite, j'ai cherché des sujets pour un diplôme, et il m'a envoyé à Sasha. En tant que diplôme, j'ai fait un interprète d'arbre pour Scalameta.

Alexander : Exactement, c'est le sujet que Misha a obtenu sous la forme d'un diplôme - le soutien à la méta-programmation. Misha a fait ça pendant longtemps. Avons-nous fait quelque chose à la fin?

Michael : Oui, ça a marché. Certes, Scalameta a été réprimandé. Scala 3 aura quelque chose de similaire, mais avec une API plus standardisée.

Alexander : Je ne sais absolument rien de Dotty.

Vadim : Je viens de voir aujourd'hui que Miles Sabin a tâté son morceau de code où il migre sans forme vers Dotty avec de nouvelles macros, et il semble que cela se révèle. Typeable migré.

Mikhail : Oui, en particulier, il est l'une de ces personnes qui donne des instructions sur la façon de vérifier le typographe dans Scala, afin que Shapeless fonctionne hors de la boîte, sans béquilles. Pliez essentiellement sans forme vers le compilateur.

Alexander : Oh, allez! Vous plaisantez Dites-moi, Scalaz plie-t-il?

Michael : Eh bien, d'une manière ou d'une autre, on ne sait pas du tout qui Scalaz écrit maintenant. Miles n'est pas derrière lui.

Vadim : Maintenant, toute la communauté s'occupe de Dotty. Miles regarde sans forme. Pour la énième fois, ces implications ont changé, avec une discussion sur la façon de faire des classes de type de Luka Jacobowitz .

Alexander : À propos de la communauté. Au début de la 17e année, Scala Center a décidé de rassembler des influenceurs sur la communauté pour le groupe de travail . JetBrains a toujours été surveillé de loin et attentivement. Dieu nous en préserve, nous rendons la programmation dans IntelliJ IDEA dangereuse. Quand il est devenu difficile de nier que vous devez encore programmer à IDEA, nous avons été acceptés. Ils m'ont invité à une discussion, mais je me suis blessé à la main et je ne suis pas venu. Puis il a quitté Scala et n'est jamais apparu dans le groupe de travail.

Cela m’amuse toujours que les gens disent: "Pourquoi devons-nous documenter les détails du compilateur, n’y a-t-il toujours pas de second compilateur?" C'était drôle parce que le plugin Scala a toujours été ce deuxième compilateur alternatif. Il y avait toujours Typelevel, bien sûr, mais c'est une fourchette.

Nous avons été fortement influencés par le développement de Scala. Quand Jason Zaugg est apparu dans le compilateur, c'était cool. Il a commencé à nous dire: "Nous l'avons fait, soutenez-nous". Il y a une communication. Lorsque les compilateurs regardent vers le bas et n’utilisent pas, ils ne nous disent rien. C'était avant Jason.

Michael : Maintenant, je donne régulièrement des coups de pied à Guillaume Martres , qui voit Tasty, et Fengyun Liu - il voit des macros.

Pour résumer


Vadim : Alexander, merci beaucoup, résumons. J'ai parlé à un homme hier. Il a dit qu'à Scala, il aimait le concept unique d'implicite, sur lequel diverses fonctionnalités étaient accrochées. Maintenant, dans Dotty, ils sont arrivés aux mêmes méthodes d'extension explicites, évidemment toutes les implications de cas d'utilisation ont été déclarées avec des mots exacts. Espionné sur Kotlin et Swift, probablement. Que ressentez-vous à ce sujet? Et en général à Scala 3?

Alexander : En 2018, ce sont les derniers Scala Days que j'ai visités. À ce sujet, Martin Odersky a parlé du fait que Scala a tellement de concepts de langage, Kotlin en a trois fois plus, C # en a encore plus. Mais en même temps, les capacités de Scala sont plus étendues.

Nous pensions que c'était cool, mais ce n'est pas le cas. J'ai été impressionné, j'ai réalisé que Martin comprend que nous devons bouger. La seule chose qui inquiète est que Scala devienne une sorte de langage de niche. Les possibilités illimitées de la langue créent ce créneau même. C'est la DSL qu'elle sait faire, et tout est cool. Chasser Kotlin pour le meilleur Java est difficile, et plus difficile chaque année. L'essentiel est de ne pas perdre sa niche. S'ils ajoutent toutes ces fonctionnalités et ne perdent pas leur niche, ce sera cool. Mais si Miles gère tout cela, cela peut fonctionner. Oui, Misha?

Dans les parties suivantes de l'enquête sur l'origine du mouvement Scala, nous attendons une interview de Vladimir Uspensky, Roman Elizarov et Nikolai Tatarinov. Si vous souhaitez ajouter de nouvelles facettes à l'histoire du mouvement Scala ou partager votre expérience d'utilisation, soumettez des rapports . L'appel à communications se termine après 10 jours.

Source: https://habr.com/ru/post/fr467165/


All Articles