LINUX.ORG.RU

R6RS released


0

0

Вышла окончательная редакция нового стандарта языка программирования Scheme. Основные новвоведения:

  • unicode
  • стандарт разделен на базовую часть и стандартные библиотеки
  • многие нюансы, описанные раньше на пальцах, получили подробное описание и разъяснения. В частности все ошибки описываются через исключения.

Так что открывается новая страница в летописи этого языка с длинной и непростой судьбой ;)

>>> Подробности

anonymous

Проверено: Shaman007 ()
Ответ на: комментарий от tche

> Вопросом на вопрос отвечать не нужно. Я спросил, почему метапрограммирование на Схеме *неполноценное*. С интересом (без подкола) выслушаю, почему же.

Я бы не сказал "*неполноценное*", скорее неудобное:

Пол Грехем "On Lisp", Глава 14, страница 189 - "Anaphoric Macros".

Плюс очевидные неудобства вида:

4. In Common Lisp, the arguments to a function are evaluated left-to-right. In Scheme, the order of evaluation is deliberately unspecified. (And implementors delight in surprising those who forget this.)

5. Instead of t and nil, Scheme has #t and #f. The empty list, (), is true in some implementations and false in others.

> В данном случае, не битьё по рукам, а превентивная ликвидация класса ошибок.

Это кто как воспринимает. Если мне понадо дабы компилятор всё контролировал я беру Аду.

> Т.е. требует определенных танцов с бубном.

Не танцев, а простого знания о потенциально опасных местах. Про которые рассказывается в любой вменяемой книге где описывается серьёзная работа с макрами - тот же "On Lisp".

Darkman ★★★
()
Ответ на: комментарий от tailgunner

> ты много на Аде писал?

Прилично, и сейчас часто использую там где нужна скорость и много параллельных вычислений - не на C+NPTL это писать же.

Darkman ★★★
()
Ответ на: комментарий от Darkman

>> ты много на Аде писал?

> Прилично

1) В каких задачах, если не секрет?

2) Как у нее с линовкой к модулям на Си? а Си++?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> 2) Как у нее с линовкой к модулям на Си? а Си++?

Дух перебило - чуть не задохнулся: а у кого "хорошо" с линовкой к модулям на Си++?

yyk ★★★★★
()
Ответ на: комментарий от Darkman

>Пол Грехем "On Lisp", Глава 14, страница 189 - "Anaphoric Macros".

(define-syntax awhen
  (lambda (form)
    (syntax-case form ()
      ((awhen condition expr)
       (with-syntax ((it (datum->syntax-object #`awhen 'it)))
         #`(let ((it condition)) (if it expr)))))))

Ы?

tche
()
Ответ на: комментарий от tailgunner

> 1) В каких задачах, если не секрет?

Управление оборудованием в телекоммуникации.

> 2) Как у нее с линовкой к модулям на Си? а Си++?

К Си - без проблем, причём в обе стороны. Поддержка C++ в GNAT заявлена, но мне так и не удалось это завести, хотя сильно хотелось.

Darkman ★★★
()
Ответ на: комментарий от Darkman

> К Си - без проблем, причём в обе стороны.

Круто

> Поддержка C++ в GNAT заявлена, но мне так и не удалось это завести, хотя сильно хотелось.

В какой версии gcc?

tailgunner ★★★★★
()
Ответ на: комментарий от tche

> (define-syntax awhen (lambda (form) (syntax-case form () ((awhen condition expr) (with-syntax ((it (datum->syntax-object #`awhen 'it))) #`(let ((it condition)) (if it expr)))))))

Т.е. это обеспечит привязку 'it' по месту раскрытия макроса ? Если да - то OK. Но я, лично, лучше пешком постою со всеми этими 'syntax-case' и 'datum->syntax-object'. IMHO в действительно сложном макросе, который генерирует опять же макрос за этими 'syntax' кода видно не будет. Но это IMHO.

Darkman ★★★
()
Ответ на: комментарий от tailgunner

> В какой версии gcc?

Начиная с GNAT 3.12. В gnat-gcc тоже должна быть, в юзер гаде, по крайней мере, поддержка заявлена.

Darkman ★★★
()
Ответ на: комментарий от Darkman

>Т.е. это обеспечит привязку 'it' по месту раскрытия макроса ?

Да. Т.е. результатом (awhen '(1 2 3) it) будет (1 2 3). Типа, контролируемое нарушение гигиены.

>Но я, лично, лучше пешком постою со всеми этими 'syntax-case' и 'datum->syntax-object'.

В принципе, через них можно сделать аналог defmacro, потом пользоваться им.

PS. datum->syntax-object R6RS вроде бы обозвали datum->syntax.

tche
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.