Charles Nutter. Bagaimana cara mentransfer proyek monolitik kuno ke JRuby dan apakah itu layak?

Dalam beberapa hari, konferensi RubyRussia akan diadakan di Moskow. Tamu kami, Charles Nutter (mengerjakan dukungan JRuby dan JVM tentang Red Hat) menjawab beberapa pertanyaan.

Bagaimana Anda masuk ke dunia pemrograman dan Ruby?

Pada 2004, saya mengontrak perusahaan pemerintah sebagai arsitek Java Enterprise. Saya bekerja pada sebuah proyek untuk USDA, dan menghabiskan beberapa minggu dalam sebulan di Washington. Salah satu perjalanan ini bertepatan dengan RubyConf 2004, dan karena salah satu teman saya sudah lama merekomendasikan agar saya memperhatikan Ruby, saya memutuskan untuk pergi ke konferensi. Jadi saya berakhir di sebuah acara yang didedikasikan untuk Ruby, tidak tahu tentang bahasa ini ... tapi saya mengerti setiap kode, setiap contoh diberikan. Saya kagum dan berjanji pada diri sendiri untuk menemukan cara untuk membawa Ruby ke dunia Java saya.

Proyek apa yang sedang Anda kerjakan sekarang?

Saya adalah salah satu dari dua manajer proyek JRuby. Pekerjaan ini mencakup berbagai proyek terkait, misalnya, dukungan untuk perpustakaan asli (kami mendukung Ruby FFI di JRuby), atau konversi string (porting logika yang serupa dari CRuby). Selain itu, saya bekerja dengan komunitas untuk memastikan bahwa pengguna kami dapat selalu mendapatkan bantuan dari kami. Secara umum, pekerjaan selalu penuh!

Manakah dari proyek ini yang memiliki masa depan paling cerah?

Saya pikir ini adalah JRuby, meskipun ini bukan bahasa yang paling populer di platform JVM.
Setidaknya kami telah berkontribusi pada perubahan positif dalam JVM itu sendiri. Sebagian besar berkat kolaborasi kami dengan Sun Microsystems dan Oracle, JVM kini telah menjadi platform yang nyaman untuk banyak bahasa yang dinamis, bukan hanya Java. Saya harap kami memainkan peran penting dalam perubahan ini.

Bahasa apa yang paling sering Anda tulis? Mana yang paling Anda sukai dan mengapa?

Saya terutama menulis di Ruby dan Java, karena JRuby ditulis menggunakan keduanya. Masing-masing bahasa ini sangat cocok untuk tugasnya. Ruby - untuk membuat aplikasi yang perlu dikembangkan dan beradaptasi dengan cepat. Java - untuk menulis perpustakaan dan layanan berkecepatan tinggi dan andal. Dan JRuby menggabungkan yang terbaik dari kedua dunia!

Apakah Anda suka pemrograman di Jawa?

Ya, terutama mempertimbangkan semua peningkatan bahasa yang baru ditambahkan, seperti lambdas (penutupan atau blok di Ruby), dan sintaks baru untuk mendeklarasikan variabel lokal (var) ketika jenis statis adalah unik.

Apa pendapat Anda tentang Rust?

Karat adalah bahasa yang hebat! Di perguruan tinggi, saya banyak menggunakan C ++, tetapi saya dapat mengatakan bahwa jika saya mengenal Rust pada saat itu, saya lebih suka menulis tentang itu. Saya terutama menyukai model kepemilikan yang diketik-statis, yang memungkinkan kami untuk menulis program paralel yang stabil, dan menjamin akses yang aman ke memori. Saya pikir bahasa lain harus mengadopsi ini di masa depan.

Apa pendapat Anda tentang prospek Ruby? Selama bertahun-tahun, banyak orang percaya bahwa bahasa dan komunitasnya "mati" ...

Setelah bertahun-tahun bekerja di JRuby, saya jatuh cinta dengan sintaks Ruby, dan cara kerjanya. Tapi, saya khawatir masalah kinerja benar-benar ada dan penting. JRuby sedang berjuang untuk membuat thread paralel menjadi kenyataan bagi pengembang Ruby, tetapi sejauh ini, sebagian besar layanan Ruby menggunakan beberapa proses yang terisolasi, membuang banyak sumber daya CPU dan memori. Saya pikir ini karena API C yang terlalu besar dan invasif untuk menulis ekstensi Ruby, yang tidak memungkinkan implementasi perbaikan seperti utas paralel.
Tapi saya tidak kehilangan harapan bahwa suatu hari kita masih akan melihat perubahan.

Manakah dari fitur Ruby yang kurang populer yang harus Anda pertimbangkan di masa depan?

Saya berharap string menjadi tidak dapat diubah secara default, seperti halnya di sebagian besar bahasa lainnya. Pemrograman bersamaan akan jauh lebih sederhana jika lebih banyak objek Ruby dapat dibuat sangat beku. Ini mungkin menyerupai model yang digunakan dalam Rust ... jika Anda berbagi objek dalam stream, Anda harus memilih versi objek yang tidak akan dimodifikasi secara tepat. Ini meluas ke array, hash, dan hampir semua objek yang bisa berubah di Ruby: kita perlu menyederhanakan pemblokiran perubahan data.

