Charles Nutter. Wie übertrage ich ein altes monolithisches Projekt auf JRuby und lohnt es sich?

In ein paar Tagen wird die RubyRussia- Konferenz in Moskau stattfinden. Unser Gast Charles Nutter (arbeitet an JRuby- und JVM-Support für Red Hat) beantwortete einige Fragen.

Wie bist du in die Welt des Programmierens und von Ruby gekommen?

2004 habe ich als Java Enterprise-Architekt eine Regierungsfirma unter Vertrag genommen. Ich arbeitete an einem Projekt für das USDA und verbrachte ein paar Wochen im Monat in Washington. Eine dieser Reisen fiel mit RubyConf 2004 zusammen, und da einer meiner Freunde mir lange empfohlen hatte, auf Ruby zu achten, beschloss ich, zur Konferenz zu gehen. So kam ich zu einer Veranstaltung, die Ruby gewidmet war und keine Ahnung von dieser Sprache hatte ... aber ich verstand jeden Code, jedes gegebene Beispiel. Ich war erstaunt und versprach mir, einen Weg zu finden, Ruby in meine Java-Welt zu bringen.

An welchen Projekten arbeiten Sie gerade?

Ich bin einer von zwei JRuby-Projektmanagern. Diese Arbeit umfasst verschiedene verwandte Projekte, z. B. Unterstützung für native Bibliotheken (wir unterstützen Ruby FFI auf JRuby) oder Zeichenfolgenkonvertierung (Portierung ähnlicher Logik von CRuby). Außerdem arbeite ich mit der Community zusammen, um sicherzustellen, dass unsere Benutzer immer Hilfe von uns erhalten können. Im Allgemeinen ist die Arbeit immer voll!

Welches dieser Projekte hat die beste Zukunft?

Ich denke, dies ist JRuby, obwohl dies nicht die beliebteste Sprache auf der JVM-Plattform ist.
Zumindest haben wir zu den positiven Veränderungen in der JVM selbst beigetragen. Vor allem dank unserer Zusammenarbeit mit Sun Microsystems und Oracle ist die JVM jetzt eine bequeme Plattform für viele dynamische Sprachen, nicht nur für Java. Ich hoffe, dass wir bei dieser Veränderung eine wichtige Rolle gespielt haben.

Welche Sprachen schreibst du am häufigsten? Welches magst du am liebsten und warum?

Ich schreibe hauptsächlich in Ruby und Java, da JRuby mit beiden geschrieben ist. Jede dieser Sprachen ist für ihre Aufgaben gut geeignet. Ruby - zum Erstellen von Anwendungen, die schnell entwickelt und angepasst werden müssen. Java - zum Schreiben von schnellen und zuverlässigen Bibliotheken und Diensten. Und JRuby vereint das Beste aus beiden Welten!

Programmieren Sie gerne in Java?

Ja, insbesondere unter Berücksichtigung aller kürzlich hinzugefügten Sprachverbesserungen wie Lambdas (Abschlüsse oder Blöcke in Ruby) und der neuen Syntax zum Deklarieren lokaler Variablen (var), wenn der statische Typ eindeutig ist.

Was denkst du über Rust?

Rost ist eine großartige Sprache! Im College habe ich viel C ++ verwendet, aber ich kann definitiv sagen, dass ich lieber darüber schreiben würde, wenn ich Rust zu dieser Zeit kennen würde. Besonders gut gefällt mir das statisch typisierte Eigentumsmodell, mit dem wir stabile parallele Programme schreiben und einen sicheren Zugriff auf den Speicher gewährleisten können. Ich denke, andere Sprachen sollten dies in Zukunft übernehmen.

Was denkst du über die Aussichten für Ruby? Viele Menschen glauben seit vielen Jahren, dass Sprache und ihre Gemeinschaft "sterben" ...

Nachdem ich viele Jahre an JRuby gearbeitet hatte, verliebte ich mich in die Ruby-Syntax und deren Funktionsweise. Ich befürchte jedoch, dass das Leistungsproblem wirklich besteht und wichtig ist. JRuby bemüht sich, parallele Threads für Ruby-Entwickler Wirklichkeit werden zu lassen. Bisher verwendet die überwiegende Mehrheit der Ruby-Dienste mehrere isolierte Prozesse und verbraucht eine große Menge an CPU- und Speicherressourcen. Ich denke, dies liegt an der zu großen und invasiven C-API zum Schreiben von Ruby-Erweiterungen, die die Implementierung von Verbesserungen wie parallelen Threads nicht zulässt.
Aber ich verliere nicht die Hoffnung, dass wir eines Tages noch Veränderungen sehen werden.

Welche der weniger beliebten Ruby-Funktionen sollten Sie in Zukunft in Betracht ziehen?

Ich freue mich darauf, dass Zeichenfolgen standardmäßig unveränderlich werden, wie dies in den meisten anderen Sprachen der Fall ist. Die gleichzeitige Programmierung wäre viel einfacher, wenn mehr Ruby-Objekte tief eingefroren werden könnten. Es ähnelt möglicherweise dem in Rust verwendeten Modell. Wenn Sie ein Objekt in Streams freigeben, sollten Sie die Version des Objekts auswählen, die nicht genau geändert wird. Dies erstreckt sich auf Arrays, Hashes und fast jedes andere veränderbare Objekt in Ruby: Wir müssen das Blockieren von Datenänderungen vereinfachen.

