Alice (limbaj de programare)

Alice
Semantică funcţional
Clasa de limba limbaj de programare paralel [d] , limbaj de programare cu constrângeri [d] ,de programare funcționalșilimbaj de programare
Tipul de execuție compilarea la bytecode pentru mașina virtuală
Aparut in 2002
Autor Laboratorul de sisteme de programare, Universitatea Saarland
Tip sistem Hindley-Milner
Implementări majore Alice (singura)
A fost influențat Standard ML , Oz
Licență Licență MIT
Site-ul web ps.uni-saarland.de/alice/

Alice  este un limbaj de programare funcțional dezvoltat la Laboratorul de sisteme de programare de la Universitatea Saarland . Este un dialect al limbajului ML Standard , amplificat cu evaluare leneșă , concurență ( multithreading și calcul la distanță cu apeluri de proceduri ) și programare cu constrângeri .

Implementarea de către Alice a Universității Saarland utilizează mașina virtuală SEAM (Simple Extensible Abstract Machine) . Este un software gratuit și folosește compilarea rapidă atât pentru bytecode , cât și pentru codul nativ x86 .

Versiunile timpurii ale lui Alice au rulat în mașina virtuală Mozart / Oz , permițând interoperarea codului de pe Alice și Oz.

Capacitatea de a apela proceduri de la distanță în Alice depinde de mașina virtuală, deoarece folosește transferul direct al codului executabil de la un computer la altul.

Alice extinde Standard ML cu un număr de primitive pentru un model exotic de calcul non-strict numit call-by-targeting care implementează cu ușurință paralelismul . Firele pot fi create folosind cuvântul rezervat spawn .

Exemplu

Luați în considerare un algoritm nativ pentru calcularea numerelor Fibonacci :

fun fib 0 = 0 | fib 1 = 1 | fib n = fib ( n - 1 ) + fib ( n- 2 );

Pentru valori mari ale lui n , calculul fib nva dura mult timp. Acest calcul se poate face într-un thread separat cu:

val x = spawn ( fib ( n ));

Variabila x este acum asociată cu o așa-numită valoare viitoare . Când o operație are nevoie de o valoare imediată a x , se va bloca până când firul de execuție a terminat calculul. Pentru o mai bună utilizare a paralelismului, îl puteți defini chiar fibastfel:

fun fib 0 = 0 | fib 1 = 1 | fib n = spawn fib ( n- 1 ) + fib ( n- 2 );

Vezi și

Note

Link -uri