- Kademeli küme kuramsal tipler, desenlerden tip çıkarımı yaparak derleme zamanında uyarılar üretir; mevcut yazılımı değiştirmeden kod tabanındaki kusur ve hataları bulma özelliği eklendi
- Yeni tip uyarıları şu anda atom ve map/struct üzerine odaklanıyor; var olmayan anahtarlarla pattern matching ve alan erişimi, modül olmayan çağrılar, hatalı anonim fonksiyon çağrıları, struct'lar arasında yapısal karşılaştırmalar, kesişmeyen tip karşılaştırmaları, hatalı binary desenleri ve tanımlanmamış istisnalara
rescueuygulanması gibi durumları algılar - Tip denetleyici şu anda yalnızca aynı fonksiyon içindeki desenlerden tip çıkarımı yapıyor; guard'lar ve fonksiyon sınırları arasındaki analiz gelecek sürümlerde eklenecek
- Erlang/OTP 27 desteği eklendi ve Erlang/OTP 24 desteği sonlandırıldı; Windows dahil Erlang/OTP 26 veya üstüne geçiş öneriliyor
- Windows için Erlang terminal grafik arayüzü WERL desteği Elixir v1.18'de kaldırılacak
- Yeni
Durationveri tipi veDate.shift/2eklendi; bunlar tarih, saat ve datetime değerlerini duration temelinde kaydırabiliyor,DateTimetarafında ise saat dilimi değişiklikleri ve Yaz Saati Uygulaması işleniyor Kernel.to_timeout/1eklendi; duration ve integer değerleriniProcess,GenServerve diğer çeşitli API'lerde kullanılan timeout değerlerine normalize eder- Erlang/OTP 27'nin process label özelliği Elixir'de
Process.set_label/1ile kullanılabiliyor; Logger,gen_statemraporlarını biçimlendiriyor ve logger olaylarına Erlang/OTP 27 process label bilgisini ekliyor Keyword.intersect/2,3, yeni Mix profiler'ımix profile.tprofve%{}ifadesinin struct'larla da eşleşmesi tuzağını azaltmak için guardKernel.is_non_struct_map/1eklendimix profile.tprofeklenirken,mix profile.cprofvemix profile.eprofsoft-deprecation kapsamına alındı
1 yorum
Hacker News yorumları
Son birkaç yılda Elixir ekosistemi gerçekten pek çok kullanım için en basit çözüm hâline gelmeye başladı
Phoenix ve LiveView ile web geliştirme hızlı ve keyifli; NX/Axon/Bumblebee ile yapay zeka, Membrane ile ses-video akışı ve işleme, Commanded ile CQRS ve event sourcing, Nerves ile gömülü cihaz geliştirme, geliştirilmekte olan LiveView Native ile de mobil uygulamalar mümkün
Kuyruklar, pipeline’lar ve toplu işleme de yerleşik özelliklerle ya da GenStage, Broadway, Oban ile amaca uygun şekilde ele alınabiliyor
Yine de kişisel olarak temel özellik, Elixir’in REPL’i olan IEx. Geliştirme sırasında ya da üretimde çalışan kodla doğrudan etkileşime girebilmek, içini inceleyebilmek ve hata ayıklayabilmek hayat değiştirecek kadar etkili
Buna tiplerin eklenmesi, dağıttığımız koda daha fazla güven duymamızı sağlayacak son yapboz parçası
Ecto, SQL veritabanlarını fonksiyonel bir şekilde ele almayı sağlıyor; ORM’e nasıl bakmak gerektiğini hâlâ bilmiyorum ama birkaç birleştirilebilir sorguyla SQL’in %90’ından kurtulabildiysem bunu başarı sayarım
Dağıtım, çalışma süresi, segmentation fault’lar, paket süreleri gibi konularda aylarca uğraştıktan sonra web sunucusunu ve veri katmanını Elixir + Phoenix’e taşıdım; artık çok daha iyi test ediliyor, akıl yürütmesi daha kolay, ölçeklenebilirliğine güveniliyor ve dağıtımı da kolay oldu
Konfigürasyon yerine teamül sayesinde Phoenix ile inanılmaz hızlı başlayabildim; FastAPI’den çok daha hızlıydı. Bunu aylar önce yapmalıymışım diye düşünüyorum
Şimdi Nx ile model eğitiyor, Bumblebee/Livebook’u kurcalıyor ve uygulamaya presence ile live özelliklerini neredeyse bedavaya ekliyorum
Hepsi LiveView’in kavramlarını, performansını ve geliştirme kolaylığını aynen kullanıyor
Erlang ya da Elixir gibi yerlere yeniden dönmek zor olacak gibi geliyor
Başka dillerde kod yazdığım her seferinde, özellikle de para karşılığı kod yazarken, onu gerçekten özlüyorum
İyi bir REPL varsa programlamada sık karşılaşılan sürtünme ciddi ölçüde azalır. Sorunlu kod parçasını yoklamak için tüm uygulamayı çalıştırmak yerine, fikirleri azar azar inşa edip anında deneyebilirsiniz
Elixir standart kütüphanesi de harika; REPL’den dokümantasyona erişmek çok kolay olduğu için akışı korumaya büyük katkı sağlıyor. Elixir ile kod yazarken küçük sorular için tarayıcı açmam nadiren gerekiyor, çünkü genelde REPL’den çıkmadan yanıtı bulabiliyorum
Bu da beni kendi kodumda iyi dokümantasyon dizeleri yazmaya teşvik ediyor
Daha da iyisi, çalışan kodla birlikte REPL çalıştırabilmek. Uygulamayı çalıştırmam gerektiğinde de aynen çalıştırıp, geliştirme ortamında canlı veriyi manipüle edebiliyor ve iç durumu inceleyebiliyorum. Diğer stack’lerde bu ya imkânsız ya da debugger gerektiren bir iş
Tiplerle ilgili özellikler de gelince araçların daha da iyileşmesini bekliyorum
Buna fonksiyonel paradigmanın keyfi ve gücü de ekleniyor; mutability ve state’i ele almak için sağlam yöntemler var, üstelik LISP sözdizimine katlanmak gerekmiyor. Kişisel olarak tüm notaları doğru basan bir dil olduğu için gerçekten seviyorum
IEx, IRB’de olmayan ne yapıyor?
Son birkaç yıldır Elixir ve Erlang ekipleri gerçekten çok iyi iş çıkardı; kütüphane ve kitap yazarlarının emeğini de unutmamak gerek
Bir sürümü bu kadar sabırsızlıkla beklediğimi hatırlamıyorum. Bir süredir Elixir ve OTP commit’lerini izliyordum; Elixir/Erlang’ın kesinlikle ivme kazandığını hissediyorum
Yan projelerimin backend’inde Elixir kullanıyorum, frontend ise Remix; backend tarafında çalışmak çok rahat ve üretken
LiveView’in üretkenliğini kabul ediyorum ama benim durumumda kararsız ağ bağlantılarını ele almam gerektiği için LiveView deneyimi beklediğim gibi iyi olmadı
Geliştiricilerin zihninde Elixir’in LiveView’den bir ölçüde ayrışması iyi olurdu. LiveView ya da gerçek zamanlı kanallar olmadan, yalnızca basit bir API backend’i olarak kullansanız bile Elixir gerçekten çok keyifli
Ama LiveView’i pek beceremiyorum. Anlaması epey zor ve ayağınızın altında çok tuzak var. Örneğin kimlik doğrulama kontrollerini hem router’daki
pipe_throughhem de LiveView’inon_mountcallback’i tarafında hatırlayıp ele almanız gereken durumlar olabiliyor. Bkz. [0]Phoenix ve LiveView’e yeni başlayan bir geliştirici için yukarıdaki cümlenin hiçbir anlam ifade etmemesi bile, LiveView’in varsayılan yaklaşım olmaması gerektiğine yeterli kanıt
Gerekmediği yerlerde çok dik bir öğrenme eğrisi yaratıyor. Elixir/Phoenix’in kendisi kolay
Elixir/Phoenix’i yeni öğrenen bir geliştirici için doğru sıranın önce MVC tarzı Phoenix dead view’larını kullanmak, ardından OTP temellerini öğrenmek için “Elixir in Action” okumak olduğunu düşünüyorum. Bu kitap kolaydı, ufuk açıcıydı ve neredeyse tüm kod yazma biçimimi değiştirdi
Ancak ondan sonra LiveView’e geçmek daha iyi olur
[0]: https://hexdocs.pm/phoenix_live_view/security-model.html#liv...
mix phx.newkomutunu—no-livebayrağıyla çalıştırırsanız Phoenix’i LiveView olmadan kullanabilirsiniz. Mevcut projelerden de elle çıkarılabilirSorun teknik bilgi ya da kurulum varsayılanları değil, geliştiricilerin algısı. Çok fazla kişi Elixir’i ve ekosistemin geri kalanını önce LiveView ile düşünüyor; diğer ekosistemi ise görmezden gelip geçiyor
Elixir bundan çok daha fazlası ve Phoenix bile LiveView’den daha büyük
LiveView, hatta Phoenix olmadan da üretken ve maliyet etkin Elixir uygulamaları rahatlıkla geliştirilebilir. Backend’de Elixir’i seçmek bugün olduğundan daha yaygın olmalı; yine de insanları başka tercihlere yönelten yaygın kanaatleri ve korkuları da anlıyorum
Startup’ımı %100 Elixir full-stack olarak geliştiriyorum ve şimdiye kadar kullandığım teknolojiler arasında en iyisi
Ciddi teknolojiyle ilgilenen arkadaşlarıma ne kadar iyi olduğunu sürekli anlatıyorum
Şimdi RabbitMQ ve istemcisinin OTP 27’de çalışması gerçekten harika olurdu. Yükseltmek istiyorum
Biz birkaç yıldır SSL sertifikasıyla istemci girişi yöntemini kullanıyoruz ve kararlılığından çok memnunuz
Elixir ve Phoenix hakkında ne kadar iyi şey söylesem az. Bir de tipler gelince daha da iyi olacak
BEAM ve gücü hakkında çok şey duyacaksınız, ancak deneyimime göre yığının o kısmını düşünmeniz gereken noktaya gelene kadar gerçekten uzun süre geçebiliyor. Phoenix bunu harika biçimde soyutluyor; çaba harcamadan faydasını görüyorsunuz
Örneğin Oban var. Postgres içinde, Elixir koduyla güçlü, esnek ve kullanımı kolay arka plan işlerini neredeyse bedavaya elde ediyorsunuz. Gerçekten harika
Denemenizi öneririm
LiveView ve çevresindeki pazarlama takıntısı yüzünden, normalde OTP’yi daha uzun süre bilmeden ilerleyebilecek insanlar yolculuğun çok erken bir aşamasında, belki de ilk controller route’larından itibaren OTP ile yüzleşiyor
Sağlam bir LiveView akışı yazmak ve iyi test etmek, birden çok doğrusal olmayan akışa ve çeşitli call/cast giriş noktalarına sahip stateful bir GenServer yazmak kadar zihinsel olarak karmaşık
LiveView farklı terimler kullanıyor ve async assigns gibi küçük kolaylık katmanları var; ama mekanik olarak kelimenin tam anlamıyla bir GenServer. Etkili kullanmak için bunu iyi anlamanın önemli olduğunu düşünüyorum
Oban’ı gerçekten seviyorum ve diğer ekosistemlerde derinden özlüyorum
Bu arada, elixir-desktop [1] kullanan oldu mu? wxWidgets + LiveView paketi olduğu için Electron uygulamalarına oldukça benziyor
[2]’de Wojtek Mach, Elixir ekibinin Livebook Desktop’ı nasıl yaptığını anlatıyor. Projenin nasıl başladığını, macOS için uygulama yaparken keşfedilen incelikli bir hatayı, Windows’ta wxWidgets’in sınırlamalarını ve çeşitli uygulama ayrıntılarını ele alıyor
Elixir ekibinin Livebook tabanlı, elixir-desktop benzeri bir şeyi resmî olarak yayımlaması güzel olurdu. Yani Livebook deposunu fork’layıp LiveView tabanlı masaüstü uygulamaları oluşturmak için resmî bir şablon proje sunmaları gibi
Şu anda Livebook, Windows ve Mac için çalıştırılabilir dosyalar olarak dağıtılıyor. Electron’da olduğu gibi geliştiricilerin bağımsız çalıştırılabilir dosyalar dağıtabilmesi için aynı yaklaşım izlenemez mi?
LiveView Native [3]’ü de biliyorum ama onun yönünün farklı olduğunu düşünüyorum
[1] https://github.com/elixir-desktop/desktop-example-app
[2] https://www.youtube.com/watch?v=Kiw6eWKcQbg
[3] https://native.live/
Elixir’in yaygınlaşmasının önünde engel olarak gösterilen tip yok bahanesinin ortadan kalkacağı günü dört gözle bekliyorum
10 yıldır burada harika Elixir hikâyeleri okuyorum ve dili de seviyorum
Ama birkaç yıl önce Elixir işi aramaktan vazgeçtim. Çünkü maaşlar ana akım dillere göre sürekli daha düşük görünüyordu
En çok kullanmak istediğim dil olabilir, ama benim için maaş ve harika bir ürün teknoloji yığınından daha önemli; bu yüzden pratikte bunu yapamayabilirim. Yine de uzaktan izlemek hâlâ keyifli
ABD'de mi arıyorsun, yoksa başka bir bölgede mi merak ettim
Bu sürümün güzel özelliklerinden biri, struct'larla çalışan
get_in/1eklemesi. Örneğinget_in(struct.foo.bar)gibi kullanılabiliyorfoonildöndürürsebarerişiminde exception oluşmuyorNormal map olmayan hiyerarşiler için şöyle
Access.keygerekiyorduget_in(struct, [Access.key(:foo), :bar])Bu, istediğim son parçaydı. Bundan sonraki adımları da merakla bekliyorum
Bunun dışında, benim ölçütlerime göre bu dil işlevsel olarak %100 tamamlanmış durumda
Hâlâ öyle mi, yoksa artık Erlang seviyesine inmek gerekmiyor mu?