Re[2]: NUDA
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.04.11 17:46
Оценка: 1 (1)
Здравствуйте, _nn_, Вы писали:

__>Интересны проблемы о которых автор говорит в конце доклада.

__>Это ограничение языка или все же есть решения ?

Скажем так — трудности есть, но их можно обойти.

__>Кроме того, Nemerle не является идеальным расширяемым языком для высокопроизводительных вычислений.


Интересно, а кто является? На мой взгляд до N2 таковых не было и вряд ли появится.

__>* Прежде всего, получение семантической информации внутри макросов затруднено.

__>В частности, информация об объявленных переменных и типах выражений становится доступной только в процессе развёртки макросов.
__>Если же требуется и получить информацию, и сохранить макросы в дереве исходного кода, требуется использовать обходные пути, которые не всегда работают.

Тут трудно что-то конкретно сказать. Обходные пути есть и они работают. Что автор имел под "не всегда" я не знаю.

Обходных путей несколько:
1. Если нужно дождаться появления одного типа (или небольшого их количества), то использовать методы typer.TypeExpr() и typer.DelayMacro(). Например, этот метод используется в реализации макроса foreach.
2. Если нужно работать с нераскрытыми макросами но при этом анализировать типы (обычно это нужно при массовой генерации кода, как например, в случае с макросом реализующим linq), то лучше использовать методом typer.TransformWhenAllTypesWouldBeInfered() в сочетании все с тем же typer.TypeExpr(). TransformWhenAllTypesWouldBeInfered позволяет дождаться когда код метода будет полностью типизирован. При этом будет доступно PExpr. Причем в его свойстве TypedObject будет содержаться соответствующая ветка типизированного AST (обычно TExpr).
3. Запомнить ссылку на PExpr являющийся телом метода и вызвать типизацию тела метода вручную. При этом типизация будет произведена дважды, но за-то будет полный контроль над происходящим. Как и в случае пункта 2, после окончания типизации тела метода в прикопаном PExpr будут доступны свойства TypedObject.

Подозреваю, что автор просто не был знаком с этими подходами. По крайней мере с последними двумя.

Собственно это все довольно сложно и в N2 я планировал упростить это дело.

__>* Во-вторых, все функции в Nemerle-программе транслируются независимо, и нет возможности получить код одной функции из другой функции.


Так и есть. И по другому было бы сложно сделать.

__>Как следствие, реализация преобразований типа встраивания функций или генерации специальных версий функций для определённых наборов параметров затруднены.


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

__>* В-третьих, для инициирования преобразований требуется применять макросы; возможность инициирования преобразований через определённые шаблоны кода отсутствует.


Есть такое. Подобные преобразования опят таки лучше осуществлять на поздних стадиях типизации. Это уже не макросы понимании Немерла. Это некие оптимизаторы. Короче, см. выше.

__>Соответственно, нет возможности выполнить преобразования, добавляющие новую семантику без добавления синтаксиса — как добавление в язык массивного программирования.


Не уверен, что это вообще хорошая идея — менять семантику без введения нового синтаксиса. Так можно запутать программистов. В прочем, если речь идет об оптимизациях (как говорилось выше), то опять же см. выше.

__>* Наконец, в языке отсутствует гибкий механизм назначения атрибутов вершинам дерева кода и переменным.


Вообще не понял о чем идет речь.

__>Всё это говорит о том, что для высокопроизводительных вычислений потребуется разработать более гибкий расширяемый язык программирования.


Ну, специально для "высокопроизводительных вычислений" вряд ли нужно что-то делать. Но Н2 как раз задумывается как более гибкий и более расширяемый.

Собственно, если автор хочет, то пока не поздно примкнуть к его проектированию или хотя бы описать свои требования более детально.

__>Но для этого сначала потребуется попробовать решить при помощи NUDA и Nemerle более широкий круг задач — чтобы определить требования, предъявляемые к новому языку.


Само собой. Но автор вроде этим и занимался.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.