Die zentralrussische Rubinkonferenz am 28. September markiert 10 Jahre. In diesem Jahr hat
RubyRussia einen neuen Veranstaltungsort, bis zu 4 Streams ausgewählter Berichte, Kommunikation und natürlich die legendäre After-Party! Unter den Rednern sind Yukihiro Matsumoto, Takashi Kokubun, Xavier Noria, Nick Sutterer, Genadi Samokovarov und mehr!
Zur Vorbereitung sprechen wir mit Rednern über Ruby, Arbeit und Leben. Heute veröffentlichen wir Material, in dem
Dmitry Matveyev (Projektmanager in
Evrone ) Fragen an
Takashi Kokubun stellt .
Der Sprecher RubyRussia 2019, ein Optimierer für den Ruby JIT-Compiler, unterstützt Haml und ERB, einen Backend-Ingenieur in ArmTreasure Data.Sagen Sie mir, was in Ihrem Bericht auf der Konferenz besprochen wird?Informationen zur Arbeit am JIT-Compiler. Ich möchte mich auf drei Punkte konzentrieren. Das erste ist das Inlining von Funktionen. Die Funktion muss „sauber“ sein, ohne Nebenwirkungen, damit ihr Körper inline sein kann. Wenn zu viele Funktionen vorhanden sind, beginnt der Compiler langsam zu arbeiten. Ich werde beschreiben, wie dieses Problem gelöst werden kann.
Der zweite Punkt betrifft die Optimierung der Platzierung von Objekten im Speicher. In großen und komplexen Anwendungen wie Rails müssen Sie viele Objekte in einer Anforderung erstellen. Wenn Sie diesen Prozess optimieren, können Sie die Leistung verbessern. Normalerweise werden Objekte im Heap erstellt. Daher müssen Sie darin komplexe Datenstrukturen verwalten. Sie müssen auch den Garbage Collector aufrufen, um nicht verwendete Objekte zu entfernen. Und wenn wir Objekte auf dem Stapel platzieren würden, würden wir einfach den Stapelzeiger erhöhen, wenn wir ein Objekt hinzufügen, und ihn verringern, wenn das Objekt gelöscht werden muss. Die Verwendung des Stapels zum Speichern von Objekten ist an sich schneller, und der Garbage Collector arbeitet schneller. Um den Stapel verwenden zu können, müssen wir jedoch sicherstellen, dass Objekte nicht anderweitig verwendet werden. Zu diesem Zweck verwenden wir eine Technik namens „Fluchtanalyse“. Wir müssen jede Methode analysieren und sicherstellen, dass jedes ihrer internen Objekte nicht extern verwendet wird und nicht als Ergebnis der aktuellen Methode zurückgegeben wird. Wenn wir dies tun können, können wir Objekte auf dem Stapel platzieren, was die Produktivität erhöht. Meine Idee ist es, Metadaten für Anweisungen hinzuzufügen. Nun, dies ist ein Experiment, aber ich werde in naher Zukunft eine Pull-Anfrage an den Master mit diesem Code stellen.
Der dritte Punkt betrifft die Optimierung des Versands von Funktionsaufrufen in JIT. Gegenwärtig erzeugt dieser Prozess eine starke Verzweigung der Logik, was den Mechanismus der Verzweigungsvorhersage des Prozessors nachteilig beeinflusst. Dies verlangsamt den Prozessor insgesamt. Wir müssen diese Logik vereinfachen, dh die Anzahl der Bedingungen reduzieren. Ich erforsche gerade, wie das geht.
Dies ist ein Hardcore-Bericht mit viel Code und Konzepten! Es scheint schwierig zu sein?Ich denke, dass die meisten Leute Compiler nicht selbst implementieren, und ich verstehe, dass es schwierig sein kann, dies zu verstehen. Aber ich werde versuchen, alles so einfach wie möglich mit Beispielen und Abbildungen zu erklären. Das heißt, mein Bericht sollte für Leute ohne besondere Erfahrung in der Compilerentwicklung verständlich sein.
Ist es möglich, den neuen Compiler jetzt in der Produktion einzusetzen, und in welchen Fällen?Die Idee ist, RoR-Anwendungen schneller laufen zu lassen. Zum Beispiel wird meine derzeitige Firma davon profitieren. Aber ich würde nicht sagen, dass alles für die Produktion bereit ist. Es stellte sich heraus, dass nur RoR-Anwendungen nicht besonders beschleunigt werden. Dies liegt daran, dass solche Anwendungen normalerweise groß sind und viel C-Code generieren, was zu einer ineffizienten Verwendung des Caching im Prozessor führt. Ich habe einige Ideen, wie ich das beheben kann. Daran arbeite ich gerade. Aber jetzt kann mein Compiler für kleine Anwendungen nützlich sein. Ich weiß zum Beispiel, dass der Karafka-Edelstein damit schneller arbeitet als ohne.
Ich habe gelesen, dass der JIT-Compiler bereits in den Ruby-Brunch-Master integriert ist und seit Version 2.6 verfügbar ist. Ist es so?Ja, meine Zusammenführungsanforderung wurde bereits akzeptiert. Dies ist jedoch die erste Version, und es bleibt noch viel zu tun. Verbesserungen werden bereits in Ruby 2.7 und noch mehr in Ruby 3 vorhanden sein.
Sag mir, wie du angefangen hast, in Ruby zu schreiben?Zuerst habe ich mit Objective-C gearbeitet, aber es hat mir nicht wirklich gefallen. Einmal musste eine Backend-Anwendung geschrieben werden, und Freunde empfahlen, Ruby On Rails auszuprobieren. Ich habe genau das getan - und war sehr zufrieden mit dem Ergebnis! Ich mochte die einfache und verständliche Syntax der Sprache und begann, sie tiefer zu studieren und zu verwenden.
Schreibst du jetzt in Ruby bei der Arbeit?Ich bin seit ein paar Jahren bei Treasure Data. Es ist eine Plattform, die Benutzerdaten in Clientanwendungen verfolgt. Dieses Projekt wurde ursprünglich in Ruby On Rails geschrieben und mein Beitrag hieß "Ruby Developer". Also habe ich viel in Ruby geschrieben. Aber jetzt arbeite ich an einigen verteilten Diensten, die in Java und Kotlin geschrieben sind, und verwende manchmal auch Python.
Das Treasure Data-Projekt ist mit hoher Auslastung und Big Data verbunden. Aber Ruby ist nicht die schnellste Sprache. Wie haben Sie es geschafft, eine Hochlastanwendung zu erstellen, die mit Big Data auf der RoR-Plattform funktioniert?Die Anwendung zeichnet Benutzerdaten auf und speichert sie im Speicher. Es bietet auch eine Schnittstelle zum Abfragen von Daten in Sprachen wie Hive und Presto sowie ein Admin-Panel. Es war kein Problem, alles auf Schienen zu schreiben. Außerdem haben wir eine kompetente Infrastruktur geschaffen und können die Speicher- und Prozessorressourcen bei Spitzenlasten erhöhen. Das Hauptproblem, das wir mit Ruby haben, ist, dass es nicht für paralleles Rechnen geeignet ist. Und wir müssen Kotlin für diesen Zweck verwenden.
Warum liebst du Ruby? Wenn es ein Projekt gäbe, das sowohl in Ruby als auch in Python implementiert werden könnte, welches würden Sie wählen?Ich mag die saubere Ruby-Syntax, sie ist sehr lesbar und intuitiv. Auf diese Weise können Sie schnell und einfach Anwendungslogik schreiben, was aus geschäftlicher Sicht wichtig ist. Dies ist eine reine Objektsprache, ich weiß das wirklich zu schätzen. Ich habe Erfahrung in Python, aber es scheint mir nicht so intuitiv. Ich würde es nur für maschinelle Lernprojekte wählen.
Eine andere Sache, an der Sie in letzter Zeit gearbeitet haben, ist die Haml-Template-Engine ...Ich habe bei einem früheren Job bei Haml und ERB gearbeitet. Jetzt widme ich nicht zu viel Zeit dem, aber manchmal schaue ich mir in diesen Projekten Pull-Quests an.
Was halten Sie von den Perspektiven von Template-Engines wie Haml, Slim oder ERB im Allgemeinen, da in der modernen Welt die Tendenz besteht, die Vorder- und Rückseite vollständig in zwei verschiedene Anwendungen zu trennen und die Bildung von HTML-Seiten vollständig JavaScript zu überlassen? Das heißt, in einer solchen Konfiguration werden Template-Engines völlig unnötig?Ich bin damit einverstanden, dass es für Aufgaben mit einer komplexen Benutzeroberfläche sinnvoll ist, diese Logik in einer separaten Anwendung abzulegen. Dies muss getan werden, um mit anderen Unternehmen zu konkurrieren, die die Komplexität und Funktionalität der Benutzeroberfläche zunehmend erhöhen. Es besteht jedoch immer noch ein Bedarf an einfacheren und vor allem billigeren Lösungen, die sinnvoll sind, um mit klassischen Template-Engines auf RoR zu schreiben. Sie sind also noch in Betrieb und werden lange verwendet.
Ich sehe, dass Sie in vielen Sprachen programmieren können, zumindest in Ruby, Python, Java, Kotlin und C. Ein guter Satz. Können Sie Anfängern Ratschläge geben, wie man so viele Sprachen lernt? Wie werde ich ein guter Programmierer?Ich denke, dass die Effektivität des Trainings hoch sein wird, wenn die Sprache für die Aufgaben eines Programmierers geeignet ist. Ruby eignet sich gut zum Schreiben von Webanwendungen, da die Arbeit mit Zeichenfolgen im Vergleich zu Java sehr einfach ist. Python eignet sich besser für maschinelles Lernen (es verfügt über eine umfangreiche Infrastruktur in diesem Bereich). Wenn Sie Python lernen möchten, würde ich empfehlen, maschinelle Lernaufgaben zu lösen, anstatt Webanwendungen zu schreiben. Wenn Sie sich mehr für Java, Kotlin oder andere JVM-basierte Sprachen interessieren, empfehle ich, verteilte Systeme zu schreiben. Ruby ist derzeit nicht gut für anspruchsvolles oder paralleles Computing geeignet. Um solche Probleme in Ruby zu lösen, benötigen wir viele Prozesse, die viele Ressourcen verbrauchen, sodass sie nicht effektiv sind. Die Verwendung geeigneter Tools für relevante Probleme hilft daher zu verstehen, warum dieses Tool auf diese Weise entwickelt wurde. Dies wird dazu beitragen, sein Wesen besser zu verstehen.
Welche Bücher stehen ganz oben auf Ihrer persönlichen „Bewertung“?Der erste ist Ruby unter dem Mikroskop. Es ist sehr einfach geschrieben und beschreibt die Details des Dolmetschers. Ein tiefes Verständnis der Funktionsweise des Dolmetschers hilft bei der Lösung komplexer Probleme und erhöht das Vertrauen in den Besitz des Werkzeugs, d. H. Zunge. Ich empfehle dieses Buch auch für Anfänger.
Der zweite ist "Lesbarer Code". Es geht seltsamerweise darum, wie man klaren Code schreibt :). Wir schreiben viel Code und lesen viel Code, und wir müssen in der Lage sein, Code zu schreiben, den andere verstehen werden. Und dafür müssen wir den Code aus dem Blickwinkel der Wahrnehmung eines anderen betrachten. Bücher wie dieses helfen. Ich empfehle es auch Anfängern. Nun, das dritte Buch ... Dies ist ein japanisches Buch über die Anordnung des Prozessors, seine Architektur bis zu den Transistoren, aus denen er besteht. Zu verstehen, wie ein Computer auf einem so niedrigen Niveau funktioniert, ist manchmal sehr nützlich, selbst wenn Probleme auf einem viel höheren Niveau gelöst werden. Ich empfehle, jedes gute Buch über Mikroprozessordesign zu lesen, auch wenn dies auf den ersten Blick nicht offensichtlich erscheint.
Was erwarten Sie von Russland und der RubyRussia- Konferenz ?
Ich war noch nie in Russland. Ich gehe davon aus, dass ich von allem viel Schönes sehen werde, zum Beispiel schöne Häuser, schöne Landschaften ... Außerdem sollte es in Russland kälter sein als in Japan. Es wird für mich interessant sein, all diese Unterschiede zwischen unseren Ländern zu sehen und zu spüren.
Cool! Ich kann Ihnen versichern, dass die Konferenz und die After-Party auch dann noch heiß sein werden, wenn es kalt ist (tatsächlich ist es Ende September bei uns nicht so kalt)!Wir warten auch auf der Konferenz auf Sie! Sie können Ihre Fragen am 28. September persönlich (und auf der legendären Afterparty :) stellen. Das Programm ist
da und das Ticket kostet jetzt 9.000 Rubel.
Vielen Dank an die Unternehmen, die
RubyRussia unterstützen :
Veranstalter -
EvroneKomplementärin -
ToptalGold Partner -
GettSilver Partners -
JetBrains und
BookmateBronze Partner -
InSales