Версия 0.04
От: Oyster Украина https://github.com/devoyster
Дата: 14.04.06 05:43
Оценка: 54 (3)
Ну вот и следующий билд библиотеки подоспел: Oyster.Units.0.04.zip (собирать на Nemerle версии r6192, не ниже).

В этом билде разработчики языка исправили кое-какие баги, поэтому код библиотеки тоже был исправлен местами. Но самое главное, конечно, не это. Самое главное то, что этот билд добавляет возможность работы с физическими литералами, о которых в этом топике уже писали. В общем, теперь можно писать код вроде такого:

def m3 = 1 g;
def m4 = Si.Mass(m1);

WriteLine($"Mass in SI: $m4, in CGS: $m3");

def x1 = Si.Area(1 cm * 10 m);

WriteLine($"Area of 1 cm * 10 m = $x1 m")

1 g, 1 cm и 10 m из примера выше — это как раз физические литералы. Задаются они непосредственно в DSL вот таким вот образом:

basisUnits (Si)
(
    Mass[ kg ],
    Length[ m ],
    Time[ sec ],
    Temperature[ K ],
    CurrentStrength[ A ],
    LightIntensity,
    QuantityOfSubstance
)

Т.е. после любого имени юнита можно указать имя литерала в квадратных скобках (уникальное в пределах данного описания). При этом в библиотеку, в которой находится описание юнитов, будет скомпилирован соответствующий макро-оператор, доступный при подключении пространства имён Oyster.Units.Macros.

У решения всё равно есть некоторые недостатки:


Тем не менее, все эти недостатки достаточно невелики и не мешают пользоваться библиотекой.


В заключение хочу сказать, что библиотека подобралась к своему логическому завершению и вряд ли будет развиваться дальше. Возможно, будут исправляться ошибки, но не более того.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.