Найти - Пользователи
Полная версия: vanished
Начало » Python для .Net » vanished
1 2 3 4 5 6
balu
george
Scheme долго использовался в MIT в качестве универсального языка, за последние 5 лет они от него полностью отказались в пользу Питон
1) В качестве учебного языка. Кстати, Sheme-вариант SICP читается и в Беркли - недавно они выпустили обновленные видеолекции.
2) Питон используется на курсах электроники и робототехники. Но 6.001 как был, так и остался.

george
А вообще, если сильно интересно, предложи компактную, но нетривиальную задачу, напиши ее на чем хошь, я на boo, сравним результат :-).
К сожалению сейчас особо времени нет. Но посмотреть на boo - посмотрю. Как там, кстати с умением менять все и вся на ходу, например пофиксить нужный код, перекомпилировать его прямо в выполняющейся программе? Каковы там анонимные функции - надеюсь ушли дальше, чем недолямбда в питон? Как там с макросами?
Но если отталкиваться от опыта питон то писать всякие там парсеры и DSL лучше на лиспе.

PS Впрочем, если вам особо нечего делать можете поиграться с чем-нибудь отсюда http://www.gigamonkeys.com/book/ , например с http://www.gigamonkeys.com/book/practical-an-id3-parser.html Учтите также, что в примере не используются какие-либо специализированные библиотеки.
The gray Cardinal
george
>> интерпретатор Boo получает в командной строке текстовый файл скрипта и исполняет его.
это да, только он предварительно любой скрипт компилирует в реальный код, и потом только его исполняет.
Кстати, Cobra, насколько я понял, делает то же самое. Только исполняемый файл cobra.exe там совмещает функции интерпретатора и компилятора. И, по ощущениям, в случае интерпретации текстового файла скрипта, Cobra как-то очень долго дуплится, по сравнению с Boo.
george
>> Но если отталкиваться от опыта питон то писать всякие там парсеры и DSL лучше на лиспе.
boo в этом ушел от Питона далеко за горы. вот тебе пример динамического расширения/парсинга в boo:

namespace metaboo

import Boo.Lang.Compiler
import Boo.Lang.Compiler.Ast
import Boo.OMeta
import Boo.OMeta.Parser

syntax Units:
atom = mass | super
mass = (integer >> value as Expression, “kg”) ^

syntax Ranges:
atom = integer_range | super
integer_range = (integer >> begin as Expression, DOT, DOT, integer >> end as Expression) ^

def parse(code as string):
compiler = BooCompiler()
compiler.Parameters.References.Add(System.Reflection.Assembly.GetExecutingAssembly())
compiler.Parameters.Input.Add(IO.StringInput(“code”, code))
compiler.Parameters.Pipeline = CompilerPipeline()
compiler.Parameters.Pipeline.Add(BooParserStep())
return compiler.Run()

code = “”“
import metaboo.Units
import metaboo.Ranges

a = 3kg
print a
for i in 1..3:
print i
”“”

result = parse(code)
assert 0 == len(result.Errors), result.Errors.ToString()
assert 1 == len(result.CompileUnit.Modules)
print result.CompileUnit.Modules.ToCodeString()

вывод “import metaboo.Units
import metaboo.Ranges

a = Mass(3, ‘kg’)
print a
for i in range(1, 3):
print i”

чтоб было понятно: в стандарте boo нет конструкции 1..3, также как и 2м или 3kg,
и этот пример показывает, как расширить синтаксис, сводя его к стандартному.
все языки нервно курят..

>>Только исполняемый файл cobra.exe там совмещает функции интерпретатора и компилятора.
он переводит кобра-исходник в шарп-исходник и после его уже компилит и исполняет.
boo напрямую генерит IL-ассемблер.

>> Питон используется на курсах электроники и робототехники. Но 6.001 как был, так и остался.
сообщение оттуда проскакивало, вот я его так понял.
The gray Cardinal
Так есть кто живой, кому удавалось поставить Python for .NET?
balu
george
и этот пример показывает, как расширить синтаксис, сводя его к стандартному.
Это много где есть, см., например, лисповские макросы. Но будет время, посмотрю на boo внимательней - действительно интересно.
george
> balu
ессно много где, а вот так чтоб просто написать, опять же это тривиальный пример, но.. обрати внимание что здесь можно одинаково оперировать и на синтаксическом уровне, и на лексическом, и смешанном совершенно одинаково. это весьма непросто!
balu
2george
Из руководства к языку не ясно есть ли там генерики и анонимные функции.
Плюс хочется умения менять все и вся на ходу, например пофиксить нужный код, перекомпилировать его прямо в выполняющейся программе.

Так же не раскрыта тема boo vs F#, LISP-семейство. Замечу, что F# и LISP умеют как метапрограммирование, так и многопарадигменность.
george
я писал в другом месте, что там доки недоделаны. все там есть, тока смотри в http://jira.codehaus.org/browse/BOO?report=com.atlassian.jira.plugin.system.project:roadmap-panel
начиная с 0.6.0. док от 0.5.
>>Так же не раскрыта тема boo vs F#, LISP-семейство.
долго уговаривать просто нет времени. я просто показываю направление, дальше сами решайте.
Андрей Светлов
The gray Cardinal
Так есть кто живой, кому удавалось поставить Python for .NET?
Скопируй clr.pyd и Python.Runtime.dll в с:\python25\DLLs
Дальше import clr
Все, готово
george
вот boo 0.9 вышел - более 20 новых серьезных фич добавилось. даже поддержка вложенных макросов - наворачивают ребята..
http://boolang.googlegroups.com/web/ChangeLog-v0.9.html?gda=jCHq4kUAAAAkQtDacSqt3NZb-oEqEpqG_sEWxeG3t7X4-DJDqWhcS6HFINThPSAmR8mxUYmyTqMc1NQncoRVHsyyOXJp_EWnGu1iLHeqhw4ZZRj3RjJ_-A
еще не без гордости скажу что, штук 5 усовершенствований в языке прошли по моим предложениям, еще столько же стоят в очереди, когда пробовал в Python-е одно просунуть - да какой там.
а тут - пожалуйста - пиши чего не хватает хоть в jira, хоть в форум, если предложение нормальное - в очередь на добавку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB