Как написать виртуальную машину на LISP
От: Turtle.BAZON.Group  
Дата: 09.08.09 18:45
Оценка: 29 (5)
HOWTO по написанию виртуальной машины на Common Lisp по спецификации из ICFPC-2009
Re: Как написать виртуальную машину на LISP
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 10.08.09 06:09
Оценка:
Спасибо! Теперь я точно не стану использовать лисп на таких задачах.
Re[2]: Как написать виртуальную машину на LISP
От: Turtle.BAZON.Group  
Дата: 10.08.09 09:14
Оценка:
Здравствуйте, D. Mon, Вы писали:

А аргументированный ответ, мы, наверное, увидим после обеда?

DM>Спасибо! Теперь я точно не стану использовать лисп на таких задачах.
Re[2]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 10.08.09 10:39
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Спасибо! Теперь я точно не стану использовать лисп на таких задачах.


А зря. На Лиспе, например, очень легко можно написать эффективный компилятор для любой ВМ, используя одни только макры. На языке без макр это будет очень и очень сложной задачей, или придётся ограничиваться тормозным интерпретатором.
Re[3]: Как написать виртуальную машину на LISP
От: Mr.Cat  
Дата: 10.08.09 10:49
Оценка:
Здравствуйте, Аноним, Вы писали:
А> А зря. На Лиспе, например, очень легко можно написать эффективный компилятор для любой ВМ, используя одни только макры. На языке без макр это будет очень и очень сложной задачей, или придётся ограничиваться тормозным интерпретатором.
Тут скорее дело не в макросах, а в возможностях кодогенерации как таковой.
Re[4]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 10.08.09 11:13
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Тут скорее дело не в макросах, а в возможностях кодогенерации как таковой.


Такая возможность есть почти везде (ну кроме разве что айфона). Просто одно дело генерить напрямую биткод LLVM или там например JVM через BCEL — это сложно и потенциально взрывоопасно, и совсем другое дело использовать для кодогенерации метапрограммирование — это прозрачно, тривиально, и возможностей ошибиться на этом пути гораздо меньше.
Re[5]: Как написать виртуальную машину на LISP
От: Mr.Cat  
Дата: 10.08.09 11:39
Оценка:
Здравствуйте, Аноним, Вы писали:
А> Такая возможность есть почти везде (ну кроме разве что айфона). Просто одно дело генерить напрямую биткод LLVM или там например JVM через BCEL — это сложно и потенциально взрывоопасно, и совсем другое дело использовать для кодогенерации метапрограммирование — это прозрачно, тривиально, и возможностей ошибиться на этом пути гораздо меньше.

Ну например рантайм .net включает в себя компилятор c#. Т.е. часто можно просто генерить код в виде текста.
Конечно, приятнее генерить не текст, а ast. В дотнете, например, есть вроде codedom И dlr для этого (хотя я не работал с ними). Так что все, ИМХО, упирается в удобство инструментов.
Re[6]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 10.08.09 11:55
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Ну например рантайм .net включает в себя компилятор c#.


С каких это пор? У них нет ещё managed компилятора, они о нём только мечтают. С Mono это ещё возможно в принципе, а в родном .NET — фигушки.

MC> Т.е. часто можно просто генерить код в виде текста.


Можно. Это тоже своего рода метапрограммирование. Но оно намного хуже того, что есть в Лиспах и прочих Немерлах, в силу сугубой однопроходности. Преобразование от виртуальной машины, от AST какого либо экзотического DSL, от комманд хитрого агентного протокола, и т.п., необходимо непременно делать в один шаг. При малейшей нетривиальности языка это становится крайне сложной и потенциально ошибкоёмкой задачей. Тогда как с метапрограммированием на макрах преобразование из DSL в целевой язык может идти во много этапов, через промежуточные языки, и каждое такое преобразование формулируется единообразно, в виде набора макр.

MC>Конечно, приятнее генерить не текст, а ast. В дотнете, например, есть вроде codedom И dlr для этого (хотя я не работал с ними). Так что все, ИМХО, упирается в удобство инструментов.


Не только "удобство", но и вообще адекватность. Инструмент, требующий чрезмерно сложной кодогенерации, приводит к серьёзным ошибкам, неизбежно. Я уж не говорю о стоимости разработки с неадекватным инструментом.
Re[7]: Как написать виртуальную машину на LISP
От: Mr.Cat  
Дата: 10.08.09 12:27
Оценка:
Здравствуйте, Аноним, Вы писали:
MC>>Ну например рантайм .net включает в себя компилятор c#.
А> С каких это пор? У них нет ещё managed компилятора, они о нём только мечтают. С Mono это ещё возможно в принципе, а в родном .NET — фигушки.
А при чем тут managed-компилятор? Виндоз\Microsoft.NET\Framework\Версия\csc.exe.

С остальным спорить не стану.
Re[8]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 10.08.09 12:40
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>А при чем тут managed-компилятор? Виндоз\Microsoft.NET\Framework\Версия\csc.exe.


Ну и какая это на фиг часть рантайма? На ASP.NET хостинге за него не подёргаешь. На пользовательском компьютере с голым framework, без SDK — тем более. С тем же успехом можно и на наличие gcc на пользовательской машине рассчитывать.

