Program Erlang Favorit Saya (2013)
(joearms.github.io)- Dari cakupan catatan yang diberikan saja, tidak dapat dipastikan apa program Erlang pada judul itu atau mengapa itu penting
- Teks yang bisa diverifikasi terutama hanya berupa potongan skrip Shell dan kalimat koreksi singkat
- Skrip tersebut melakukan iterasi atas file
*.png.png.metadi direktori saat ini, lalu mengekstrak bagian sebelum titik pertama dari nama file - Perintah yang benar-benar dijalankan adalah
git mv $i $j.png.meta, dan perintah untuk mengubah$j.png.pngmenjadi$j.pnghanya ditampilkan sebagai output - Karena chunk asli 5-104 dihilangkan, klaim inti yang terkait dengan judul atau penjelasan kode Erlang tidak dapat dipastikan
Isi yang dapat diverifikasi
- Hanya dari cakupan yang diberikan, sulit menilai apa sebenarnya “program Erlang favorit” itu, alasan menyukainya, atau struktur kodenya
- Potongan kode yang bisa diverifikasi adalah skrip Shell untuk mengganti nama file yang dimulai dengan
#!/bin/sh- Mengulangi file
*.png.png.meta - Dengan
j="${i%%.*}", mengekstrak bagian sebelum titik pertama dari nama file git mv $i $j.png.metabenar-benar dijalankangit mv $j.png.png $j.pnghanya ditampilkan melaluiecho
- Mengulangi file
- Ada kalimat “Actually you don't need the really do this. It should have been water the plants.”, yang dapat dibaca sebagai koreksi bahwa instruksi atau contoh sebelumnya sebenarnya tidak perlu, dan seharusnya adalah “water the plants”
- Di bagian akhir, Joe Armstrong dan Jeremy Ruston disebut bersama
Konteks yang membatasi penilaian
- Beberapa chunk terdiri dari metadata status/sidebar TiddlyWiki, data Base64 yang tampak seperti JPEG/PNG, atau konten kosong, sehingga sulit mengekstrak fakta isi utama
- Catatan yang diberikan tidak memuat informasi inti seperti cara kerja program Erlang, kode, alasan desain, contoh, angka, alur kerja, atau klaim
- Potongan skrip Shell juga hanya diberikan sebagian tanpa penjelasan sekitar, sehingga tidak dapat dipastikan ini bagian dari tugas apa
Rentang yang dihilangkan
- Input secara eksplisit menyatakan bahwa chunk asli 5-104 dihilangkan karena batas panjang/biaya
- Ringkasan ini hanya mencerminkan cakupan catatan yang diberikan, dan tidak mencakup detail atau kesimpulan dari keseluruhan teks asli
1 komentar
Opini Hacker News
Jika closure server
Fbisa menerima pesan{become, F}selain pesannya sendiri, server bisa terus diubah menjadi perilaku baruIni agak melenceng, tapi saya masih ingat pernah berbicara dengan Joe di konferensi Erlang. Ia selalu antusias soal teknologi dan dengan senang hati berbicara dengan siapa pun. Ia prihatin melihat Windows makin buruk dan makin kurang layak dipakai dari tahun ke tahun, dan pernah berkata bahwa suatu hari nanti, untuk melihat file, kita harus menonton iklan beberapa saat dulu agar kuncinya terbuka—dan itu hampir menjadi kenyataan. Windows 11 sudah punya iklan, dan untuk menghapusnya kita harus sengaja mencari pengaturannya, jadi rasanya sekitar Windows 13 hal itu benar-benar akan terjadi
Misalnya suara salah satu earphone jauh lebih keras, aplikasi Microsoft mati secara aneh, halaman dokumentasi Windows tidak bisa dibuka di browser apa pun sehingga harus memakai situs arsip, monitor eksternal yang sebelumnya terdeteksi baik tiba-tiba tidak terdeteksi atau layarnya berkedip. Office pada dasarnya mendorong penyimpanan ke cloud, bukan lokal, tetapi saya lebih suka file lokal dulu, sementara cloud menjadi cadangan. WSL cukup berantakan, tetapi setidaknya hampir menjadi satu-satunya alasan Windows masih bisa dipakai
Saya selalu mendengar Joe adalah orang yang hebat, dan saya bisa memahaminya. Saat pertama kali belajar coding sendiri, saya membaca buku Erlang-nya, dan sifatnya yang jenaka, rendah hati, serta imajinatif sangat memengaruhi saya. Saya hampir tidak pernah benar-benar memakai Erlang, tetapi tulisannya mengubah cara saya berpikir tentang kode, dan saya berharap budaya matematika, rekayasa perangkat lunak, dan ilmu komputer lebih menerima sifat jenaka dan kerendahan hati
Video ringkasan singkat 35 menit yang menjelaskan mengapa BEAM berbeda dari mesin virtual lain seperti JVM atau Node: https://www.youtube.com/watch?v=pO4_Wlq8JeI
Saya merindukan Joe. Semangat menularnya untuk membuat komputasi menjadi lebih baik sangat membekas pada diri saya saat masih muda dan pada cara saya mendekati teknologi sekarang
universal_server() -> receive {become, F} -> F() end.Sejujurnya saya belum sepenuhnya memahami kekuatan universal_server ini. Akan bagus jika ada yang bisa menjelaskannya
Di Erlang, Anda memecahkan masalah dengan menjalankan banyak proses, dan sebagian besar proses menunggu pesan. Perbedaan pentingnya adalah proses Erlang bisa berjalan mulus juga di mesin jarak jauh. Proses ini menerima pesan tuple yang berisi atom bernama
becomedan sebuah fungsi; kapan pun proses lain mengirim pesan itu, ia “berubah” menjadi fungsi tersebutDengan kata lain, logika loop tunggunya bisa diganti dengan logika protokol yang diinginkan. Dalam contohnya, loop ini dijalankan di beberapa mesin lalu dikirimi fungsi yang mengimplementasikan protokol gossip, tetapi Anda juga bisa mengirim pesan yang membuatnya menjadi klien BitTorrent. Joe adalah seorang jenius sekaligus orang yang sangat ramah, dan Erlang adalah salah satu kreasi teknis terindah yang pernah saya lihat. Ia membuat saya melihat konkurensi dengan cara yang benar-benar baru
receiveseperti pernyataanswitchuntuk pesan masuk, tetapi sebenarnya itu adalah pattern matchingMisalnya, Anda bisa membuat server faktorial yang menerima
{From, N}dan mengembalikan hasilnya denganFrom ! factorial(N).!adalah operator untuk mengirim hasil ke proses pengembaliKode pengujiannya menjalankan
universal_server, membuatnya menjadi server faktorial denganPid ! {become, fun factorial_server/0}, lalu mengirim{self(), 50}untuk menerima faktorial dari 50. Keunggulan besar Erlang adalah paralelisme terdistribusi dan hot code update, dan di sini itu terlihat sebagai bentuk menimpa loop penerimaanuniversal_serverdengan loop penerimaanfactorial_server. Namun saya kira hot code update yang sebenarnya tidak bekerja persis seperti iniNamun di Erlang, Anda bisa membuat jaringan server Erlang terdistribusi dan menjadikan server sebagai sumber daya komputasi serbaguna yang dapat melakukan pekerjaan yang diinginkan klien. Kode datang dari klien; tanpa perlu meminta administrator sistem memasang binary di semua mesin, Anda cukup mengirim fungsi dan mesin jarak jauh akan memanggilnya
Fungsi aktual yang akan menjalankan server dikirim oleh klien, dan proses Erlang menjadi server tersebut berdasarkan fungsi itu. Jika mempertimbangkan kemampuan hot reloading Erlang, struktur sederhana ini menjadi lebih kuat. Proses Erlang adalah sumber daya komputasi yang menunggu pekerjaan, dan jika pekerjaan itu adalah menjalankan server lengkap, itu cukup keren
Karena itu, proses bisa menjadi apa saja tergantung kode yang Anda kirim. Jika ia harus mengendalikan microwave, lalu melakukan komputasi kuantum, dan keesokan harinya memprediksi pemenang pertandingan sepak bola, cukup kirim kode yang diperlukan untuk tiap tugas dan ia akan menjalankannya
Saya menghabiskan banyak waktu menjelaskan mengapa BEAM istimewa, dan mengapa konkurensi di Erlang/Elixir berbeda dari konkurensi di Go atau Java
Mulai sekarang sepertinya cukup menautkan program Erlang favorit Joe dan thread HN ini
Tulisan blog ini juga dibahas dalam presentasi terbaru yang bagus: https://youtu.be/pQ0CvjAJXz4
Saya hanya punya pemahaman tingkat tinggi tentang Erlang sebagai bahasa dan belum pernah benar-benar memprogram dengannya, jadi saya penasaran mengapa kode ini diperlukan
universal_server() -> receive {become, F} -> F() end.Rasanya bukankah cukup menjalankan
F()langsung di mesin jarak jauh? Karena kodeFharus sudah ada di mesin virtual jarak jauh, contoh ini mungkin berarti kodeFdiserialisasi lalu dikirim. Kalau ini menangani boilerplate umum, saya bisa memahami kegunaannya, tetapi saat ini terlihat seperti menunggu pesanbecome Flalu menjalankanF()Di sini
Fadalah closure, jadi ia bisa mencakup bukan hanya kode, tetapi juga variabel yang ditangkap dan lingkungan saat ia dibuat. SaatF()dipanggil, kode itu dijalankan dan dapat mengakses lingkungan sekitarnya pada saatFdibuatDi Erlang, closure bisa dikirim melintasi jaringan ke node Erlang lain. Namun, kode modul yang dirujuk oleh closure harus ada di semua node. Dalam kode produksi, kemungkinan besar seperti yang Anda katakan, modul
Fakan dipanggil langsung dan argumennya diteruskan secara eksplisit; ini lebih dekat ke demonstrasi keren yang menunjukkan kemungkinannyaF()bisa menjadi konteks tingkat atas yang sama baiknya dengan konteks sebelumnya, dan itu kerenPermintaan yang sudah ada bisa diproses secara alami dengan logika lama, sementara permintaan baru dimulai dengan logika baru, dan pada akhirnya logika lama bisa di-garbage collect
Fharus sudah ada di mesin virtual jarak jauh, tetapi kode juga bisa dikirim ke mesin virtual jarak jauhMisalnya di Elixir, Anda bisa mendapatkan nama modul dan biner bytecode BEAM dengan
Code.compile_string. Bytecode itu bisa dikirim ke mesin virtual lain, dimuat ke mesin virtual jarak jauh dengan:rpc.call('node@remote_host', :code, :load_binary, [the_module_name, "filename_doesnt_really_matter", binary_code]), lalu dijalankan denganspawn('node@remote_host', my_module, my_function, [args])Di sini
Fadalah variabel yang merepresentasikan program baru yang diserialisasi dan dikirim sebagai pesan antarproses, dan dalam kasus ini juga dikirim melalui jaringanAda juga kuliah tempat Joe menjelaskan cara menulis server dasar dengan Erlang: https://gioorgi.com/2015/erlang-lesson1/
Saya menyalinnya sendiri dan menambahkan sedikit penjelasan; itu menunjukkan kekuatan bahasa asinkron seperti Erlang/Elixir dibanding bahasa lain. Sayangnya, sekarang tidak banyak digunakan
Belakangan saya sedang tertarik pada Julia, dan tampaknya ia cukup banyak meminjam ide Erlang dalam model terdistribusinya
Server spontan semacam ini, yang bekerja seperti sulap di banyak node, juga bisa direproduksi dengan cukup mudah di Julia. Saya tidak yakin, tetapi rasanya mustahil modul
DistributedJulia tidak terinspirasi sedikit pun oleh ErlangSaya sangat menyukai Erlang dan berharap ada lebih banyak kesempatan untuk menggunakannya, tetapi menyenangkan juga melihat konsep-konsepnya meresap ke platform lain