На выходных наткнулся на сие чудо. И впечатления довольно противоречивые... Простая система типов - всего 2 базовых:
1.аtom - простой (неделимый) - включающий в себя целые и действительные числа (переходы между ними автоматические)
2. sequence -составной - иерархическая последовательность (возможно пустая) , представляет собой произвольную комбинацию элементов атомарного типа и последовательностей.
и 2 специальных пример: {1, 4.5, {2, 'h'},"Hello"}
1. integer - 31 битовое знаковое целое
2. object - обобщенный тип - его значениями могут быть как последовательности так и атомы.
Типизация динамическая строгая. Выделенного логического типа нет - используется сишная интерпретация:
логические операции возвращают 0 или 1.. операции сравнения трактуют 0 как ложь , все остальное - как истину.
Строка трактуется как последовательность символов ("Hello" эквивалентно {'H','e','l','l','o'})
Есть разделение на процедуры и функции. Многозадачность на уровне языка.
Eсть возможность создания пользовательского типа (по факту представляет функцию возвращающую целое число - если 0 то рассматриваемое значение не принадлежит этому типу). Модулей нет - есть пространства имен и модификаторы видимости переменных и функций. Есть goto и label'c
тяжелое наследие бэйсиковского прошлого. Указателей нет (на уровне сущностей языка). Громадная стандартная библиотека (Руби и Луа отдыхают). OOП - в чистом виде отсутствует (эмулируется как в Луа).
Есть автогенерация документации и модульное тестирование.... Есть 64 и 32 битные реализации под основные платформы...
в бета тестировании реализация под армы...
Четыре возможных способа распространения программ:
1. исходник
2. IL код (запускается интерпретатором на хост -машине )
3. IL код с присоединенным интерпретатором (в ввиде exe)
4. Возможна трансляция и автоматическая сборка и компиляция gnu - шным СИ.
Быстродействие интерпретируемого кода - в несколько раз превосходит Питонный и Луашный (на (цело)численных задачах
). Ну про откомпилированный код говорить смысла нет...
Визуально текст программ производи (ИМХО) хорошее впечатление - пример (быстрая сорировка):
include std / console .e
sequence original_list
function merge_sort ( sequence x)
-- put x into ascending order using a recursive merge sort
integer n, mid
sequence merged , a, b
n = length (x)
if n = 0 or n = 1 then
return x -- trivial case
end if
mid = floor (n/2)
a = merge_sort (x [1.. mid ]) -- sort first half of x
b = merge_sort (x[mid +1.. n]) -- sort second half of x
-- merge the two sorted halves into one
merged = {}
while length (a) > 0 and length (b) > 0 do
if compare (a[1] , b [1]) < 0 then
merged = append ( merged , a [1])
a = a [2.. length (a)]
else
merged = append ( merged , b [1])
b = b [2.. length (b)]
end if
end while
return merged & a & b -- merged data plus leftovers
end function
procedure print_sorted_list ()
-- generate sorted_list from original_list
sequence sorted_list
original_list = {19 , 10, 23, 41, 84, 55, 98, 67, 76, 32}
sorted_list = merge_sort ( original_list )
for i = 1 to length ( sorted_list ) do
display (" Number [] was at position [:2] , now at [:2] ",
{ sorted_list [i], find ( sorted_list [i], original_list ), i}
)
end for
end procedure
print_sorted_list () -- this command starts the program
Кто желает высказаться по сабжу.. Кстати Борис.. не рассматривали как замену Луа?