Здравствуйте, Трурль, Вы писали:
Т> На Haskell — надо постараться.
Вот идея
type Matrix= Array Int (Array Int Double)
type State = (Matrix,Matrix,Double,Int,Int,Int)
get_i (m,n,d,i,j,k) = i
set_i (m,n,d,i,j,k) i' = (m,n,d,i',j,k)
...
get_mij (m,n,d,i,j,k) = m!i!j
set_mij (m,n,d,i,j,k) x = (m//[(i, m!i//[(j,m!i!j)]) ],n,d,i,j,k)
...
Сергей Губанов wrote:
> C>>Невозможность создания удобных типов с эстафетным владением — это
> вообще минус Оберона.
> К>А уж с эстафетной концевой рекурсией... Ах мечты мечты.
> А что такое "тип с эстафетным владением" и "эстафетная концевая
> рекурсия"?
В Обероне нет политик владения как таковых (так как это язык с
автоматическим управлением памятью и без нормальной семантики
автоматических объектов), но можно выделить два типа владения:
разделяемое и монопольное.
Разделяемое владение — это объекты в куче, они существуют пока на них
есть ссылки с корней и каждая ссылка является "владеющей".
Монопольное владение — это value-типы. Они живут ровно до того времени,
пока не умрет их владелец (объект или стековый фрейм).
В эстафетной политики владения время жизни объекта определяется временем
жизни владельца, но владелец может меняться. В Обероне это могло бы быть
реализовано так:
//a и b - это value-типы
a:=b; //Обычное копирование. После него a=b.
b:=c;
a<=b; //Перемещение, 'a' равно 'c', но b - пусто.
То есть при эстафетной передаче не происходит реального копирования.
Наличие родного эстафетного типа даст оптимизирующему компилятору
множество возможнестей оптимизации (в частности, здесь можно было бы
сразу написать a:=c).
> Что такое просто концевая рекурсия это я понимаю, а эстафетная?
Оптимизация при которой не происходит ненужного копирования объектов при
концевой рекурсии.
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0 beta
Кодт wrote:
> На самом деле, эстафетное владение в Обероне (равно как в любом языке
> со сборкой мусора) — это раз плюнуть.
> POINTER TO ARRAY OF ARRAY OF REAL — и всё.
Это неинтересно и неспортивно — получается обычный GC-объект со всеми
недостатками.
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0 beta
Здравствуйте, Владик, Вы писали:
C>>Надо учиться с функциональных языков — хорошо мозги прочищает.
В>Вот в этом не уверен. Все-таки человеку свойственна итерация А для последующего прочищения мозгов — да, самое то
Дык, если изначально это не сделать, то большинству после освоения императивного подхода будет просто лень изучать что-то другое...
... << RSDN@Home 1.1.4 stable rev. 510>>