Saya memiliki proyek Ruby monolitik tua yang besar. Saya bertanya-tanya apakah saya bisa menerjemahkannya ke JRuby. Bagaimana ini bisa dilakukan, dan apakah itu masuk akal?

Faktanya, pertanyaan pertama adalah apakah langkah ini akan membantu Anda.
Argumen penting untuk beralih ke JRuby dapat berupa:

  • Mengurangi biaya sumber daya ketika ada kekurangan, misalnya, jika beberapa aplikasi di-host di server yang sama
  • Menyebarkan aplikasi Ruby di lingkungan JVM-berat yang digunakan oleh organisasi keuangan dan pemerintah besar
  • Kebutuhan untuk mengakses perpustakaan yang hanya ada di Jawa, atau yang lebih mudah untuk port ke JVM, daripada yang setara di Ruby atau C
  • Sedikit peningkatan kinerja dalam aplikasi dengan komputasi berat (yang memuat prosesor) atau dengan sejumlah besar tugas paralel.

Saya akan mengatakan bahwa jika aplikasi berskala baik dan tidak memerlukan biaya terlalu banyak, maka mungkin Anda tidak perlu melakukan apa pun. Tetapi jika Anda memutuskan untuk mendapatkan lebih banyak dari Ruby, maka inilah proses migrasi:

  • Kumpulkan semua perpustakaan pihak ketiga yang digunakan aplikasi Anda.
  • Sorot di antara mereka yang menggunakan ekstensi-C.
  • Temukan setara JRuby untuk setiap ekstensi. Kami punya beberapa
  • halaman di wiki JRuby tentang ini. Sebagian besar perpustakaan populer memiliki versi JRuby. Jika tidak ada versi JRuby, maka Anda dapat menggunakan versi Ruby murni (itu akan cukup cepat di JRuby) atau pustaka JVM (di Jawa, Scala, Clojure, dll.), Yang dapat digunakan sebagai pengganti.
  • Segera setelah semua permata Anda diperoleh di JRuby, seluruh aplikasi akan bekerja! Kami memperhatikan kompatibilitas dan mencoba mempertimbangkan masalah baru yang diperhatikan oleh pengguna kami. Karena itu, dengan probabilitas tinggi, jika Anda memiliki bundel di JRuby, aplikasi akan berfungsi.

Nah, kemudian bagian yang paling sulit dimulai - apa yang harus dilakukan dengan sumber daya yang dibebaskan. Berapa banyak utas untuk memparalelkan aplikasi, cara menghabiskan uang yang dihemat ... :)

Apa yang perlu diketahui siswa untuk menjadi programmer yang baik?

Ketika saya masih di universitas, kursus ilmu komputer saya mengajarkan Skema, bahasa fungsional seperti Lisp yang bagus untuk mempelajari dasar-dasar pemrograman. Saya masih merekomendasikan pemrogram pemula untuk mempelajari setidaknya bagian dari buku Struktur dan Interpretasi Program Komputer, yang diterbitkan oleh Massachusetts Institute of Technology (MIT). Secara umum, semakin banyak bahasa yang Anda kenal, semakin baik. Ini memberikan ide-ide baru, dan memungkinkan Anda melihat solusi untuk masalah Anda dari berbagai sudut.

Di mana Anda mendapatkan motivasi untuk bekerja? Apakah Anda menghadapi masalah kelelahan profesional?

Burnout adalah masalah nyata di industri kami. Terutama bekerja di open source
Ini membawa banyak stres. Saya pikir ini terjadi pada semua orang ... ketika ada terlalu banyak pekerjaan, Anda tidak punya waktu untuk melakukan segalanya, Anda mengorbankan waktu bersama keluarga dan teman-teman, Anda melupakan kesehatan Anda untuk memperbaiki bug biasa lainnya. Untuk mengatasi ini, saya mencoba untuk fokus pada hobi: bermain komputer dan bermain papan, belajar bermain gitar,
belajar bahasa asing dan berkeliling dunia, bertemu orang baru. Seorang pecandu kerja yang menggerutu akan selalu hidup di dalam saya, membujuk saya untuk kembali bekerja, tetapi saya masih berusaha mempertahankan keseimbangan yang tepat.

Apa pendapat Anda tentang Rusia dan apa yang Anda harapkan dari acara RubyRussia yang akan datang?

Saya suka Rusia, dan semua perjalanan saya ke konferensi di sini selama beberapa tahun terakhir sangat berguna. Ini akan menjadi kunjungan keempat saya, sebelumnya saya berada di St. Petersburg, Moskow dan bahkan di Novosibirsk (!!!). Saya berharap untuk kembali ke Moskow dan bertemu dengan komunitas Ruby Rusia, yang telah saya dengar banyak tentang.

Pertanyaan disiapkan oleh Dmitry Matveev , PM di Evrone . Dan Anda sudah bisa mengajukan pertanyaan pada 6 Oktober. Sampai jumpa di konferensi! Semua detail di situs .

Anda dapat membaca aslinya dalam bahasa Inggris di hype.codes .

Dan banyak terima kasih kepada perusahaan yang mendukung acara Ruby utama di Rusia:

Mitra Umum - Toptal
Mitra Emas - Gett dan Cookpad
Mitra perak - Instamart , UCHi.ru , JetBrains , dan Qlean
Mitra setelah pesta - Teachbase
Mitra Perunggu - Bookmate dan InSales

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


All Articles