1 puan yazan GN⁺ 2024-06-13 | 1 yorum | WhatsApp'ta paylaş
  • 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 rescue uygulanması 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 Duration veri tipi ve Date.shift/2 eklendi; bunlar tarih, saat ve datetime değerlerini duration temelinde kaydırabiliyor, DateTime tarafında ise saat dilimi değişiklikleri ve Yaz Saati Uygulaması işleniyor
  • Kernel.to_timeout/1 eklendi; duration ve integer değerlerini Process, GenServer ve 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/1 ile kullanılabiliyor; Logger, gen_statem raporlarını biçimlendiriyor ve logger olaylarına Erlang/OTP 27 process label bilgisini ekliyor
  • Keyword.intersect/2,3, yeni Mix profiler'ı mix profile.tprof ve %{} ifadesinin struct'larla da eşleşmesi tuzağını azaltmak için guard Kernel.is_non_struct_map/1 eklendi
  • mix profile.tprof eklenirken, mix profile.cprof ve mix profile.eprof soft-deprecation kapsamına alındı

1 yorum

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

    • Buna ek olarak ExUnit test yazmayı inanılmaz kolaylaştırıyor, Hex paket yöneticisi sorunsuz çalışıyor ve FLAME neredeyse tek satır kodla süreçleri başka bir bilgisayara ölçeklemeyi sağlıyor
      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
    • LiveView Native’in biraz reklamını yapmak gerekirse, yalnızca mobil uygulamalar değil masaüstü, saat, TV ve Apple Vision Pro için de uygulamalar geliştirebilirsiniz
      Hepsi LiveView’in kavramlarını, performansını ve geliştirme kolaylığını aynen kullanıyor
    • Güçlü ve kullanışlı bir statik tip sistemi olan dillerden gelen biri olarak, en çok eksikliğini hissettiğim boşluk bu; bu yüzden Gleam’i merakla izliyorum
      Erlang ya da Elixir gibi yerlere yeniden dönmek zor olacak gibi geliyor
    • Elixir’in REPL’i üst düzey ve bu dilin gerçek killer feature’ı olduğu konusunda katılıyorum
      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
    • Başka dillerde de böyle şeyler çok değil mi? Ruby’de IRB var
      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

    • Elixir’i gerçekten seviyorum; neredeyse her şeyde kullanıyorum ve LiveBook oyuncak yazılımlar yapmaya başladığım varsayılan yer hâline geldi
      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_through hem de LiveView’in on_mount callback’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.new komutunu —no-live bayrağıyla çalıştırırsanız Phoenix’i LiveView olmadan kullanabilirsiniz. Mevcut projelerden de elle çıkarılabilir
    • Şimdiye kadar gelen yanıtlar asıl noktayı kaçırıyor
      Sorun 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

    • Ne tür bir iş yaptığını ve Elixir’in diğer teknolojilere kıyasla tam yerine oturduğunu neden hissettiğini merak ediyorum
    • RabbitMQ oldukça sağlam; performans sızıntısı gibi sorunlar mı yaşıyorsunuz?
      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 olmasaydı tamamen katılırdım
      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

    • Bir Elixir geliştiricisi olarak maaşların ana akım dillerden düşük olması bana şaşırtıcı geliyor
      ABD'de mi arıyorsun, yoksa başka bir bölgede mi merak ettim
    • Maaşlar ana akım stack'lere göre genelde sürekli daha yüksek. Bunun bir nedeni, çoğu Elixir işe alımının senior mühendis araması
  • Bu sürümün güzel özelliklerinden biri, struct'larla çalışan get_in/1 eklemesi. Örneğin get_in(struct.foo.bar) gibi kullanılabiliyor
    foo nil döndürürse bar erişiminde exception oluşmuyor

    • Önceki Elixir sürümlerinde de mümkündü ama sözdizimi gürültülüydü
      Normal map olmayan hiyerarşiler için şöyle Access.key gerekiyordu
      get_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

    • Elixir'e en son baktığımda, “sonunda Erlang de yapmak zorundasın” gibi bir uzlaşma varmış gibi görünüyordu
      Hâlâ öyle mi, yoksa artık Erlang seviyesine inmek gerekmiyor mu?