loom
1// Инкапсуляция файла с моделью в тип LorenzSystem
2encaps "diff/LorenzSystem.diff" type LorenzSystem;
3
4// Инициализация объекта модели
5LorenzSystem ls = {
6sigma : 10.0,
7b : 8.0/3,
8R : 28.0,
9x : 10.0,
10y : 1.0,
11z : 1.0,
12};
13
14// Модуль построения графиков
15module "Chart" chart("Аттрактор Лоренца");
16
17// Отложенное выполнение. График гарантировано построится перед выходом из зоны видимости
18finally chart.show();
19
20// Хороший стиль инициализации внешнего модуля, как неизменяемого (immutable)
21// (хотя в данном случае модуль scene изменяет своё состояние)
22module "Scene" scene({
23// Лямбда с замыканием в качестве callback-функции
24callback : func [chart,ls] ()
25{
26chart.addPoint("Проекция x-y", ls.x, ls.y);
27chart.addPoint("Проекция x-z", ls.x, ls.z);
28},
29callback_interval : 100,
30// Инициализация начальных данных моделирования
31t : 0.0,
32tk : 50.0,
33dt : 0.01,
34// Наполнение массива объектов сцены.
35actors : [ls],
36});
37
38// Запуск модуля в параллельном режиме. Запуск через run не гарантирует, что модуль будет
39// запущен в том же потоке или на том же компьютере. Callback-функция будет вызываться на
40// этой стороне. При этом будет производиться синхронизация состояния объекта ls.
41run scene;
42
43// Завершение исполнения данного файла будет ожидать завершения исполнения модуля scene.
44// В этом случае эскейп-анализатор не вынесет объект ls из стека данного модуля.
45join scene;
46