Здравствуйте, vdimas, Вы писали:
V>Описание самих величин — понятнее.
Дык... Именно они особо важны в прикладном смысле. Именно их в последствии будет несметное множество (если конечно вообще это кому-то надо ).
V> А вот код, где вся механика происходит — не в пример запутаннее. В то время как в варианте на С++ все понятно.
Дык, в С++ 90% нужного функционала уже встроено в язык. А ему пришлось писать все на универсальном средстве. Он же типы вручную генерирует.
V>Жаль... я именно это и имел ввиду. Спасибо за своевременный ответ.
Здравствуйте, CrystaX, Вы писали:
CX>Было бы очень интересно и познавательно вести разработку параллельно — на C++ и на Nemerle. Исключительно из спортивного интереса.
Мужики я преклоняюсь перед вашей настойчивостью и самоотверженностью, но такие усилия лучше было бы направить на что-то более полезное.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [Nemerle] Семантический контроль над размерностями
Да куда он от нас денется... Я вот только свою инструментальную либу парсеров закончу на C# и с собой возьму. А то, насколько я понял, чтобы сделать на Немерле совсем уж эдакое, возможно, придется самим парсить и разбирать свои DSL. Иными словами я бы не хотел шарахаться от задач только потому, что они вдруг могут потребовать небольшого парсинга, выходящего за рамки регэкспов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: [Nemerle] Семантический контроль над размерностями
Да куда он от нас денется... Я вот только свою инструментальную либу парсеров закончу на C# и с собой возьму. А то, насколько я понял, чтобы сделать на Немерле совсем уж эдакое, возможно, придется самим парсить и разбирать свои DSL. Иными словами я бы не хотел шарахаться от задач только потому, что они вдруг могут потребовать небольшого парсинга, выходящего за рамки регэкспов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Nemerle] Семантический контроль над размерностями
Здравствуйте, CrystaX, Вы писали:
CX>Предлагаю следующий вариант развития событий. У меня есть определенные мысли по развитию подобного инструмента, я их частично воплотил в новой версии. Было бы очень интересно и познавательно вести разработку параллельно — на C++ и на Nemerle. Исключительно из спортивного интереса. Весьма возможно, что кое-что из того, что мне далось с таким трудом на C++, будет легко сделать на Nemerle.
Интересная идея. И я вижу много чего, чего можно было бы в мой код добавить. Но... время, всё упирается во время. Мне, к сожалению, не нужно этот код использовать в своих приложениях, поэтому я не знаю, смогу ли развивать код дальше.
Здравствуйте, VladD2, Вы писали:
VD>А это не может вызвать проблем? Не окажется, что постфикстные операторы интерпретированы не врено?
Могут быть проблемы в случае, если существует такой же бинарный оператор. Например, такой код:
def x = 100 -
При компиляции выдаёт ошибки:
error : parse error near operator `-': unexpected end of token sequence
error : parse error near separator or closing bracket: expecting expression
Причём проблема именно в существовании такого же бинарного оператора, потому что такой код выдаёт те же ошибки:
struct SomeValue
{
public Value : double;
this(value : double)
{
Value = value;
}
static public @-(value : SomeValue) : SomeValue
{
SomeValue(-value.Value)
}
};
def x = SomeValue(100);
def y = x -
Re[3]: [Nemerle] Семантический контроль над размерностями
Здравствуйте, Oyster, Вы писали:
O>Интересная идея. И я вижу много чего, чего можно было бы в мой код добавить. Но... время, всё упирается во время. Мне, к сожалению, не нужно этот код использовать в своих приложениях, поэтому я не знаю, смогу ли развивать код дальше.
Согласен, с временем тяжело. Но ведь никто нас не гонит, не так ли? У этой библиотеки есть большой потенциал (далеко не только в области вычислений физических величин) и жалко было бы его упускать.
O>Тут Влад прав
— лучше направить усилия на что-то более нужное (в моём случае).
Ты знаешь, после того, как я написал эту библиотеку, я как-то самопроизвольно начал раскладывать в своих проектах все используемые величины по ортам — и это очень сильно помогает. Физические величины — это только пример, не более того.
Вот более жизненный пример. Какая-нибудь система учета, оперирующая понятиями 1) деньги и 2) различные грузы (например, сахар и мука). Введем орты нашей системы координат — деньги, килограмм-сахар и килограмм-мука.
Теперь цена на сахар — это не то же самое, что цена на муку и помножив руб/кгсах на кгмука я получу не руб, а руб*кгмука/кгсах, о чем мне тут же напомнит компилятор. Конечно же, сейчас трудно себе представить такое практическое применение моей библиотеки, но с новой версией это будет намного проще.
В общем, я беру таймаут на неделю. Затем выложу новую версию. Если будет интересно с ней поиграться — you are welcome.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[3]: [Nemerle] Семантический контроль над размерностями
Здравствуйте, VladD2, Вы писали:
CX>>Было бы очень интересно и познавательно вести разработку параллельно — на C++ и на Nemerle. Исключительно из спортивного интереса.
VD>Мужики я преклоняюсь перед вашей настойчивостью и самоотверженностью, но такие усилия лучше было бы направить на что-то более полезное.
Эта библиотека (по крайней мере заложенный в ней потенциал) — очень полезный инструмент. Более развернутый ответ см. здесь
Здравствуйте, CrystaX, Вы писали:
CX>Ты знаешь, после того, как я написал эту библиотеку, я как-то самопроизвольно начал раскладывать в своих проектах все используемые величины по ортам — и это очень сильно помогает. Физические величины — это только пример, не более того.
Ну мне как-то всё равно не надо это в работе, если честно Есть и более важные вещи.
На этот код я убил, наверное, около двух рабочих дней. Больше убивать не хочется... Возможно, если интерес снова проснётся, я и займусь им, но гарантий на этот счёт никаких дать не могу.
CX>В общем, я беру таймаут на неделю. Затем выложу новую версию. Если будет интересно с ней поиграться — you are welcome.
Помнится, ты ещё говорил, что на выходных попробуешь с Nemerle покопаться... настоятельно рекомендую это сделать
Re[5]: [Nemerle] Семантический контроль над размерностями
Здравствуйте, Oyster, Вы писали:
O>Ну мне как-то всё равно не надо это в работе, если честно Есть и более важные вещи.
Я не настаиваю.
O> Помнится, ты ещё говорил, что на выходных попробуешь с Nemerle покопаться... настоятельно рекомендую это сделать
Копаться я и раньше начал. Я твой код хочу детально разобрать. А Nemerle — что ж, язык неплохой, но мне интересен пока только как объект познания, на практике его применить не могу.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[6]: [Nemerle] Семантический контроль над размерностями
Здравствуйте, CrystaX, Вы писали:
CX>Копаться я и раньше начал. Я твой код хочу детально разобрать.
Ну тогда ты эта... обращайся... если что
CX>А Nemerle — что ж, язык неплохой, но мне интересен пока только как объект познания, на практике его применить не могу.
Да я тоже... пока что. Вроде намечается проектик на одного человека, на который можно будет выбить Nemerle. Скрещиваю пальцы на удачу
Re[3]: [Nemerle] Семантический контроль над размерностями
Недавно у меня снова выдалась свободная минутка, и я поработал над кодом библиотеки. Соответственно, последний претерпел некоторые изменения.
Самым главным нововведением является, безусловно, генерация value-типов вместо reference-типов, что должно ускорить работу с этими самыми физическими величинами.
Замечание: К сожалению, работа с value-типами пока что неполноценна, так как в компиляторе имеется досадный баг, не позволяющий комфортно работать с генериками при генерации типов. Неполноценность заключается в том, что при передаче одного физического значения в конструктор другого происходит боксинг. Такое поведение будет исправлено сразу, как пофиксят баг в компиляторе.
Кроме этого, в библиотеку были внесены и другие изменения:
Произведён рефакторинг и исправление ошибок. Последних оказалось неприятно много (что и неудивительно для решения, собранного на скорую руку).
Немного изменился генерирующий макрос. Теперь это макро-атрибут сборки, и работать с ним в итоге стало существенно удобнее (его можно вешать как в сборке, в которой производятся сами вычисления, так и в подключаемой сборке).
Формат DSL также немного поменялся. Например, теперь можно определять юниты в корневом пространстве имён (Oyster.Units) и задавать алиас и коэффициент нормализации одновременно. Это позволяет, например, поместить все внесистемные единицы в одно пространство имён (то, о чём говорил Кодт
Новую версию проекта можно забрать тут: Oyster.Units.0.02.zip. Билдить рекомендуется или на последней версии Nemerle из SVN, или на снапшоте r6176 и выше. Для тех, кому лень качать проект, я выложил новые исходники (кроме тестового примера — он изменился несущественно) в ответе на это сообщение.
PS: Направления дальнейшего развития библиотеки — избавиться от боксинга и ввести физические литералы (то, о чём так много говорили в этом топике).