Re[14]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 07.09.06 17:56
Оценка: :)
Здравствуйте, VladD2, Вы писали:

FDS>>Да, например в мае на C#, правда она у меня динамически компилировалась прямо в runtime в зависимости от ввода пользователя. Это было ужасно и я не знаю, как это сделать лучше... Вообще, с генерацией кода у меня всё плохо, но по ней совершенно нет ничего понятно написанного.


VD>Вот макросы — это способ сделать это не просто лучше, а почти идиально. Правда в компайлтайме, но все же.


Идеально?

FDS>>С макросами не так всё — я просто не понимаю как так можно что-то писать и я не вижу нормальной (строгой) документации по макросам.


VD>Документация есть. Зайти да nemerle.org или просто прочти статьи на нашем стайте.


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

Например, где найти ответ на вопрос, как работает это:
    def F2(x: int): int -> int
    {
        def FC(y: int): int
        {
            2*y + x
        }
        FC
    }
    def F1(x: int): int
        {
                F2(x)(5)
    }
F1(5)

и работает ли вообще? Как это будет воспринято компилятором?

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

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

FDS>> У меня от них просто в глазах рябит (впечатление похуже, чем когда открываешь исполняемый файл в текстовом редакторе — там хоть что-то понятно).


VD>Давай конкретно. Что не понятно?


См. выше, про доступ к синтаксическому дереву.
Если я макросом генерирую другой макрос, как мне избавиться от квазицитирования, т.е. что бы компилятор не подставлял во время компиляции значение переменной Name в <[$Name]>

Почему это:
macro m(x: int)
{
    for (mutable i = x - 1; i >= 0; i--) 
    {
        <[
            System.Console.WriteLine("ss {0}", $x);
        ]>
    }
//    <[()]>
};

----
macro1.n:14:1:14:25: ←[01;31merror←[0m: in argument #2 (tl) of list[System.Objec
t-], needed a list[Nemerle.Compiler.Parsetree.PExpr.Literal-], got list[int-]: c
ommon super type of types [Nemerle.Compiler.Parsetree.PExpr.Literal, int] is jus
t `System.Object', please upcast one of the types to `System.Object' if this is
desired

даёт ошибку (приведена после черты)?

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

FDS>>Не очень понял, какие вещи нужно попытаться использовать, да ещё если они непонятны? Можно приблизительный списочек: я попытаюсь.


VD>Пожалуйста. По убыванию "прикольности".


Спасибо

VD>1. Сопоставление с образцом (в том числе и в foreach) и алгеброические типы (variant-ы).


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

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


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

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

Так и не понял, что это даёт. Кроме экономии кода, конечно (кажется, это уже обсуждали на форуме?)

VD>7. Отсуствие граблей (например, оператора as).

Мне то же понравилось

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

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

VD>11. Бесплатная концевая рекурсия.


Не заметил, спасибо. Я думал, что они там все на функциональном программировании совсем свихнулись

VD>12. Краткий синтаксис работы со спискам и встроенные в язык списки.


А за чем они такие нужны (если их нельзя изменять)? В документации написано, что часто используются, но я так и не понял где

VD>Пунктов еще много, но уже этих более чем достаточно. Да если честно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.