Alice (мова програмування)

Alice — мова функціонального програмування, розроблена в лабораторії Programming Systems Lab в Саарландському університеті. Це відгалуження мови Standard ML, доповнене лінивими обчисленнями, конкурентністю (багатонитевістю і розподіленими обчисленнями на основі виклику віддалених процедур) і програмування в обмеженнях.

Реалізація Alice Саарландського університету використовує віртуальну машину SEAM (Simple Extensible Abstract Mashine). Вона відноситься до вільного програмного забезпечення і використовує компіляцію «на льоту» як в байт-код, так і в рідний код для архітектури x86. Ранні версії Alice працювали в віртуальній машині Mozart/Oz, надаючи можливість взаємодії кода на Alice і на Oz.

Можливість виклику віддалених процедур в Alice залежить від віртуальної машини, тому що вона використовує безпосередню пересилку виконуваного коду з одного комп'ютера на інший. Alice доповнює Standart ML рядом примітивів для екзотичної моделі нестрогих обчислень, за допомогою яких легко реалізовується паралелізм. Потоки можуть бути створені за допомогою зарезервованого слова spawn.

Приклад

Розглянемо нативний алгоритм для знаходження чисел Фібоначчі:

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

Для більших значень n вираз fib n займе багато часу. Цей вираз може бути виконаний в окремому потоці за допомогою:

 val x = spawn(fib(n));

Тепер змінна x зв'язана з так званим майбутнім значенням. Коли будь-якій операції буде потрібне значення x, вона буде заблокована доти, доки потік не закінчить роботу. Для кращого використання паралелізму можна буде визначити fib так:

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

Див. також

Посилання