Реальный пример использования технологии типа предлагаемой Сергеем. Фрагмент компилятора. Вообще-то это просто ява, и в ней немножко добавлено. Синтаксис похож на прологовский, так что основную идею поймать можно. Барабанная дробь функциональщины здесь не прокатывает, поскольку в оной функциональщине бэктрэкинг отсутствует. А вот расширение синтаксиса - позволяет добавить как функциональщину, так и логику и вообще много чего. Пример реальный, хотя сейчас я бы его мог переписать ещё раза в два компактнее - попереопределять операторы и пр. Но и так, IMHO, тоже достаточно наглядно.
rule public resolveMethodR(ASTNode@ node, ResInfo info, KString name, Expr[] args, Type ret, Type tp, int resfl
( ... )
В функциональщие бэктрэкинг обычно (это я для осторожности, думаю, что на самом деле всегда) легко делается с помощью ленивых списков и композиции в монадном стиле.
А более или менее развитые системы типов (в чем состоит один из главных плюсов функциональщины) расширением синтаксиса к сожалению никак не моделируется.
В свете дискуссии об инкрементных преобразованиях программ - поищи "Incremental evaluation of computational circuits" и "Alphonse: incremental computation as a programming abstraction".
Ищется в Гугле, лежит в ACM'овской библиотеке. Оно вообще полезно, а Роджер Хувер был одним из главных действующих лиц в Модуле-3 и NaturalBridge jvm.
http://www.theregister.co.uk/2004/07/27/esmertec_acquires_oovm Ларс Бак до Сана возился с Сэлфом, в Сане, в частности, сваял сборщик мусора поколениями со скользящим окошком для Ж2МЕ. Потом уехал к себе в Данию, сделал себе мелкую конторку, в которой продолжал возиться с виртуевыми машинами и компиляцией на лету. Из общей среды родил виртуевые машины для Сэлфа, Смолтока и Жабы. Какова именно структура общего промежуточного кода, не знаю. Из него торчат крючки и рукоятки, чтобы легче было средства разработки подцеплять. Теперь вот его Эзмертек купил.
А какое это имеет отношение к данной теме? Я вот из этого самого esmertec-а, и сидел сегодня на его презентации неудержимо зевая. Вкратце - 99% маркетингового фуфла, и 1% информации. 1% о том, что это Smalltalk. Обрезанный. То, что он раньше занимался Self-ом и Java - к oovm отношения не имеет никакого, кроме его личного опыта по участию в проектах связанных с vm-ками.
Самое прямое отношение - рефлексирующее промежуточное представление, не привязанное к одному конкретному языку программирования.
Когда человек делает что-то с предметом, на обоих остается соответствующий отпечаток, обычно характерный. А Ларса Бака лично я знаю по его коду в сборщике мусора. Код хорощий и совсем не глупый.
С понедельника начинаю новую жизнь
anonymous
July 29 2004, 19:21:59 UTC
Две недели отпуска сказались, и я выкидываю предыдущую попытку создать такую среду. Второй раз выкидываю... За время отпуска по новому оформилось видение как эту среду делать. Вот где-то так
( ... )
Re: С понедельника начинаю новую жизнь_qwertyJuly 29 2004, 19:59:59 UTC
Вообще-то просто нарисована структура деревяхи, причем нельзя сказать, что минимальная. Типы узлов названы функциями.
Предложение "Всё сделано на функциях и узлах" следует, видимо, понимать так, что граф состоит из узлов, узлы типизированы. Да, обычно так оно и есть :)
Что означает принадлежность к типу, почему-то не уточняется.
Из узелка торчат ссылочки. Набор ссылочек разбит на группы (идентификация, предки, сыновья, сосед). Ссылочки, видимо, должны обладать некими семантическими свойствами во избежание циклов, но про это ничего не говорится. Идентификация, видимо, тоже должна обладать особыми свойствами, про нее ничего не говорится тоже.
Уже видны какие-то непонятные амперсанды и звездочки, смысл которых не объясняется. Подозреваю худшее :)
Re: С понедельника начинаю новую жизнь
anonymous
July 29 2004, 21:47:13 UTC
Типы узлов названы функциями, потому как функциями они (в каком-то смысле) и есть. То есть вот как тот пример вверху со switch-ами - отдельная функция будет switch_int, отдельная switch_enum, и отдельная switch_string
( ... )
Comments 41
Фрагмент компилятора. Вообще-то это просто ява, и в ней немножко добавлено.
Синтаксис похож на прологовский, так что основную идею поймать можно.
Барабанная дробь функциональщины здесь не прокатывает, поскольку в оной
функциональщине бэктрэкинг отсутствует. А вот расширение синтаксиса -
позволяет добавить как функциональщину, так и логику и вообще много чего.
Пример реальный, хотя сейчас я бы его мог переписать ещё раза в два компактнее -
попереопределять операторы и пр. Но и так, IMHO, тоже достаточно наглядно.
rule public resolveMethodR(ASTNode@ node, ResInfo info, KString name, Expr[] args, Type ret, Type tp, int resfl ( ... )
Reply
А более или менее развитые системы типов (в чем состоит один из главных плюсов функциональщины) расширением синтаксиса к сожалению никак не моделируется.
Reply
Reply
Reply
"Incremental evaluation of computational circuits" и
"Alphonse: incremental computation as a programming abstraction".
Ищется в Гугле, лежит в ACM'овской библиотеке. Оно вообще полезно, а Роджер Хувер был одним из главных действующих лиц в Модуле-3 и NaturalBridge jvm.
Reply
Ларс Бак до Сана возился с Сэлфом, в Сане, в частности, сваял сборщик мусора поколениями со скользящим окошком для Ж2МЕ. Потом уехал к себе в Данию, сделал себе мелкую конторку, в которой продолжал возиться с виртуевыми машинами и компиляцией на лету. Из общей среды родил виртуевые машины для Сэлфа, Смолтока и Жабы. Какова именно структура общего промежуточного кода, не знаю. Из него торчат крючки и рукоятки, чтобы легче было средства разработки подцеплять. Теперь вот его Эзмертек купил.
Reply
Я вот из этого самого esmertec-а, и сидел сегодня на его презентации неудержимо зевая.
Вкратце - 99% маркетингового фуфла, и 1% информации. 1% о том, что это Smalltalk. Обрезанный. То, что он раньше занимался Self-ом и Java - к oovm отношения не имеет никакого, кроме его личного опыта по участию в проектах связанных с vm-ками.
Reply
Когда человек делает что-то с предметом, на обоих остается соответствующий отпечаток, обычно характерный. А Ларса Бака лично я знаю по его коду в сборщике мусора. Код хорощий и совсем не глупый.
А презентации действительно пофиг.
Reply
Reply
Reply
Предложение "Всё сделано на функциях и узлах" следует, видимо, понимать так, что граф состоит из узлов, узлы типизированы. Да, обычно так оно и есть :)
Что означает принадлежность к типу, почему-то не уточняется.
Из узелка торчат ссылочки. Набор ссылочек разбит на группы (идентификация, предки, сыновья, сосед). Ссылочки, видимо, должны обладать некими семантическими свойствами во избежание циклов, но про это ничего не говорится. Идентификация, видимо, тоже должна обладать особыми свойствами, про нее ничего не говорится тоже.
Уже видны какие-то непонятные амперсанды и звездочки, смысл которых не объясняется. Подозреваю худшее :)
А каковы были две предыдущие попытки?
Reply
Reply
Reply
Leave a comment