Vor der RubyRussia-Konferenz bleibt nur noch sehr wenig Zeit. Diejenigen, die es nicht geschafft haben, ihr Ticket zu bekommen, haben immer noch die Möglichkeit, eines der letzten auf der
Website abzuholen. Nikita Shilnikov wird auf der Konferenz über algebraische Effekte sprechen, aber im Moment können Sie das Interview zum Thema des Berichts lesen.
Sag mir, was du machst und wie es mit Ruby zusammenhängt?
Ich arbeite für zwei Unternehmen, deren Projekte in Ruby geschrieben sind. In einem Fall können wir sagen, dass dies ein solches Halbunternehmen ist, und in einem anderen Fall erstellen wir einen SaaS-Service. Es ist so passiert, dass ich viel Open Source mache. Vor vier Jahren interessierte ich mich für ein Projekt, fand Funktionsmängel darin, beschloss, es zu beheben und ab und zu. Jetzt bin ich ein Kernentwickler von zwei Organisationen und der Community. Alles ist auf meinem
Github zu sehen. Ein Teil der Arbeit befasst sich mit
rom-rb- Datenbanken, und der andere Teil ist eine Reihe von Bibliotheken für verschiedene Anlässe.
Sagen Sie mir in Ihrem Bericht über algebraische Effekte, welche Vorteile sie Entwicklern bieten.
Hier brauchen Sie ein kleines Interview. Das Dry-RB-Ökosystem ist von der funktionalen Programmierung inspiriert. Aber während seiner Entwicklung verfolgte etwas. Sie entwickeln beispielsweise einen SaaS-Dienst und es gibt eine einfache Aufgabe, Daten zu isolieren. Alles scheint klar zu sein, es gibt eine Art Service, Unternehmen sind darin registriert und sie sollten keinen Zugriff auf die Daten des anderen haben. Sie können auf viele Arten lösen. Aus rein funktionaler Sicht konnte ich jedoch keine Antwort darauf finden, außer der expliziten Übertragung von Argumenten im gesamten Code. Er fand seine „nicht funktionierende“ Lösung und lebte mit ihm zusammen.
Ende 2018 erschienen Hooks in React. Als ich ihre API zum ersten Mal sah, dachte ich, dass es unmöglich ist, solche Dinge so einfach zu tun. Ich habe eine gute Vorstellung davon, wie JavaScript funktioniert, und habe festgestellt, dass hier offensichtlich nicht alles sauber ist, globale Variablen verwendet werden oder etwas anderes. In meiner Vorstellung davon, wie das Programm funktioniert, war es entweder unmöglich oder es wurde eine Art schmutziger Hack verwendet. Ich beschloss, das Thema zu studieren.
Es stellte sich heraus, dass ich nicht die einzige Person war, die sich für dieses Thema interessierte. Ich fand Informationen darüber, dass es eine solche Art der Formalisierung gibt, dh das Schreiben von Programmen, die globale Variablen oder einen allgemeinen Zustand zu verwenden scheinen. Sie bleiben jedoch sauber. Das Problem war relevant und ich begann tiefer zu graben. Infolgedessen wurden die sehr algebraischen Effekte die Antwort. Ich habe einen kleinen Prototyp in Ruby geschrieben und zu meiner Überraschung hat es funktioniert. In der Produktion implementiert, gestartet und mehrere Monate gefahren, dann eine Entscheidung für alle getroffen.
Sie haben mich direkt mit React Hooks fasziniert. Ich dachte, es gäbe etwas sehr Einfaches wie Call Stack, Closure, Current Scope.
Es ist wirklich so. Das Problem ist, dass Sie eine Art Artikel haben, der die Semantik beschreibt und wie dies aus wissenschaftlicher Sicht funktionieren sollte. Wenn Sie den Spezifikationen folgen, können Sie anscheinend eine Bibliothek erstellen. Im Fall von React ist dies auch eine Bibliothek oder beispielsweise ein Framework, das eine Art API bereitstellt. Wenn Sie es richtig verwenden, funktioniert alles gut. Aber wenn Sie nach links oder rechts gehen, kann es schlecht enden. In React untersagten sie einfach die Verwendung von Haken unter bestimmten Bedingungen. Sie mussten es tun. Dies ist eine der Einschränkungen.
Hängt das irgendwie mit dem mathematischen Beweis der Richtigkeit des Codes zusammen?
Nicht wirklich. Es geht nicht um die Notwendigkeit, etwas zu beweisen, sondern eher um die Überprüfung des Programms. Bei algebraischen Effekten geht es nur um eine Beschreibung der Semantik. Dort ist nichts bewiesen, aber es wird gezeigt, wie es funktionieren soll. Wenn diese Bibliothek, die algebraische Effekte implementiert, keine Fehler an sich enthält, stellen Sie durch die Beschreibung der Semantik sicher, dass Ihr Code wie beabsichtigt funktioniert.
Wie stehen Sie zu Typen und statisch typisierten Programmiersprachen?
Sehr positiv. Zum Beispiel haben wir ein Backend für Ruby und ein Frontend für so etwas wie ReasonML. Dies ist OCaml, jedoch mit einer anderen Syntax. Wenn alle anderen Dinge gleich sind, treffe ich eine Wahl in Richtung dieses Typsystems. Es ist ganz einfach und es gibt eine Reihe von Sprachen, in denen eine ähnliche oder ähnliche Implementierung erfolgt. Je mehr Typen, desto besser. Ich schreibe jedoch ein Backend in Ruby und alles ist in Ordnung mit mir. Ich bin der Entwickler der Werkzeuge, mit denen ich arbeite, und es ging immer um Typen:
Trockentypen ,
Trockenstruktur ,
Trockenschema ,
Trockenvalidierung ,
Trockenmonaden . Es geht darum, Typen zu beschreiben, die aus der Datenbank, vom Benutzer oder von externen Systemen stammen. So wissen Sie immer, welcher Ruby-Code für Sie funktioniert. Auch wenn es nicht selbst eingegeben wurde, können Sie sicher sein, mit welchem Variablentyp Sie arbeiten.
Es gibt Gerüchte, dass es Typen in Ruby 3 geben wird. Was sagst du dazu?
Ich habe Erfahrung mit Python. Als die Typen dorthin gebracht wurden, war das Tuling nicht sehr entwickelt und ich war nicht beeindruckt. Jetzt ist die Situation dort besser. Sie können dorthin gehen und alles mit Typen beschreiben und eine Art Tuning anwenden, die überprüft, ob Ihr Programm korrekt ist. Es geht um eine Art Ersatz für den Compiler, darum, was Sorbet jetzt tut. Dies dauerte mehrere Jahre für Python. Ich begrüße immer die Bewegung in Richtung Typen, aber ich habe keine Illusionen.
Suchen Sie nach einer neuen Syntax, die Sie in Bezug auf Ruby-Code implementieren möchten?
Vor allem nicht gespielt, ging in den Chat, schaute. Ich habe jedoch keine Meinung dazu, wie sich die Umsetzung lohnt. Die Syntax kann verbessert werden, Änderungen in der Sprache und so weiter. Jetzt haben sie die übliche Ruby-kompatible Syntax erstellt. Ich denke nicht, dass die Syntax hier ein Stolperstein ist, ein Stolperstein stimmt und wie gesagt, dies ist ein sehr langer Weg.
Was möchten Sie sonst noch in Ruby sehen, wie sehen Sie die Entwicklung?
Ich würde mich für kooperatives Multitasking interessieren. Wir haben bereits kooperatives Multitasking in Form von Fasern. Es fehlt uns immer noch die Möglichkeit, sie auf mehreren Threads auszuführen. Es gibt Optionen, wie dies geschehen soll, und es ist nicht klar, in welcher Form. Angesichts der Tatsache, dass Ruby, die C-Implementierung, ein ziemlich solides Erbe hat, möchte Matz die Abwärtskompatibilität nicht beeinträchtigen. Ich neige zu einer Kombination von Fasern und mehreren gleichzeitig laufenden Fäden. Vielleicht funktioniert so etwas wie Guild.
In diesem Jahr kommt Yukihiro Matsumoto, der Autor von Ruby, zur Konferenz. Was würden Sie gerne bei einer Tasse Kaffee oder einem Glas Sake auf der Afterparty mit ihm besprechen?
Das Beste, was wir bei der Kommunikation mit den Autoren von Sprachen oder sogar Bibliotheken tun können, ist ihnen zu zeigen, wie wir dieses Produkt im wirklichen Leben verwenden. Darüber hinaus, auch wie die Autoren nicht erwartet hatten. Dies gibt dem Autor die Möglichkeit, solche Erfahrungen zu berücksichtigen und in der weiteren Entwicklung anzuwenden. Ich möchte die ganze Geschichte mit algebraischen Effekten zeigen. Ich würde sagen - schau, was kann man in der von dir geschaffenen Wundersprache tun? Und vielleicht hat er danach noch etwas für uns.
Wir sehen uns bei RubyRussia!
Denken Sie daran, dass die Konferenz bereits an diesem Samstag stattfindet und die
Registrierung noch offen ist.
Es wird nicht nur Berichte geben, sondern auch Stände der besten Unternehmen:
Veranstalter -
EvroneKomplementärin -
ToptalGold Partner -
GettSilberpartner -
Valarm ,
JetBrains ,
Bookmate und
CashwagonBronze Partner -
InSales