Alice Ml Programlama Dili

Kavramlar

Bu rapor, Alice’in dil ve sistemine ve Alice’in özelliklerine kısa bir giriş niteliğindedir.

  • Standart ML uyumluluğu
  • Etkileşimli kullanım: bildirimleri değerlendirmek ve sonuçlara göz atmak
  • Laziness: şeffaf tembel değerlendirme
  • Concurrency: threadler ve veri akışı eşzamanlılığı
  • Promises: vadeli işlemler
  • Packages: dinamik yazım ve birinci sınıf modüller
  • Pickling: platformdan bağımsız kalıcılık
  • Components: platform bağımsızlığı ve tembel dinamik bağlantı
  • Distribution: uzak süreçler ve vekiller
  • Constraints: eş zamanlı kısıt programlama ve programlanabilir arama

Alice Ml Hakkında

Alice ML, Saarland Üniversitesi, Saarbrücken, Almanya’daki Programlama Sistemleri Laboratuvarı tarafından tasarlanan bir programlama dilidir. Tembel değerlendirme, eşzamanlılık (çok iş parçacıklı ve uzaktan yordam çağrıları yoluyla dağıtılmış bilgi işlem) ve kısıtlamalı programlama desteği ile zenginleştirilen Standart ML’nin bir lehçesidir.

Alice, Standart ML’yi öncüllerinden ayıran çeşitli şekillerde genişletilir. Alice, bağımsız bir çalıştırma işleci tarafından sağlanan bir değeri temsil eden gelecekteki bir tür kullarak, temel dilin bir parçası olarak eş zamanlılık özellikleri sağlar.

Gelecekteki bir değeri kullanan bir thread, bunu yapan thread hesaplamayı tamamlayana kadar değere erişim girişimi engelleyecektir. Bir vaat olarak adlandırılan ve bir threadin başka bir threade göre hesaplayacağı gelecekteki bir değeri vermesine olanak tanıyan ilgili bir kavram da sağlanmaktadır. Gelecekteki (future) ve vaat edilen (promised) tip değişkenler, veri akış senkronizasyonunu gerçekleştirmek için kullanılır.

Alice, Haskell fonksiyonel programlama dilinde olduğu gibi, standart ML’nin geleneksel istekli değerlendirme stratejisine kıyasla, programlarda tembel bir değerlendirme stratejisinin kullanılmasına imkan sağlamaktadır.

Haskell tembel modeli varsayılan olarak kullanırken, Alice tembel olarak değerlendirmek için bir hesap makinesinin açık bir programlama ifadesine ihtiyaç duyan, varsayılan olarak istekli bir değerlendirme modeli kullanır.

Saarland Üniversitesi’nden Alice uygulaması, Basit Genişletilebilir Özet Makinesi (SEAM) sanal makinesini kullanıyor.

Alice’in erken sürümleri, Alice ve Oz kodu arasında arabirime izin veren Mozart Programlama Sistemi (Oz) sanal makinesinde (VM) çalıştırıldı.

Alice’in uzaktan yordam çağrısı, bir bilgisayardan diğerine hesaplanacak bir kod gönderebileceği için sanal makineye bağlıdır.

Interactive Toplevel

Alice ML, Standard ML’nin bir uzantısıdır ve Alice interaktif toplevel, diğer SML sistemlerindeki interaktif komutlara çok benzer şekilde çalışır. Input noktalı virgül ile sonlandırılır. Basit bir hesaplama örneği verelim:

- 4+5;
val it : int = 9

İfade değerlendirilir ve sonucu çıkarılmış tür int ile birlikte bastırılır. Anonim ifadeler (it) ismi alır, böylece ardışık girdilere başvurulabilir.

- 2*it;
val it : int = 18

Tek satırlık bir Hello World programı:

- print "Hello world!\n";
Hello world!
val it : unit = ()

Bir işlev bildirimi girmek daha karmaşıktır. Faktoriyel hesaplayan bir fonksiyon:

fun fac 0 = 1
| fac n = n * fac (n-1)
val fac : int -> int = _fn

Laziness

Standart ML tamamen istekli (sıkı) bir dil olsa da, Alice ML isteğe bağlı tembel değerlendirme için destek sağlar. Herhangi bir ifade lazy anahtarıyla öne sürerek tembel olarak değerlendirilebilir.

val x = lazy 4+5
val x : int = _lazy

Lazy suspensions yukarıda gösterildiği gibi etkileşimli üst seviyedeki çıktıdaki _lazy gösterimiyle temsil edilir. X’in değeri, aslında gerekmeden önce hesaplanmaz. Örneğin,