Ich habe ein großes altes monolithisches Ruby-Projekt. Ich fragte mich, ob ich es in JRuby übersetzen könnte. Wie könnte das gemacht werden und macht es überhaupt Sinn?

Die erste Frage ist in der Tat, ob dieser Schritt Ihnen helfen wird.
Wichtige Argumente für den Wechsel zu JRuby könnten sein:

  • Reduzierung der Ressourcenkosten, wenn ein Nachteil vorliegt, z. B. wenn mehrere Anwendungen gleichzeitig auf demselben Server gehostet werden
  • Bereitstellung einer Ruby-Anwendung in einer JVM-lastigen Umgebung, die von großen Finanz- und Regierungsorganisationen verwendet wird
  • Die Notwendigkeit, auf Bibliotheken zuzugreifen, die nur in Java vorhanden sind oder die einfacher auf die JVM zu portieren sind, als ihre Entsprechungen in Ruby oder C.
  • Eine leichte Leistungssteigerung bei Anwendungen mit starker Rechenleistung (die den Prozessor belasten) oder mit einer großen Anzahl paralleler Aufgaben.

Ich würde sagen, wenn die Anwendung gut skaliert und Sie nicht zu viel kostet, sollten Sie vielleicht nichts tun. Wenn Sie sich jedoch dazu entschließen, mehr aus Ruby herauszuholen, ist hier der Migrationsprozess:

  • Stellen Sie alle Bibliotheken von Drittanbietern zusammen, die Ihre Anwendung verwendet.
  • Markieren Sie unter ihnen diejenigen, die C-Erweiterungen verwenden.
  • Finden Sie für jede Erweiterung das Äquivalent von JRuby. Wir haben mehrere
  • Seiten im JRuby-Wiki dazu. Die meisten gängigen Bibliotheken haben JRuby-Versionen. Wenn es keine JRuby-Version gibt, können Sie eine reine Ruby-Version (diese ist in JRuby schnell genug) oder JVM-Bibliotheken (in Java, Scala, Clojure usw.) verwenden, die als Ersatz verwendet werden können.
  • Sobald alle Ihre Edelsteine ​​auf JRuby verdient haben, funktioniert die gesamte Anwendung! Wir legen großen Wert auf Kompatibilität und versuchen, die neuen Probleme zu berücksichtigen, auf die unsere Benutzer achten. Daher funktioniert die Anwendung mit hoher Wahrscheinlichkeit, wenn Sie ein Bundle auf JRuby haben.

Nun, dann beginnt der schwierigste Teil - was mit den freigesetzten Ressourcen zu tun ist. Wie viele Threads, um die Anwendung zu parallelisieren, wie man das eingesparte Geld ausgibt ... :)

Was müssen Schüler wissen, um gute Programmierer zu werden?

Als ich an der Universität war, unterrichteten meine Informatikkurse Scheme, eine funktionale Sprache wie Lisp, die sich hervorragend zum Erlernen der Grundlagen des Programmierens eignet. Ich empfehle unerfahrenen Programmierern weiterhin, zumindest einen Teil des vom Massachusetts Institute of Technology (MIT) veröffentlichten Buches Struktur und Interpretation von Computerprogrammen zu studieren. Im Allgemeinen ist es umso besser, je mehr verschiedene Sprachen Sie kennen. Dies gibt neue Ideen und ermöglicht es Ihnen, die Lösung Ihrer Probleme aus verschiedenen Blickwinkeln zu betrachten.

Woher bekommst du Motivation zur Arbeit? Haben Sie sich dem Problem des professionellen Burnouts gestellt?

Burnout ist ein echtes Problem in unserer Branche. Besonders in Open Source arbeiten
Es bringt viel Stress. Ich denke, das ist allen passiert ... Wenn es zu viel Arbeit gibt, haben Sie nicht die Zeit, alles zu tun, Sie opfern Zeit mit Familie und Freunden, Sie vergessen Ihre Gesundheit, um einen weiteren regelmäßigen Fehler zu beheben. Um dem entgegenzuwirken, versuche ich mich auf ein Hobby zu konzentrieren: Computer- und Brettspiele spielen, Gitarre spielen lernen,
Fremdsprachen lernen und die Welt bereisen, neue Leute kennenlernen. Ein murrender Workaholic wird immer in mir leben und mich überreden, zur Arbeit zurückzukehren, aber ich versuche immer noch, das richtige Gleichgewicht zu halten.

Was ist Ihre Meinung zu Russland und was erwarten Sie von der bevorstehenden RubyRussia-Veranstaltung?

Ich liebe Russland und alle meine Reisen zur Konferenz hier in den letzten Jahren waren sehr nützlich. Dies ist mein vierter Besuch, zuvor war ich in St. Petersburg, Moskau und sogar in Nowosibirsk (!!!). Ich freue mich darauf, nach Moskau zurückzukehren und mich mit der russischen Ruby-Community zu treffen, von der ich viel gehört habe.

Die Fragen wurden von Dmitry Matveev , PM bei Evrone , vorbereitet . Und Sie können Ihre Frage bereits am 6. Oktober stellen. Wir sehen uns also auf der Konferenz! Alle Details auf der Website .

Sie können das Original in englischer Sprache unter hype.codes lesen .

Und vielen Dank an die Unternehmen, die das Ruby-Hauptereignis in Russland unterstützen:

Komplementärin - Toptal
Gold Partner - Gett und Cookpad
Silberpartner - Instamart , UCHi.ru , JetBrains und Qlean
Afterparty- Partner - Teachbase
Bronze Partner - Bookmate und InSales

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


All Articles