1 poin oleh GN⁺ 2024-06-13 | 1 komentar | Bagikan ke WhatsApp
  • 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 Duration dan Date.shift/2 ditambahkan, memungkinkan tanggal, waktu, dan date time digeser berdasarkan duration; pada DateTime, perubahan zona waktu dan Daylight Saving Time ditangani
  • Kernel.to_timeout/1 ditambahkan untuk menormalisasi duration dan integer menjadi nilai timeout yang digunakan di berbagai API seperti Process dan GenServer
  • Fitur process label dari Erlang/OTP 27 dapat digunakan di Elixir melalui Process.set_label/1; Logger memformat laporan gen_statem dan menyertakan process label Erlang/OTP 27 dalam event logger
  • Keyword.intersect/2,3, profiler Mix baru mix profile.tprof, serta guard Kernel.is_non_struct_map/1 untuk mengurangi jebakan ketika %{} juga mencocokkan struct ditambahkan
  • Seiring penambahan mix profile.tprof, mix profile.cprof dan mix profile.eprof menjadi target soft-deprecation

1 komentar

 
GN⁺ 2024-06-13
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

    • Selain itu, ExUnit membuat pengujian menjadi sangat mudah, package manager Hex bekerja begitu saja, dan FLAME memungkinkan proses diskalakan ke komputer lain hampir hanya dengan satu baris kode
      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
    • Sedikit mempromosikan LiveView Native: selain aplikasi mobile, Anda juga bisa membuat aplikasi untuk desktop, watch, TV, dan Apple Vision Pro
      Semuanya tetap menggunakan konsep, performa, dan kemudahan pengembangan LiveView
    • Sebagai orang yang berasal dari bahasa dengan sistem tipe statis yang kuat dan berguna, ini adalah kekosongan yang paling terasa, jadi saya penasaran dengan Gleam
      Rasanya akan sulit kembali lagi ke tempat seperti Erlang atau Elixir
    • Saya setuju bahwa REPL Elixir berada di level tertinggi dan merupakan fitur killer sejati bahasa ini
      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
    • Bukankah bahasa lain juga punya banyak hal seperti ini? Ruby punya IRB
      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

    • Saya sangat menyukai Elixir, memakainya untuk hampir semua hal, dan LiveBook sudah menjadi tempat default untuk mulai membuat software mainan
      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_through router maupun di callback on_mount milik 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...
    • Jika menjalankan mix phx.new dengan flag —no-live, Anda bisa memakai Phoenix tanpa LiveView. Di proyek yang sudah ada pun bisa dicabut secara manual
    • Balasan-balasan sejauh ini melewatkan inti masalahnya
      Masalahnya 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

    • Penasaran, Anda mengerjakan hal seperti apa sampai merasa Elixir berada tepat di titik yang pas dibanding teknologi lain?
    • RabbitMQ cukup tangguh, apakah Anda mengalami masalah seperti kebocoran performa?
      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

    • Kalau bukan karena LiveView, saya akan sepenuhnya setuju
      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

    • Sebagai developer Elixir, terdengar mengejutkan bahwa gajinya lebih rendah daripada bahasa arus utama
      Penasaran apakah Anda mencari di AS, atau di wilayah lain
    • Gajinya cenderung konsisten lebih tinggi daripada stack arus utama. Sebagian karena sebagian besar lowongan Elixir mencari engineer senior
  • Fitur bagus di rilis ini adalah penambahan get_in/1 yang bekerja dengan struct. Misalnya bisa ditulis seperti get_in(struct.foo.bar)
    Jika foo mengembalikan nil, akses ke bar tidak akan menimbulkan exception

    • Ini sudah mungkin di versi Elixir sebelumnya, tetapi sintaksnya berisik
      Untuk hierarki yang bukan map biasa, diperlukan Access.key seperti berikut
      get_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

    • Terakhir kali saya melihat Elixir, tampaknya ada konsensus bahwa “pada akhirnya Anda juga harus memakai Erlang
      Apakah sekarang masih begitu, atau tidak perlu lagi turun ke Erlang?