(x,x)
val it : int * int = (_lazy, _lazy)
x
val it : int = _lazy
fun pair x = (x,x)
val pair : 'a -> 'a * 'a = _fn
pair x
val it : int * int = (_lazy, _lazy)
x > 10
val it : bool = false
x
val it : int = 9

Mapz ve zipz anahtarlarını kullanarak Fibonacci sayılarının akışını hesaplamak mümkündür.

val rec fibs = 1 :: 1 :: (lazy mapz op+ (zipz (fibs, tl
fibs)))
56
val it : int list = 1 :: 1 :: _lazy
List.nth (fibs, 10)
val it : int = 89
fibs
val it : int list =
1 :: 1 :: 2 :: 3 :: 5 :: 8 :: 13 :: 21 :: 34 :: 55 :: 89
:: _lazy

Alice ML, laziness’in side effects ile özgürce birleştirilmesini sağlar.

val n = lazy (print "Huhu!\n"; 13)
val n : int = _lazy
n+1
Huhu!
val it : int = 14

Concurrency

Alice eş zamanlılık desteği ile SML’yi genişletir. Eşzamanlılık hafiftir: Sistem onlarca veya yüzbinlerce thread’i eş zamanlı işleyebilir. Alice’deki eş zamanlı programlama, eşit olarak vadeli işlem modeline dayanır.

Data-flow synchronization

Futures değerler etrafında dolaşılabilir. Bir işlem, gelecekte beklediği değeri gerçekten istediğinde, ilgili thread gelecek belirlenene kadar bunu engeller. Bu, veri akışı senkronizasyonu olarak bilinir ve üst düzey eş zamanlı programlama için güçlü bir mekanizmadır.

Failed futures

Eşzamanlı bir hesaplama başarısız olursa bu durumda future başarısız olur. Başarısız bir future’ın başarısızlığın nedenini belirten bir istisna vardır. Başarısız bir future, bir client’ın kendi başına başarısız olmasına neden olmaz. Yalnızca bir client gerçekte başarısız future’ı istediğinde, hata istisnası, talep noktasında yeniden gündeme getirilir.

Atomicity

Eş zamanlı bir ortamda çevreyle doğru işlem yapmak, atomik işlemlerin kullanılabilirliğini gerektirir. Alice, referanslar için atomik bir değişim operasyonu sağlar.

Promises

Çoğu zaman, geleceği ve sonuçlarını ileten hesaplama arasındaki doğrudan bağlantı çok esnek değildir. Bu tür durumlarda Alice promises’i önerir. Promises, future’ın açıkça ele alınmasını sağlar. Promise oluşturulduğunda, onunla birlikte bir future oluşturulur.

Packages

ML’nin en büyük profesyonellerinden biri, güçlü statik tipi sistemidir. Bununla birlikte, tüm yazma işlemlerini statik olarak gerçekleştirmenin mümkün olmadığı programlama görevleri vardır. Örneğin, ayrı işlemler arasında veri yapılarını değiştirmeyi düşünelim. Açık programlama gibi görevlere eşlik etmek için, Alice, statik tipi sistemini kontrollü bir dinamik yazım biçimi ile tamamlar. Alice, dinamik olarak yazılan değerlerin type package’ını sağlar. Bir package aslında bir çift (high- order) modüldür ve onun imzasıdır

Pickling

Uygulamalar nadiren yalnız çalışır. Birçok uygulama, diğer uygulamalarla veri alışverişi yapmaya ya da çalıştırmalar arasında veri kalıcı hale getirmelidir. Sonuç olarak, süreçlerden verileri dışa aktarmak ve içe aktarmak mümkün olmalıdır. Dil veri yapılarının dışa aktarımı genellikle serileştirme veya pickling (asitleme) olarak bilinir. Alice, asitleme için üst düzey bir destek sağlar; diğer bir deyişle, kod ve tüm modüller dahil rasgele veriler silinebilir. Pickles platformdan bağımsızdır ve dolayısıyla heterojen ağlar, özellikle de İnternet üzerinden değişim için uygundur. Birinci sınıf fonksiyonlar pickling ile Alice süreçleri, alışverişi değiştirebilir. Pickling library, package’ları temel alır. Sonuç olarak, import / export varlıkları modüllerdir. Bu, işlemler arasında türlerin ve imzaların bile değiştirilebileceğini ima eder.


Yapılan Yorumlar
Erdem OFLAZ

Bir mum, diğer mumu tutuşturmakla ışığından bir şey kaybetmez.
 Kategoriler
 Popüler yazılar