- Tipe teoretis himpunan bertahap menambahkan kemampuan untuk menginferensi tipe dari pattern dan mengeluarkan peringatan saat kompilasi, sehingga dapat menemukan cacat dan bug dalam codebase tanpa mengubah perangkat lunak yang sudah ada
- Peringatan tipe baru saat ini berfokus pada atom dan map/struct, serta mendeteksi pattern matching pada key yang tidak ada, akses field yang tidak ada, pemanggilan fungsi non-modul, pemanggilan anonymous function yang salah, perbandingan struktural antar-struct, perbandingan tipe yang tidak beririsan, pattern binary yang salah, rescue exception yang tidak didefinisikan, dan lainnya
- Type checker saat ini hanya menginferensi tipe dari pattern di dalam fungsi yang sama; analisis lintas guard dan batas fungsi direncanakan ditambahkan pada rilis mendatang
- Dukungan untuk Erlang/OTP 27 ditambahkan dan dukungan Erlang/OTP 24 dihentikan; migrasi ke Erlang/OTP 26 atau lebih baru, termasuk di Windows, direkomendasikan
- Dukungan untuk WERL, antarmuka grafis terminal Erlang untuk Windows, dijadwalkan dihapus pada Elixir v1.18
- Tipe data baru
DurationdanDate.shift/2ditambahkan, memungkinkan tanggal, waktu, dan date time digeser berdasarkan duration; padaDateTime, perubahan zona waktu dan Daylight Saving Time ditangani Kernel.to_timeout/1ditambahkan untuk menormalisasi duration dan integer menjadi nilai timeout yang digunakan di berbagai API sepertiProcessdanGenServer- Fitur process label dari Erlang/OTP 27 dapat digunakan di Elixir melalui
Process.set_label/1; Logger memformat laporangen_statemdan menyertakan process label Erlang/OTP 27 dalam event logger Keyword.intersect/2,3, profiler Mix barumix profile.tprof, serta guardKernel.is_non_struct_map/1untuk mengurangi jebakan ketika%{}juga mencocokkan struct ditambahkan- Seiring penambahan
mix profile.tprof,mix profile.cprofdanmix profile.eprofmenjadi target soft-deprecation
1 komentar
Pendapat di Hacker News
Dalam beberapa tahun terakhir, ekosistem Elixir benar-benar menjadi solusi paling sederhana untuk sangat banyak kebutuhan
Pengembangan web cepat dan menyenangkan dengan Phoenix dan LiveView; kecerdasan buatan dengan NX/Axon/Bumblebee; streaming dan pemrosesan audio-video dengan Membrane; CQRS dan event sourcing dengan Commanded; pembuatan perangkat embedded dengan Nerves; bahkan aplikasi mobile dengan LiveView Native yang sedang dikembangkan
Queue, pipeline, dan batch processing juga bisa ditangani sesuai kebutuhan dengan fitur bawaan atau GenStage, Broadway, dan Oban
Namun secara pribadi, fitur intinya adalah IEx, REPL milik Elixir. Kemampuan untuk berinteraksi langsung dengan kode yang sedang dikembangkan atau berjalan di produksi, mengintip bagian dalamnya, dan melakukan debugging benar-benar bisa mengubah hidup
Ditambahkannya tipe adalah potongan puzzle terakhir yang memberi kita keyakinan lebih besar terhadap kode yang kita deploy
Ecto memungkinkan basis data SQL ditangani secara fungsional; saya masih belum tahu harus memandangnya sebagai ORM atau tidak, tetapi karena beberapa query yang bisa dikomposisikan dapat menghilangkan 90% SQL, saya menganggapnya berhasil
Setelah berbulan-bulan berkutat dengan deployment, uptime, segmentation fault, waktu terkait package, dan sebagainya, kami memindahkan web server dan layer data ke Elixir + Phoenix, dan sekarang jauh lebih mudah diuji, lebih mudah dinalar, skalabilitasnya lebih dapat dipercaya, serta deployment-nya juga mudah
Berkat convention over configuration, memulai dengan Phoenix bisa sangat cepat sampai terasa tidak masuk akal, jauh lebih cepat daripada FastAPI. Rasanya seharusnya saya melakukannya beberapa bulan lalu
Sekarang saya sedang melatih model dengan Nx, mencoba-coba Bumblebee/Livebook, dan menambahkan fitur presence serta live ke aplikasi nyaris tanpa biaya
Semuanya tetap menggunakan konsep, performa, dan kemudahan pengembangan LiveView
Rasanya akan sulit kembali lagi ke tempat seperti Erlang atau Elixir
Setiap kali menulis kode dalam bahasa lain, terutama saat dibayar untuk coding, saya benar-benar merindukannya
REPL yang baik sangat mengurangi friksi yang sering ditemui dalam pemrograman. Alih-alih menjalankan seluruh aplikasi untuk menusuk-nusuk potongan kode yang bermasalah, Anda bisa membangun ide sedikit demi sedikit dan mengujinya saat itu juga
Standard library Elixir juga hebat, dan dokumentasi sangat mudah diakses dari REPL sehingga sangat membantu menjaga flow. Saat coding dengan Elixir, saya jarang membuka browser untuk mencari pertanyaan kecil, karena biasanya jawabannya bisa ditemukan tanpa meninggalkan REPL
Karena itu saya juga terdorong menulis docstring yang baik di kode saya sendiri
Yang lebih bagus lagi adalah Anda bisa menjalankan REPL bersama kode yang sedang berjalan. Bahkan ketika aplikasi harus dijalankan, Anda tetap bisa menjalankannya sambil memanipulasi data live dan melihat state internal di lingkungan pengembangan. Di stack lain, hal seperti ini mustahil atau memerlukan debugger
Dengan hadirnya fitur terkait tipe, saya berharap tooling-nya akan menjadi lebih baik lagi
Selain itu ada kesenangan dan kekuatan paradigma fungsional, cara yang kokoh untuk menangani mutabilitas dan state, serta tidak perlu menghadapi sintaks LISP. Secara pribadi, ini bahasa yang benar-benar mengenai semua nada yang saya inginkan, jadi saya sangat menyukainya
Apakah IEx melakukan sesuatu yang tidak dimiliki IRB?
Selama beberapa tahun terakhir, tim Elixir dan Erlang benar-benar bekerja dengan sangat baik, dan karya para penulis library serta buku juga tidak bisa diabaikan
Saya belum pernah menantikan sebuah rilis seperti ini. Saya sudah cukup lama mengikuti commit Elixir dan OTP, dan rasanya Elixir/Erlang jelas sedang mendapatkan momentum
Saya menggunakan Elixir untuk backend proyek sampingan, sementara frontend-nya Remix, dan pekerjaan backend terasa sangat nyaman dan produktif
Saya mengakui produktivitas LiveView, tetapi dalam kasus saya harus menangani koneksi jaringan yang tidak stabil, jadi sesuai dugaan pengalaman LiveView-nya tidak bagus
Saya berharap di benak para developer, Elixir bisa sedikit dipisahkan dari LiveView. Bahkan kalau dipakai hanya sebagai backend API sederhana tanpa LiveView atau kanal real-time, Elixir benar-benar menyenangkan
Namun saya kurang cocok dengan LiveView. Cukup sulit dipahami dan banyak jebakan di bawah kaki. Misalnya, ada kasus ketika kita harus ingat menangani pemeriksaan autentikasi baik di
pipe_throughrouter maupun di callbackon_mountmilik LiveView. Lihat [0]Fakta bahwa kalimat di atas sama sekali tidak berarti apa-apa bagi developer yang baru mengenal Phoenix dan LiveView saja sudah cukup menjadi bukti bahwa LiveView tidak boleh menjadi cara default
Ia menciptakan kurva belajar yang sangat terjal di tempat yang tidak diperlukan. Elixir/Phoenix sendiri mudah
Untuk developer yang baru belajar Elixir/Phoenix, menurut saya urutan yang tepat adalah mulai dengan Phoenix dead views bergaya MVC, lalu membaca “Elixir in Action” untuk mempelajari dasar-dasar OTP. Buku ini mudah, membuka mata, dan mengubah hampir semua cara saya menulis kode
Baru setelah itu sebaiknya lanjut ke LiveView
[0]: https://hexdocs.pm/phoenix_live_view/security-model.html#liv...
mix phx.newdengan flag—no-live, Anda bisa memakai Phoenix tanpa LiveView. Di proyek yang sudah ada pun bisa dicabut secara manualMasalahnya bukan pengetahuan teknis atau default instalasi, melainkan persepsi para developer. Terlalu banyak orang langsung mengasosiasikan Elixir dan ekosistem lainnya dengan LiveView, lalu melewatkan ekosistem di luar itu begitu saja
Elixir jauh lebih luas dari itu, dan bahkan Phoenix pun lebih besar daripada LiveView
Anda bisa membuat aplikasi Elixir yang produktif dan hemat biaya tanpa LiveView, bahkan tanpa Phoenix. Memilih Elixir di backend seharusnya menjadi lebih umum daripada sekarang, tetapi saya juga memahami anggapan umum dan kekhawatiran yang membuat orang memilih opsi lain
Saya sedang membangun startup saya sebagai full-stack 100% Elixir, dan sejauh ini ini adalah teknologi terbaik yang pernah saya pakai
Saya terus mengabarkan kepada teman-teman teknis yang serius betapa bagusnya ini
Sekarang akan sangat menyenangkan kalau RabbitMQ dan kliennya berjalan di OTP 27. Saya ingin upgrade
Kami sudah menggunakan metode login klien dengan sertifikat SSL selama beberapa tahun dan sangat puas dengan stabilitasnya
Tidak akan pernah cukup banyak hal baik yang bisa dikatakan tentang Elixir dan Phoenix. Kalau tipe sudah hadir, ini akan makin bagus
Anda akan sering mendengar tentang BEAM dan kekuatannya, tetapi menurut pengalaman saya, Anda bisa berjalan sangat jauh sebelum perlu memikirkan bagian stack itu. Phoenix mengabstraksikannya dengan sangat baik, sehingga Anda mendapatkan manfaatnya tanpa usaha
Contohnya Oban. Di dalam Postgres, Anda mendapatkan pekerjaan background yang kuat, fleksibel, dan mudah digunakan dengan kode Elixir, hampir gratis. Benar-benar hebat
Saya sarankan untuk mencobanya
Karena LiveView dan obsesi pemasaran di sekitarnya, orang-orang yang seharusnya bisa lebih lama tidak perlu mengenal OTP justru berhadapan dengan OTP sangat awal dalam perjalanan mereka, mungkin bahkan sejak route controller pertama
Menulis alur LiveView yang kokoh dan mengujinya dengan baik sama kompleksnya secara intelektual seperti menulis GenServer stateful dengan banyak alur non-linear dan berbagai titik masuk call/cast
LiveView memakai istilah yang berbeda dan memiliki lapisan kemudahan kecil seperti async assigns, tetapi secara mekanis ia secara harfiah adalah GenServer. Menurut saya, memahami hal ini dengan baik penting agar bisa menggunakannya secara efektif
Saya sangat menyukai Oban, dan sangat merindukannya di ekosistem lain
Sebagai tambahan, apakah ada yang pernah mencoba elixir-desktop [1]? Ini bundel wxWidgets + LiveView, jadi cukup mirip dengan aplikasi Electron
Di [2], Wojtek Mach menjelaskan bagaimana tim Elixir membuat Livebook Desktop. Ia membahas bagaimana proyek itu dimulai, bug-bug halus yang ditemukan saat membuat aplikasi untuk macOS, keterbatasan wxWidgets di Windows, dan berbagai detail implementasi
Saya berharap tim Elixir merilis sesuatu seperti elixir-desktop secara resmi berbasis Livebook. Maksudnya, menyediakan proyek template resmi yang mem-fork repositori Livebook untuk membuat aplikasi desktop berbasis LiveView
Saat ini Livebook didistribusikan sebagai executable untuk Windows dan Mac. Bagaimana jika mengikuti pendekatan yang sama agar developer bisa mendistribusikan executable mandiri seperti Electron?
Saya juga tahu LiveView Native [3], tetapi menurut saya arahnya berbeda
[1] https://github.com/elixir-desktop/desktop-example-app
[2] https://www.youtube.com/watch?v=Kiw6eWKcQbg
[3] https://native.live/
Saya menantikan hari ketika alasan tidak ada tipe yang selama ini menghambat popularisasi Elixir akhirnya hilang
Selama 10 tahun saya membaca cerita-cerita Elixir yang keren di sini, dan saya juga menyukai bahasanya
Namun saya sudah menyerah mencari pekerjaan Elixir beberapa tahun lalu. Karena gajinya terus terlihat lebih rendah daripada bahasa arus utama
Mungkin saja ini bahasa yang paling ingin saya pakai, tetapi bagi saya gaji dan produk yang keren lebih penting daripada tech stack, jadi mungkin pada akhirnya saya tidak akan benar-benar menggunakannya. Meski begitu, tetap menyenangkan mengamatinya dari jauh
Penasaran apakah Anda mencari di AS, atau di wilayah lain
Fitur bagus di rilis ini adalah penambahan
get_in/1yang bekerja dengan struct. Misalnya bisa ditulis sepertiget_in(struct.foo.bar)Jika
foomengembalikannil, akses kebartidak akan menimbulkan exceptionUntuk hierarki yang bukan map biasa, diperlukan
Access.keyseperti berikutget_in(struct, [Access.key(:foo), :bar])Ini potongan terakhir yang saya inginkan. Saya juga menantikan tahap berikutnya
Selain itu, menurut saya bahasa ini secara fungsional sudah 100% lengkap
Apakah sekarang masih begitu, atau tidak perlu lagi turun ke Erlang?