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