Bir işlev bir sayı bekler, ancak projenin herhangi bir yerinde bunun yerine bir dize iletilir. Derleyici hiçbir şey söylemez, testler durumu kapsamaz ve hata yalnızca müşteri üretimde tam olarak bu kod yolunu etkinleştirdiğinde ortaya çıkar. Dinamik olarak yazılan dillerle çalışan herkes bu tür hatalara aşinadır: türler yalnızca çalışma zamanında kontrol edilir ve derleyici bunlar hakkında hiçbir varsayımda bulunmaz.
Duyurudan sonra devamını okuyun
Python, Ruby ve JavaScript, işlevsel programlama dili Elixir gibi bu prensibe göre çalışır. Kolaylık: Kod seyrek kalır ve kolayca değiştirilebilir. Fiyat: Hatalar yalnızca program beklenmeyen bir değerle karşılaştığında görünür hale gelir.
Bir örnek, 3 Haziran 2026'da yayımlanan 1.20 sürümündeki Elixir'de nelerin değiştiğini göstermektedir. Aşağıdaki işlev, Elixir'in (yazılı) anahtar-değer yapısı olan bir haritayı alır. %{schlüssel: wert}Python'daki bir sözlükle veya Ruby'deki karmayla karşılaştırılabilir) ve içerdiği alanı dönüştürür age bir dizede:
defmodule Report do
def user_age_to_string(user) do
Integer.to_string(user.age)
end
end
# An anderer Stelle im Projekt:
Report.user_age_to_string(%{age: "42"})
Integer.to_string/1 bir fonksiyon için olağan İksir gösterimidir: modül, fonksiyonun adı ve eğik çizgiden sonra arity, yani argümanların sayısı. Sürüm 1.19'a kadar (bu sürüm dahil) derleyici bu kod konusunda sessizdi; O age sayı yerine karakter dizisi içeriyor, yalnızca çalışma zamanında fark edildi. 1.20'den beri derleme sırasında bir uyarı beliriyor:
warning: incompatible types given to Report.user_age_to_string/1:
Report.user_age_to_string(%{age: "42"})
given types:
%{age: binary()}
but expected one of:
%{..., age: integer()}
İçindeki iki gösterim açıklama gerektirir (İksir'de tür adlarında her zaman boş parantez bulunur). binary() Elixir'in dize türüdür, çünkü dizeler Elixir'de dahili olarak kodlanmış ikili verilerdir. Ve içindeki elips %{..., age: integer()} başka herhangi bir anahtarın kısaltmasıdır: bu, en azından anahtara sahip olan her harita anlamına gelir age bir ile integer()bir tamsayı.
Kimse derleyiciye ne tür bir şey olduğunu söylemedi user.age olması gerekirdi. Bunu kendisi de anladı: Integer.to_string/1 bir tamsayı gerektirdiğinden alanın age bir tamsayı içeriyorsa, her arayanın tam olarak bu özelliğe sahip bir haritadan geçmesi gerekir. Sonuç önemsiz görünüyor, ancak tür açıklaması yok, yani yazılan diller gerektirdiğinden kaynak kodundaki türe açık bir referans yok (name: string TypeScript'te, String name Java'da). Elixir 1.20'de derleyici bu işi kendisi yapıyor.
Duyurudan sonra devamını okuyun
Sürüm 1.17'den bu yana dile kademeli olarak eklenen temel tür sistemi artık dildeki her yapıyı ayrıştırıyor. Yukarıdaki örnekte olduğu gibi yalnızca hatalı argümanları tespit etmekle kalmaz, aynı zamanda bir değere ilişkin bilginin birden fazla durum ayrımında nasıl hassaslaştığını, ölü kodu ve çakışan erişimleri ortaya çıkardığını da izler. Soyut gibi görünen bu durum İksir'in tarihinde bir dönüm noktasına işaret ediyor.
Yeni tip sistemin tüm avantajlarından otomatik olarak ve hiçbir şey yapmanıza gerek kalmadan yararlanabilirsiniz. Çalışma şekliyle ilgili hiçbir şeyi değiştirmenize gerek yok, mevcut kod değişmeden derlenmeye devam ediyor, kimsenin açıklama yazmasına veya yeni sözdizimi öğrenmesine gerek yok; Her çeviride ek sorun giderme işlemi kolayca yapılır.
- İlk versiyon: 2012
- Yazar: José Valim
- Süre: BEAM (Erlang/OTP)
- Paradigma: işlevsel, dinamik, 1.17'den beri kademeli olarak yazılıyor (yazılan ve yazılmayan kod bir arada mevcut)
- Tipik uygulama alanları: Web arka ucu (Phoenix, LiveView), gömülü (Sinirler), makine öğrenimi (Nx), dağıtılmış sistemler
- Paket Yönetimi: Hex, çeşitli enstrümanların bir karışımını oluşturur
- Makale sürümü: 3 Haziran 2026'da yayımlanan 1.20.0, OTP 27+ gerektirir ve OTP 29'a kadar uyumludur
İksir kısaca açıklandı
Elixir, Brezilyalı José Valim'in 2012'de yayınladığı işlevsel ve dinamik olarak yazılmış bir dildir. Erlang'ın sanal makinesi BEAM üzerinde çalışır ve buradan milyonlarca hafif işlemin (VM tarafından yönetilen, işletim sistemi işlemleri yoktur) yanı sıra denetçiler aracılığıyla arıza korumalı bir çalışma zamanı miras alır: sistemin çöken kısımlarını otomatik olarak yeniden başlatan izleme işlemleri.
Elixir en çok Phoenix web çerçevesi, Nerves gömülü çerçevesi (Raspberry Pi'den endüstriyel kontrollere kadar cihazlar için ürün yazılımı görüntüleri) ve Elixir'i makine öğrenimi dünyasına getiren Nx ile tanınır. Hepsinin ortak noktası, küçük bir fonksiyonla gösterilen programlama stilidir; bir işlemin sonucunu okunabilir bir cümleye çevirir:
defmodule Ergebnis do
def beschreibe({:ok, wert}), do: "Erfolg: #{wert}"
def beschreibe({:error, :timeout}), do: "Zeitüberschreitung"
def beschreibe({:error, grund}), do: "Fehler: #{grund}"
def beschreibe(:pending), do: "läuft noch"
end
Dört cümle, dört durum. Elixir'de bir fonksiyon aynı ada sahip birden fazla tanımdan, yani cümleciklerden oluşabilir; Kimse hangisinin koşacağına karar vermiyor if VEYA switchama argümanın biçimi. Bu örüntü eşleştirmesine örüntü eşleştirme denir. İlk madde, ilk elemanı atom olan, küme parantezleri içine alınmış sabit uzunluklu sıralı bir koleksiyon olan bir demet için geçerlidir. :ok VE; İkinci değeri değişkenle ilişkilendirin wert ve aracılığıyla ekler #{...} yanıt kümesinde, Elixir'in dize enterpolasyonu, Python'daki f dizeleriyle karşılaştırılabilir. Benzer atomlar :ok VEYA :pending Ruby'deki sembollere benzer şekilde, değeri adları olan sabitler olarak adlandırılırlar. İkinci madde özel hata durumunu tespit eder :timeout ab, üçüncüsü başka herhangi bir hata, dördüncüsü basit atom :pending. THE do: bir satırın kısaltılmış şeklidir do ... end-İlk örnekteki bloklar.
İki yapı taşı hâlâ cephaneliğin bir parçası. İlk olarak: tuple'lar gibi {:ok, wert} VE {:error, grund} bunlara sonuç kayıtları denir; neredeyse tüm iksir kütüphaneleri başarıları veya başarısızlıkları bu formda bildirir. İkinci olarak, cümlecikler, korumalar kullanılarak, anahtar kelimenin arkasındaki koşullar kontrol edilerek iyileştirilebilir. when: def halbiere(x) when is_integer(x) yalnızca tamsayılar için geçerlidir. Desenler, maddeler ve korumalar Elixir'deki klasik kontrol akışının çoğunun yerini alıyor. Ve uzun süredir klasik tipoloji sisteminin önünde bir engel olarak görülen de tam olarak bu tarzdı.
Dinamik bir favori enstrümandan tipik bir enstrümana
Elixir'e bir tip sistemi verme fikri eski bir fikirdir. Kostis Sagonas'ın Uppsala Üniversitesi'nde geliştirilmesine yardımcı olduğu Erlang Dünya Diyalizörü halihazırda İksir kodunu analiz edebiliyor. Başarılı yazma olarak adlandırılan gücü, yalnızca koddan açıkça kaynaklanan hataların raporlanmasında yatmaktadır. Ancak potansiyelini yalnızca geliştiriciler özelliklerini kullandığında geliştirir @spec-Ek açıklamalar: Gerçek koda ek olarak saklanması gereken ve ondan ayrılabilecek el yazısı imzalar. Buna yavaş analizler, hantal entegrasyonlar ve deşifre edilmesi zor mesajlar da eklenir. Bu nedenle Dialyzer hiçbir zaman Elixir geliştiricilerinin ana akımına girmedi.
José Valim, 2022'de ElixirConf EU'da yaptığı açılış konuşmasında dilin, Fransız araştırma merkezi CNRS ve Remote şirketinden alınan doktora bursuyla finanse edilen kendi tür sistemine sahip olacağını duyurdu. Bilimsel temel, bilgisayar bilimcisi Giuseppe Castagna (CNRS, Paris) tarafından, türleri kümeler olarak anlayan bir biçimcilik olan küme-teorik türler üzerine yaptığı çalışmayla sağlandı. Uygulamanın çoğunu Castagna'nın yüksek lisans öğrencisi Guillaume Duboc bizzat Valim'in yardımıyla gerçekleştirdi; Üçü, tasarım ilkelerini ortak bir belgede belgeliyor. Örüntü eşleştirmenin zaten değerlerin şekli etrafında döndüğü bir dil için bu yaklaşım, ML veya Haskell'de modellenen klasik sistemlerden daha uygundu.
Gelişim dört aşamada gerçekleşti (Şekil 1). Haziran 2024'te Elixir 1.17'nin temelleri atıldı: bir fonksiyonun diyagramlarından türetilen ilk tipolojiler, bariz çelişkiler durumunda ilk uyarılar. Elixir 1.18, Aralık 2024'te işlev çağrılarının tür kontrolünün yanı sıra resmi dil sunucusu girişimi için yerleşik JSON desteği ve arayüzleri tanıttı. Elixir 1.19, Ekim 2025'te kontrolleri protokollere ve anonim işlevlere genişleterek büyük projelerin çevirisini dört kata kadar daha hızlı hale getirdi. Sürüm 1.20 döngüyü kapatıyor: derleyici artık tüm dil yapılarının türlerini çıkarıyor.

İksir tipi sistem zaman çizelgesi (1.17 – 1.20): Dört küçük sürüm, bir ortak konu: Tür bilgisi giderek daha fazla dil yapısına dahil ediliyor. 1.20'de çıkarım gündelik hayata ulaşıyor (Şekil 1).
Çekirdek ekip, uygulamayı, üç aşamada tahliye adayları aracılığıyla çıkarım yapan bir kamu aşaması planı halinde organize etti (kutuya bakın). Üçü de Haziran başında, başlangıçta planlanan Mayıs tarihinden kısa bir süre sonra ortaya çıkan kararlı sürümde yer alıyor.
Ayrıca okuyun
Bir yanıt yazın