От: | Mamut | http://dmitriid.com | |
Дата: | 12.01.10 16:22 | ||
Оценка: | 28 (5) |
efene — это язык программирования, который работает поверх виртуальной машины Erlang'а.
Идея языка заключается в том, чтобы предоставить альтернативный синтаксис Erlang'а людям, более знакомым с языками вроде Java, C, C++, C#, Javascript.
На занный момент язык почти на 100% совместим с Erlag'ом (а в идеале бует таковым), и компилятор позволяет транслировать исходные коды efene в читаемый исходник на Erlang'е. Язык также добавляет некотрый синтаксический сахар.
Примеры можно посмотреть здесь: http://marianoguerra.com.ar/efene/#examples
# arraycb.fn
# http://rosettacode.org/wiki/Apply_a_callback_to_an_Array
square = fn (N) {
N * N
}
# list comprehension
squares1 = fn (Numbers) {
[square(N) for N in Numbers]
}
# functional form
squares2a = fn (Numbers) {
lists.map(fn (N) { square(N) }, Numbers)
}
# functional form with lambda
squares2b = fn (Numbers) {
lists.map(fn (N) { N * N }, Numbers)
}
# no need for a function
squares3 = fn (Numbers) {
[N * N for N in Numbers]
}
run = fn () {
Numbers = [1, 3, 5, 7]
io.format("squares1 : ~p~n", [squares1(Numbers)])
io.format("squares2a: ~p~n", [squares2a(Numbers)])
io.format("squares2b: ~p~n", [squares2b(Numbers)])
io.format("squares3 : ~p~n", [squares3(Numbers)])
}
# concurrent.fn
is_zero = fn (0 FunTrue otherwise _) {
FunTrue()
} (_ _ otherwise FunFalse) {
FunFalse()
}
say = fn (Pid, Str) {
io.fwrite("~s~n" [Str])
Pid ! done
}
wait = fn (N) {
receive (done) {
is_zero(N { 0 } otherwise{ wait(N - 1) })
}
}
run = fn () {
spawn(concurrent say [self(), "Enjoy"])
spawn(concurrent say [self(), "Roseta"])
spawn(concurrent say [self(), "Code"])
wait(2)
ok
}