Saya bergabung dengan komunitas Erlang sekitar 10 tahun yang lalu, di tengah fase pertama hype. Kami diberitahu bahwa Erlang adalah masa depan kompetisi dan konkurensi. Menerapkannya dalam bahasa ini adalah yang termudah dan tercepat, dan Anda masih mendapatkan distribusi gratis. Pada saat itu, masa depan tampak sulit dipercaya. Mesin virtual baru-baru ini menerima dukungan
SMP , tetapi untuk benar-benar menggunakan semua prosesor, Anda harus menjalankan beberapa mesin virtual di komputer yang sama.
Saya ingin merenungkan dekade terakhir. Dalam artikel ini saya akan berbicara tentang fase hype tentang Erlang, tentang
tangga ide dalam bahasa dan tentang kemungkinan dampaknya pada distribusi bahasa, tentang perubahan apa yang saya alami selama 10 tahun ini. Sebagai kesimpulan, saya akan membagikan pemikiran saya tentang apa yang belum dibawa Erlang ke komunitas programmer secara keseluruhan.
Fase sensasi
Siklus sensasi terdiri dari fase-fase siklus hidup suatu produk atau teknologi. Ini adalah konsep pemasaran, bukan konsep ilmiah, tetapi sering membantu dalam menggambarkan esensi dari apa yang terjadi. Yang paling menarik minat saya adalah
fase hype , semacam demam emas yang meliputi komunitas programmer. Mungkin Anda telah menemukan ini lebih dari sekali, dan semua fase ini terhubung dengan beberapa aplikasi pembunuh yang semua orang bergegas untuk menggunakannya.
Contoh-contoh yang langsung muncul di benak saya adalah Ruby on Rails,
Cara Membangun Mesin Blog dalam 15 menit (frasa
"Lihat semua yang tidak saya lakukan!" kemudian ada gelombang langsung). Ini termasuk Elixir dan Phoenix.
Selama fase hype, ada gelombang luar biasa dari pendatang baru yang ingin melihat apa yang terjadi. Seseorang tetap, sebagian besar pergi. Anda dapat tinggal selama berbulan-bulan atau bertahun-tahun, dalam kasus yang jarang Anda menemukan diri Anda rumah selama beberapa dekade. Namun, sebagian besar adalah aliran konstan orang serial yang melompat dari teknologi ke teknologi, mencari peluang untuk mendapatkan manfaat dari fakta bahwa mereka adalah orang pertama yang menggunakan kerangka kerja, bahasa atau toolkit.
Jadi, paling sering Anda perlu membuat satu "aplikasi pembunuh" nyata, dan orang-orang akan menjangkau ekosistem Anda. Aplikasi pembunuh memacu kegembiraan. Jika Anda menulisnya, mereka akan mendatangi Anda. Dan jika Anda dapat menjaga sebagian kecil dari mereka dan tetap aktif, maka Anda akan memiliki komunitas yang bersemangat untuk masa mendatang. Ini agak mengingatkan kita pada ide
hujan mengikuti bajak :
Tuhan menggerakkan bajak ... Setelah adaptasi yang luar biasa ini, yang merupakan satu-satunya penguasaan manusia atas alam, awan menyiram hujan lebat ... [bajak] adalah alat yang memisahkan peradaban dari barbarisme, mengubah gurun menjadi ladang dan kebun. ... Singkatnya, hujan mengikuti bajak.Inti dari teori ini adalah bahwa tempat tinggal manusia dan pertanian memiliki dampak yang tidak dapat diubah pada iklim daerah kering dan semi-kering, membuat daerah ini lebih lembab. Teori ini menyebar luas pada tahun 1870-an sebagai pembenaran untuk pemukiman Great Plains, sebuah wilayah yang sebelumnya dikenal sebagai Gurun Amerika Hebat. Pada tahun-tahun itu, teori ini digunakan untuk membenarkan ekspansi tanaman gandum di tanah marginal di Australia Selatan.
Jika kita dapat meluncurkan proyek besar, maka pengembang akan muncul, dan itu akan menjadi mandiri. Saya pikir ide ini jelas salah, terutama karena Erlang memiliki puluhan aplikasi pembunuh selama fase hype terbesar, tetapi komunitasnya masih kecil. Berikut adalah contoh aplikasi ini:
- ejabberd (2002, rilis stabil pertama pada tahun 2005): itu adalah salah satu yang paling, jika bukan server obrolan yang paling terukur. Ejabberd telah mencapai sukses besar, dan sampai batas tertentu itu masih relevan. Hari ini di StackOverflow masih ada pertanyaan tentang modul untuk server ini. Sekitar 2011, ia bercabang ke MongooseIM , dan kedua solusi masih didukung.
- CouchDB (2005): salah satu database paling populer yang ditulis dalam Erlang, yang didasarkan pada teorema CAP . Ini mengacu pada waktu munculnya repositori multimaster. Meskipun MongoDB mengambil sebagian besar pasar, CouchDB memiliki penerus spiritual di antara mesin penyimpanan seperti BarrelDB , yang masih didukung.
- RabbitMQ (2007): server antrian pesan yang menghancurkan sebagian besar pasar AMQP. Ini berkembang dan sering bersaing dengan Kafka ketika datang ke beban streaming, meskipun produk ini memiliki kemampuan dan aplikasi yang berbeda.
- Obrolan Facebook (2008): Versi awal Obrolan Facebook ditulis dalam bahasa Erlang. Untuk sejumlah alasan internal (stabilitas, sejumlah besar programmer C ++ dan sejumlah solusi yang ada) kemudian ditulis ulang dalam C ++.
- WhatsApp (2009, dibeli pada 2014): ketika Facebook menyingkirkan sistem obrolan Erlang, mereka membeli WhatsApp, yang hanya membutuhkan 50 insinyur untuk 900 juta pengguna untuk mendukung. Dia hidup sampai hari ini, dan terlebih lagi, tim WhatsApp telah semakin memperkuat hubungan dengan komunitas Erlang dan Elixir.
- Riak (2009): Salah satu contoh terbaik menunjukkan kekuatan di dunia sistem terdistribusi. Riak adalah penyimpanan terdistribusi yang dapat diandalkan dari tipe nilai kunci. Ini adalah produk Basho yang masih berfungsi dalam sistem perawatan kesehatan dan bagian infrastruktur penting lainnya. Kemudian Basho bangkrut (sebagian besar karena pelanggaran tugas fidusia , yang "dengan kecepatan penuh menyebabkan perusahaan runtuh" ). Kemudian Bet365 membeli semua IP mereka, dengan murah hati membukanya, dan sejak itu basis data telah hidup di dunia sumber terbuka, meskipun hari ini ia mengalami masa-masa sulit.
Banyak dari produk-produk ini dirilis selama jangka pertama dari buku
Programming Erlang karya Joe Armstrong. Akibatnya, ledakan popularitas bahasa muncul, dan Erlang mendapatkan banyak pengagum. Dampak signifikannya adalah fakta bahwa
Hacker News memaksa semua diskusi tentang Innards of Erlang . Namun, sedikit yang tetap setia pada bahasa ini.
Sekarang saya percaya bahwa aplikasi pembunuh dibuat oleh orang-orang yang membentuk fase awal hype, dan bukan sebaliknya. Selalu ada sebagian kecil orang yang mencari teknologi menarik sebelum yang lain, memutuskan apakah mereka menyukainya, lalu menciptakan sesuatu, dan jika Anda mendapatkan aplikasi pembunuh, ini merangsang pengembangan fase sensasi yang bahkan lebih kuat. Orang akan terlibat dalam kultus kargo, dan proyek yang berhasil akan menghasilkan peniru. Juga, situasi standar adalah fase “penemuan roda”, ketika semua orang menghabiskan waktu mereka untuk menemukan kembali hal-hal yang ada, dan ada gelombang pesan tentang “implementasi
X, tetapi dalam bahasa Y”.
Namun, membuat aplikasi pembunuh saja tidak cukup. Anehnya, semua produk ini, seperti RabbitMQ dan Ejabberd, terlepas dari popularitasnya, memiliki komunitas pengguna yang jauh lebih besar daripada komunitas pengembang. Ribuan dan ribuan perusahaan yang menggunakan produk-produk ini tidak serta merta memberikan kontribusi yang signifikan bagi komunitas Erlang.
Ini sebagian disebabkan oleh kenyataan bahwa sebagian besar aplikasi Erlang pembunuh digunakan dalam infrastruktur khusus. Anda telah membuat komponen yang sangat andal dalam bentuk kotak hitam yang digunakan semua orang, dan jika itu berfungsi dengan baik, maka tidak ada yang akan melihat ke dalam. Beberapa lusin pengembang telah memberikan landasan bagi ribuan produk dan layanan lainnya. Infrastruktur khusus, menurut definisi, tidak memerlukan banyak orang untuk memastikan dampaknya yang luas. Itu selalu memiliki beberapa pengembang dan komunitas kecil dibandingkan dengan teknologi yang lebih dekat dengan produk akhir, misalnya, kerangka kerja web, atau bahkan lebih banyak infrastruktur umum yang digunakan dalam proyek penyebaran kecil yang cocok untuk perusahaan mana pun.
Tetapi bahkan dengan semua ini, jelas bahwa Erlang melewatkan banyak orang yang melewatinya selama fase hype.
Tangga ide
Saya tidak akan
mengomel tentang apa yang bisa atau seharusnya dilakukan. Alih-alih, saya ingin berbicara tentang pola pembelajaran populer yang saya temui di komunitas Erlang selama bertahun-tahun dalam pengajaran dan pemrograman bahasa ini. Saya mengamati pola yang sama hari ini di komunitas Elixir, dan ini mungkin mengindikasikan masa depan yang serupa baginya.
Saya punya teori bahwa topik teknis seperti bahasa pemrograman (dan ekosistemnya) memiliki beberapa tingkat kompleksitas di mana konsep yang berbeda berada. Saya menggunakan teori ini dalam proyek
Learn You Some Erlang . Ini disajikan dalam diagram, yang saya sebut
lingkaran Sembilan Earl .
Tentu saja, ini adalah ide yang ironis, saya tidak berpikir bahwa studi tentang teknologi adalah penderitaan tanpa akhir (setidaknya tidak seharusnya demikian). Saya hanya suka permainan kata-kata. Sederhananya, selalu ada semacam jalur atau urutan "utama" dari yang Anda pelajari ketika mempelajari teknologi - ini adalah "tangga ide", dan semakin tinggi konsepnya berada di tangga ini, semakin berharga dan semakin sulit untuk dicapai, semakin sedikit orang kenal dia.
Seperti apa tampilan tangga ide di Erlang:
- Pemrograman fungsional.
- Proses dan daya saing yang terisolasi.
- Daya saing yang andal (tautan, monitor, batas waktu).
- Prinsip OTP dan abstraksi sistem lainnya.
- Cara menyusun sistem sesuai dengan prinsip-prinsip OTP.
- Cara mengumpulkan rilis dan bekerja dengannya (penyebaran).
- Bagaimana mencegah crash sistem dan bekerja dengannya.
Jika Anda baru mengenal Erlang dan membeli buku untuk pemula, maka Anda mungkin menghabiskan hari-hari pertama pada langkah pertama tangga: membiasakan diri dengan pemrograman fungsional, kekekalan (kekekalan), rekursi, dan konsep serupa lainnya. Cepat atau lambat Anda akan mendapatkan daya saing dan paralelisme, proses, dan pengiriman pesan. Segera setelah mereka, Anda akan mulai belajar tentang tautan dan monitor, menangani kegagalan, dan apa yang dilakukan Erlang. Selama fase hype besar, langkah kedua dan ketiga berisi peluang yang bagi sebagian besar pengamat tampak sangat sulit dipercaya. Jika Anda perlu mempelajari sesuatu yang akan Anda gunakan di semua proyek masa depan, maka Anda dapat memilih salah satu fitur Erlang ini.
Anda bisa naik ke langkah lain nanti, tetapi hanya jika Anda mengikuti program pelatihan langkah demi langkah. Secara khusus, OTP (tahap keempat) dapat digambarkan sebagai "apa itu semua tentang." Daya saing dan pemrograman fungsional bagus, tetapi kerangka keseluruhan yang disajikan dengan OTP benar-benar unik dan perlu digunakan. Seiring waktu, banyak yang akan bekerja dengannya, menemukan bahwa mereka dapat membuat abstraksi keren, tetapi mereka tidak akan menyukai pendekatan penataan.
Bahkan, untuk membuat aplikasi seperti Ejabberd sudah cukup untuk mengatasi langkah keempat. Pada masa itu, ekosistem menyerupai Wild West, dan pengetahuan tentang OTP dimiliki oleh para spesialis yang bekerja di Ericsson, serta otodidak yang paling termotivasi. Sebagian besar tidak pernah mencapai tahap kelima, kecuali mereka mengirim sesuatu untuk produksi dan kemudian menemui masalah, atau jika mereka tidak mencari solusi yang lebih baik. Pencapaian langkah keenam jarang terjadi hingga 2015-2016, dan kemudian
Relx muncul, yang menyederhanakan perakitan rilis dan pengembangannya. Hampir tidak ada yang mencapai langkah ketujuh, dan banyak orang berpikir bahwa mereka seharusnya tidak melakukan pembaruan terbaru dari node Erlang, dan, idealnya, Anda tidak perlu menggunakan SSH untuk debugging dalam produksi.
Dalam praktiknya, tidak semua orang naik tangga ide dalam urutan yang sama; langkah-langkahnya dalam beberapa buku dibalik (misalnya, dalam
Erlang dan OTP dalam Aksi ). Tidak ada yang salah dengan itu, tangga diciptakan hanya sebagai ilustrasi.
Ukuran komunitas berubah dalam gelombang. Selama fase hype, ukuran untuk beberapa waktu dapat meningkat puluhan atau ratusan kali, dan semua orang ini akan penasaran dan pergi. Sebagian besar peserta duduk di tangga pertama dan jarang meninggalkannya. Beberapa naik ke tahap kedua, bahkan kurang ke tahap ketiga, dan seterusnya, sampai Anda mencapai lingkaran sempit para ahli di tingkat tertinggi.
Saya pikir memanjat tiga langkah pertama Erlang itu mudah. Untuk naik ke yang keempat, perlu dikembangkan selama beberapa tahun, dan memang untuk merasakan perlunya studi lebih lanjut. Pada langkah kelima sudah sangat sulit. Toolkit dan ekosistem Erlang buruk. Anggota masyarakat mengalami lingkungan tandus ini, dan acuh tak acuh terhadap nasib pendatang baru. Untuk membuat artikel ini lebih pendek (yah, panjang, tapi tidak terlalu panjang), lihat pembicaraan saya tentang ekosistem bahasa di Konferensi Pengguna Erlang:
Jika Anda menulis di Elixir, maka Anda mungkin melihat pada langkah apa dari tangga buatan ini Anda berdiri, dan Anda sudah bisa membayangkan dalam proporsi apa masyarakat didistribusikan di atasnya. Banyak peserta fasih di Phoenix saja, tetapi jarang naik di atas langkah keempat, dan banyak yang terjebak di ketiga dan lebih rendah. Dan seringkali ini sudah cukup. Saya tidak menyalahkan, tetapi hanya berbagi pengamatan. Seperti orang yang telah menaiki banyak langkah (dan mungkin ada beberapa langkah lagi di depan saya, seperti "menambal mesin virtual" atau sesuatu yang lain), saya melihat bahwa orang-orang ini tidak tahu banyak. Tapi jujur, semua informasi ini mungkin tidak berguna bagi mereka. Dan itu bagus.
Apa yang ingin saya katakan: Saya percaya bahwa kita, sebagai sebuah komunitas, mungkin menggerutu di bawah kita, membuat tangga ide sangat sulit untuk dikuasai di atas tingkat dasar. Beberapa topik perlu dipelajari perlahan, dan dalam beberapa topik, orang buta menuntun orang buta karena Erlang sangat kecil sehingga kita hanya memiliki sedikit orang yang dapat berbagi semua pengalaman yang diperlukan. Hari ini lebih sederhana, dan jika Anda tidak datang ke Erlang dalam fase hype, Anda mungkin akan mendapatkan bantuan, karena lebih sedikit orang yang memintanya pada saat yang sama.
Saya ingin berpikir bahwa jika hype tahap kedua dimulai di dunia Erlang besok, maka kita akan dapat menerima pendatang baru lebih baik daripada selama gelombang besar, ketika saya datang. Dan saya berharap pengalaman ini, ditambah dengan kolaborasi yang lebih erat antara komunitas Erlang dan Elixir, akan menggandakan peluang kita untuk berhasil memperluas penggunaan bahasa-bahasa ini.
Apa yang telah berubah?
Erlang tidak berenang di termos, menunggu sampai ditarik ke dalam cahaya. Itu terus berkembang. Ini sebagian karena kompetisi dan saran dari komunitas Elixir, yang, untungnya, mengharapkan lebih banyak dari alat-alatnya daripada yang digunakan pengguna Erlang. Dan sebagian perkembangannya ditentukan oleh kebutuhan mendesak industri dan keinginan komunitas akademik.
Saya pikir seseorang akan senang dengan perubahan ini yang telah terjadi sejak 2009 atau bahkan lebih awal:
- Dukungan multi-core sekarang berfungsi dengan baik. Sebelumnya, jika ada lebih dari 2-4 core, sistem bersandar pada semua jenis kemacetan yang tidak tunduk pada pengembang aplikasi. Kemudian menjadi mungkin untuk menggunakan 12-16 core. Hari ini saya bahkan tidak tahu apa batas atas, tetapi saya menulis dan mengelola tumpukan yang bekerja pada lebih dari 32 core tanpa masalah.
- Jejak tumpukan sekarang memiliki nomor baris. Hampir tidak terpikirkan untuk kembali ke masa lalu, sebelum angkanya muncul. Pada tahun-tahun itu, "menulis fungsi-fungsi pendek yang didokumentasikan sendiri" bukanlah masalah arsitektur, tetapi tentang kelangsungan hidup. Anda sekarang dapat men-debug program Erlang tanpa keterampilan debugging supernatural, meskipun mereka tidak akan pernah sakit.
- Kualitas dukungan Unicode saat ini dapat diterima. Modul string berisi algoritma yang paling penting, dan modul unicode melakukan pekerjaan yang sangat baik dengan sebagian besar jenis transformasi dan normalisasi. Ada pendekatan khas untuk bekerja dengan titik kode, UTF-8, UTF-16, dan UTF-32. Dukungan lokal masih menyisakan banyak yang diinginkan, tetapi yang lainnya operasional. Modul seperti re (modul untuk bekerja dengan ekspresi reguler) dan semua fungsi tingkat tinggi untuk bekerja dengan file juga tidak memiliki masalah ketika bekerja dengan Unicode.
- Peta (diimplementasikan sebagai HAMT ) dengan sintaks pencocokan pola eksplisit didukung . Dengan bantuan analisis jenis Dialyzer diterapkan pada mereka, yang memungkinkan mereka untuk digunakan dalam kasus-kasus di mana sebelumnya penggunaan catatan membutuhkan banyak upaya.
- Mesin virtual sekarang menggunakan mekanisme yang sangat baik untuk bekerja dengan waktu , mereka mengatasi perubahan skala waktu, berbagai jenis jam dan banyak lagi. Namun, bekerja dengan zona waktu dan format waktu lebih baik dengan bantuan perpustakaan yang dikembangkan oleh komunitas.
- Alat berkinerja tinggi seperti atom , penghitung, dan istilah persisten telah ditambahkan untuk membantu meningkatkan berbagai mekanisme yang mendasari alat pengawasan dan perpustakaan pangkalan tingkat rendah.
- Semua pemrosesan sinyal menjadi tidak sinkron , termasuk bekerja dengan port , yang menyelamatkan kami dari banyak kemacetan.
- Kompiler telah ditulis ulang dan masih ditulis ulang untuk meningkatkan analisis dan kinerja tingkat tinggi menggunakan SSA.
- Jenis penjadwal khusus untuk digunakan dalam NIF telah muncul - penjadwal kotor, yang menyederhanakan integrasi dengan kode yang ditulis dalam huruf c atau bahkan karat, mendukung proses intensif CPU dan I / O. Jadi meskipun bahasa itu sendiri tidak menjadi jauh lebih cepat (meskipun ada kemajuan), telah menjadi jauh lebih mudah untuk menghubungkan perpustakaan berkinerja tinggi tanpa terlalu memengaruhi stabilitas mesin virtual.
- Berbagai perbaikan telah dilakukan pada mekanisme untuk mengalokasikan dan mengelola memori.
- Analisis program menjadi lebih akurat dan lebih cepat berkat pelacakan dan akuntansi yang lebih cepat dan lebih fleksibel untuk kondisi mikro .
- Perilaku OTP yang lebih fleksibel dari gen_statem memungkinkan penerapan mesin negara terbatas yang dapat memproses input data secara selektif.
- Kerangka kerja logging yang baru dan lebih baik dengan dukungan bawaan untuk log terstruktur.
- Modul crypto ditulis ulang dan menggunakan NIF alih-alih driver yang lebih kompleks (dan sering lambat diperbarui).
- Driver file sepenuhnya ditulis ulang menggunakan NIF, yang sangat meningkatkan kinerja.
- Untuk mencapai kinerja yang sama, mereka terus menulis ulang driver jaringan menggunakan NIF.
- Benar-benar mendesain ulang penggunaan SSL untuk pemrosesan TLS. Ketika saya bekerja di Heroku, kami mencoba membuat produk tersebut sebanding dengan solusi C ++ dalam hal keterlambatan (mungkin 5 persen lebih buruk) dan secara signifikan menyusul dalam prediktabilitas (10-30 kali lebih kecil dari 99 persen).
- Secara signifikan meningkatkan kinerja ETS.
- Saya menulis panduan untuk mengelola dan men-debug sistem produksi pada mesin virtual Erlang.
- Alat bangun yang benar-benar baru ( rebar3 ), terintegrasi dengan pengelola paket terpadu untuk ekosistem Erlang.
- , . Elixir, Efene, LFE, Luerl, Clojerl Gleam Alpaca.
- Erlang.
,
. , OTP Ericsson 13-16 ( 22!), Erlang . , Ericsson. Erlang Elixir, Erlang VM ,
Erlang Ecosystem Foundation , , , (observability — ), , ..
, , , , , , , , , Erlang . .
Erlang
, , 2007-2009, , . Erlang , . , , BEAM Conf. (Property-Based Testing), Erlang Elixir . ,
. , .
? , , , . , Elixir. , , , . , . , . . , . Erlang, , .
, Erlang . , , Erlang-, Erlang-: , , . , .
Erlang -, Elixir-.
, , Erlang . , . Erlang , . , .
, . ? ? , - ? , , ? ? , ? « - »?
, , « ». , Erlang . , . junior senior-, , , , .
, 15 ( , ), . ,
sistem, dan penciptaannya dan membawa ke kondisi kerja. Setiap orang memiliki motivasi sendiri.Saya tidak dapat membayangkan bahwa saya akan mendapatkan sebanyak mungkin di komunitas lain. 10 tahun ini luar biasa. Sangat mengherankan bahwa komunitas Erlang masih kecil dan potensinya tidak terungkap. Ini berarti bahwa ada banyak peluang untuk berpartisipasi dalam segala hal, untuk berkomunikasi langsung dengan orang-orang yang penuh kebijaksanaan dan yang ingin membagikannya, dan menemukan tempat mereka.PS. Terima kasih telah menerjemahkan grup ru mail; Komunitas Erlang di Telegram (Evgeny M., Sergey Ivanov, Vladimir Sekisov, Greg)