March 2026

S M T W T F S
12 34567
891011121314
151617 18192021
22232425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Thursday, May 5th, 2005 12:10 am
Левенчук пишет, что все серьёзные программисты мечтают программировать на фукнциональных языках. Не знаю, как серьёзные, а у меня лично никогда желания программировать на Лиспе не возникало. Нечеловеческий он какой-то. Пусть ворлоны на нём программируют.
Tags:
Friday, May 6th, 2005 09:58 am (UTC)
1. Нет, не является :)
2. Не всё — список. Есть ещё массивы, структуры, хеш-таблицы, объекты. Есть ещё целые произвольной точности и комплексные числа. У вас устаревшие сведения :)
3. Обычные функции работают во время работы, а макросы — во время компиляции (поэтому тут и уместна приставка мета-). Конечно, макросы могут вызывать другие функции (в этом главное отличие от большинства других макросистем).

Простой пример: для того, чтобы включить в программу на C парсер, нужно вызвать отдельную утилиту, которая описание грамматики сконвертирует в код на C. А в Лиспе для этого нужно лишь написать соотв. макрос. Другой пример — автоматическое выведение типов а-la ML.
Friday, May 6th, 2005 05:18 pm (UTC)
> Или вы имеете в виду, что константные выражения в Лиспе вычисляются при компиляции?

Не константные. Любые. Во время компиляции доступен ВЕСЬ язык. Которым можно компилятор расширять как угодно.
Friday, May 6th, 2005 10:54 pm (UTC)
Ну почему же неизвестны? Очень даже известны. Мы можем во время компиляции производить любые операции над собственно кодом программы. Чем это код - не данные? При этом, в таких метаязыках, как Лисп и Схема, мы используем для этих преобразований тот же язык. В C++ - это свой, отдельный язык, чисто функциональный, кстати. В метаязыках с семантикой splice-ов, опять же, можно применять сам целевой язык, как пример - метапрепроцессор Jatha для языка Java, или Template Haskell.

Всё же, рекомендую статью прочитать.
Wednesday, May 11th, 2005 12:01 pm (UTC)
3. Во время компиляции работают макросы. А если входные параметры нужны в рантайме, то это нужно делать функцией.

Макросы принимают на входе данные, но генерируют код. Например, данные — грамматика, а код — парсер.

А парсер не входит в RTL Лиспа. Я не понял последний абзац. RTL вообще не причём :)

Смысл в том, что можно расширять компилятор Лиспа. Например, добавить парсер. И это ещё не самое впечатляющее.