Re[16]: Оффтопик: Nemerle
От: FDSC Россия consp11.github.io блог
Дата: 07.09.06 20:33
Оценка:
Здравствуйте, VladD2, Вы писали:

FDS>>Я именно их и смотрел (и там, и там). Первым делом. Но создалось впечатление, что они пытаются научить языку по примерам. Я так и не нашёл ничего похожего на спецификаию C#.


VD>Так и есть, но спецификация совершенно не обязательна для изучения языка.


Но лучше бы, если бы была

VD>Вот только можно было бы опустить типы параметров. Все и так очевидно. Так что вот такой код:

VD>
VD>using System.Console;

VD>def F2(x)
VD>{
VD>  def FC(y) { 2 * y + x }

VD>  FC
VD>}

VD>def F1(x) { F2(x)(5) }

VD>WriteLine(F1(100))
VD>

VD>естественно 110.

VD>Смысла он не имеет, но демонстриует одно из важных свойств языка — вычисления над фукнциями.


Я его тут скомпилировал. Прикол в том, что он у меня не работает: выдаёт exception. То ли у меня руки кривые и я его неправильно скомпилил, то ли не знаю что

FDS>>Или, например, я не нашёл ответ на вопрос: могу ли я во время компиляции выделить макросом кусок уже разобранного nemerle кода и выполнить с ним специфические действия (например, проверку на освобождение ресурсов или на диапазон выходных значений по заданным входным и выходным)?


VD>Такие вопросы можно задать на форуме. Если вопрос действительно интересен, то отвечу — можно. Хотя это и не тривиально.


Хм, на самом деле, было бы неплохо, если бы это описывалось в документации. Первое, что мне в голову пришло — это именно анализ дерева.

FDS>> Могу ли я во время компиляции выполнить некоторые операции программы пользователя в штатном режиме (что-то вроде встроенного ЮТ)? [и как мне это сделать и где это описано]


FDS>>Может это и есть где-то, но я не заметил


VD>На такие вопросы ответы в документации найти невозможно в принципе. Но их можно задать на форуме.


Видать, я жуткий бюрократ . А в каком их форуме задавать?

VD>Видимо потому что нужно как-то так:

VD>
VD>macro m(x : int)
VD>{
VD>  mutable result = [];

VD>  for (mutable i = x - 1; i >= 0; i--) 
VD>    result ::= <[ System.Console.WriteLine("ss {0}", $(x : int)); ]>;

VD>  <[ { ..$result } ]>
VD>}
VD>

VD>1. Макрос обязан вернуть одно выражение. Тут же их много, так что нужно завернуть их в блок. Последняя команда как раз это и делает. В цикле же формируется список выражений которые потом помещаются в блок.
VD>2. Параметр х является целым числом для макроса, а требуется литерал. Тут требется подсказка компилятору, что нужно преобразовать значение из переменной х в литерал. Конечно компилятор мог бы быть и по умнее. Но и так не плохо по сравению с тем что приходится вытворять в подобных случаях при других способах генерации кода.

Спасибо (вы ответили сразу на три моих вопроса), но не вечно же у вас спрашивать, кода проблемы появляются , а со спецификацией я бы сам разобрался

FDS>>Локальные функции круче Хотя теперь не придётся создавать массивы.

VD>Незнаю причем тут массивы, но я бы поставил паттерн-матчинг выше по значимости. Кслати, его очень удобно исползовать в тех самых локальных фукнциях.

Когда мне надо сопоставлять с образцом, я запихиваю образцы в массив (вместе с указателями на функции) и в цикле проверяю.

VD>>>2. Локальные функции.


...

VD>В Дельфи как локальные функции и на ёту не приближаются к этим. Эти являются замыканиями и могут использовать весе что объявлено перед ними.


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

VD>>>4. Вывод типов.

...

VD>Это и дает. Лишнего в коде нет. Код становится короче и стало быть понятнее. Если нужно изнать тип чего-то, то просто подвидишь мышьку в IDE и смотришь хинт.


Ага, а если нет интергации с MS VS (1. не могу скачать последнюю версию непомню уже чего, 2. нефига не понимаю и т.п., в общем у меня не работает даже "простая" интеграция с VS, точнее работает, но на половину )

VD>>>8. Частичное применение функций и операторов.

VD>>>9. Сплайсебл-строки.
FDS>>Не нашёл ни 9, ни 8. Может дадите ссылку на конкретный документ?

VD>Все описано в статье
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
. Сделай поиск по статье на $" (бакс и ковычка) и почитай что там написано. Частичному применению посвящен отдельный раздел Частичное применение и другие операции над функциями и операторами
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
.


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