Правда, всегда можно таскать компилятор от Mono в виде dll, если уж так хочется генерить код именно на C# (не вижу, однако, никаких причин, почему такие странные желания могли бы у кого либо возникнуть).
Re[9]: Как написать виртуальную машину на LISP
От: samius Россия http://sams-tricks.blogspot.com
Дата: 10.08.09 12:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Mr.Cat, Вы писали:


MC>>А при чем тут managed-компилятор? Виндоз\Microsoft.NET\Framework\Версия\csc.exe.


А> Ну и какая это на фиг часть рантайма? На ASP.NET хостинге за него не подёргаешь. На пользовательском компьютере с голым framework, без SDK — тем более. С тем же успехом можно и на наличие gcc на пользовательской машине рассчитывать.


http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
Assembly: System (in System.dll)

Я полагаю, что на наличие System.dll можно рассчитывать.

а csc.exe — не совсем компилятор. Это его command-line оболочка, на сколько мне известно.
Re[9]: Как написать виртуальную машину на LISP
От: Mr.Cat  
Дата: 10.08.09 13:22
Оценка:
Здравствуйте, Аноним, Вы писали:
А> Ну и какая это на фиг часть рантайма? На ASP.NET хостинге за него не подёргаешь. На пользовательском компьютере с голым framework, без SDK — тем более. С тем же успехом можно и на наличие gcc на пользовательской машине рассчитывать.
Это как раз в голом FW без sdk. Как он дружит с asp (в плане наличия привилегий на запуск) — хз.
Re[10]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 10.08.09 13:22
Оценка:
Здравствуйте, samius, Вы писали:

S>http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx

S>Assembly: System (in System.dll)

Он вызывает csc.exe

S>Я полагаю, что на наличие System.dll можно рассчитывать.


А вот на работоспособность CSharpCodeProvider без SDK — нельзя. Он исключение кинет, что мол "csc.exe не найден".

S>а csc.exe — не совсем компилятор. Это его command-line оболочка, на сколько мне известно.


Сам компилятор полностью unmanaged.

И частью framework-а не является.
Re[11]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 10.08.09 13:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А> И частью framework-а не является.


Ха. А я таки облажался. Он всё же идёт с framework. А с ASP.NET не работает как раз таки благодаря ограничениям на security.

Но в любом случае — решение неюзабельное, важно, что не работает, а не почему оно не работает.
Re[11]: Как написать виртуальную машину на LISP
От: samius Россия http://sams-tricks.blogspot.com
Дата: 10.08.09 13:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, samius, Вы писали:


S>>http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx

S>>Assembly: System (in System.dll)

А> Он вызывает csc.exe


S>>Я полагаю, что на наличие System.dll можно рассчитывать.


А> А вот на работоспособность CSharpCodeProvider без SDK — нельзя. Он исключение кинет, что мол "csc.exe не найден".

Честно, говоря, не пробовал удалять csc.exe

S>>а csc.exe — не совсем компилятор. Это его command-line оболочка, на сколько мне известно.


А> Сам компилятор полностью unmanaged.

Да, известный факт. Ну и что что unmanaged.

А> И частью framework-а не является.

Является.
Не уверен, является ли он частью .NET Framework Client Profile.
Re[12]: Как написать виртуальную машину на LISP
От: samius Россия http://sams-tricks.blogspot.com
Дата: 10.08.09 13:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>> И частью framework-а не является.


А> Ха. А я таки облажался. Он всё же идёт с framework. А с ASP.NET не работает как раз таки благодаря ограничениям на security.


А> Но в любом случае — решение неюзабельное, важно, что не работает, а не почему оно не работает.

Почему же, очень даже юзабельное. Область приложения framework несколько шире, чем ASP.NET.
Re: Как написать виртуальную машину на LISP
От: frontsquat  
Дата: 10.08.09 13:44
Оценка:
Здравствуйте, Turtle.BAZON.Group, Вы писали:

TBG>HOWTO по написанию виртуальной машины на Common Lisp по спецификации из ICFPC-2009


А ссылка рабочая? Сейчас что-то нет.
Re[13]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 10.08.09 13:50
Оценка:
Здравствуйте, samius, Вы писали:

А>> Но в любом случае — решение неюзабельное, важно, что не работает, а не почему оно не работает.

S>Почему же, очень даже юзабельное. Область приложения framework несколько шире, чем ASP.NET.

Ага, вот поюзает его кто-то, от широты души, а потом мне его код из ASP.NET дёргать.

Не, я предпочитаю простые и надёжные методы — System.Reflection.Emit и Лисп с макрами поверх него.
Re[14]: Как написать виртуальную машину на LISP
От: Mr.Cat  
Дата: 10.08.09 14:01
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:
А> Не, я предпочитаю простые и надёжные методы — System.Reflection.Emit и Лисп с макрами поверх него.
Какую имплементацию лиспа используешь для дотнета?

К слову о dsl на макрах. Чем дальше семантика dsl от семантики самого лиспа — тем ближе набор макров будет к традиционному компилятору. Так что я немного не разделяю лисподиферамбов в этой ветке.
Re[9]: Как написать виртуальную машину на LISP
От: cadet354 Россия
Дата: 10.08.09 14:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:


А> Правда, всегда можно таскать компилятор от Mono в виде dll, если уж так хочется генерить код именно на C# (не вижу, однако, никаких причин, почему такие странные желания могли бы у кого либо возникнуть).

попробуй Linqpad, станет понятно зачем это надо.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.