Форум сайта python.su
Офлайн
1) Сассман ничего не говорил о том, что новая программа сможет охватить все то, что охватывала старая. Например, питон не умеет продолжений (continuations), нет вменяемых анонимных функций, нет поддержки хвостовой рекурсии. Я не знаю, как они заменят scheme.
2) Питон уже используется в МИТ на курсе робототехники, о чем Сассман и упомянул.
3) И еще - основной посыл SICP, что можно сделать много используя минимум базовых примитивов. Как сюда ложится питон я не очень представляю.
И наконец. ЛИСП - концептуальнейшая вещь, без которой никак в Computer Science. Так что никуда он из MIT не денется. И в любом сколько-нибудь приличном ВУЗ-е ЛИСП преподавать будут. А все-таки жаль, что 6.001 уходит от нас.
Отредактировано (Март 27, 2009 10:57:47)
Офлайн
ыыы….
продолжения - хм… а что, yield не подходит?
хвостовая рекурсия - опять же генераторы творят чудеса (но конечноэто уже не хвостовая рекурсия, но, как минимум замена)
нету крутых лямбд - ну и что, можно делать не анонимные + самое главное это наличие замыканий, а они есть.
Я конечно не спрорю, лисп классная штука, но на нем нельзя сделать чегото принципиально невозможного на питоне, другое дело сколько придется переписывать и на сколько разрастется код. Это я к тому, то бывают ограничения, которые делают невозможным использование какого-либо языка (ну там например: синтаксис основанный на скобках).
Но это все мое личное мнение.
Офлайн
cybergrindПодходит. Не подумал.
продолжения - хм… а что, yield не подходит?
cybergrindгенераторы это уловка вместо прямого решения.
хвостовая рекурсия
cybergrindМожно, но веселее с лямбдами. Я их очень много использую и хотелось бы нормальных а не того обрубка, который есть. Люблю, знаете-ли, прямые решения.
нету крутых лямбд - ну и что, можно делать не анонимные
cybergrindМакросов хочу, без них сложно язык под свои нужды подганять. Опять же в ЛИСПе все напрямую в АСТ пишется, что самое то для всяких eDSL.
но на нем нельзя сделать чегото принципиально невозможного на питоне,
Отредактировано (Март 27, 2009 11:57:41)
Офлайн
baluНаткнулся на такое EasyExtend, сам не пробовал.
Макросов хочу, без них сложно язык под свои нужды подганять. Опять же в ЛИСПе все напрямую в АСТ пишется, что самое то для всяких eDSL.
Офлайн
PooHПосмотрю, но это не совсем то. Плюс есть lexx и yakk. Но все это стороннее и неудобное, а хотелось бы родного. Плюс я там не прочитал ничего про переопределение самого языка. И тормоз этот EasyExtend. Автор сам признает.
Наткнулся на такое EasyExtend, сам не пробовал.
Офлайн
И совсем забыл. В Python нет REPL.Как это нет???
Отредактировано (Март 27, 2009 15:18:40)
Офлайн
baluмы можем манипулировать объектами.
Макросов хочу, без них сложно язык под свои нужды подганять. Опять же в ЛИСПе все напрямую в АСТ пишется
baluREPL - не знаю что ты имел в виду, но посмотри http://ru.wikipedia.org/wiki/REPL, тут пишут что в питоне это есть…
И совсем забыл. В Python нет REPL.
Отредактировано (Март 27, 2009 15:48:28)
Офлайн
и вроде отсутствие хвостовой рекурсии и оптимизации хвостовой рекурсии - это тоже разные вещи.
Офлайн
REPL - тут читать http://pcl.catap.ru/doku.php?id=pcl:%D1%82%D1%83%D1%80%D0%B2repl Это когда компилируешь по одной функции, строя, таким образом, программу. Таким образом можно постоянно работать в интерпретаторе, почти не выходя из лиспа. Профит ;)
Про макросы и прочие синтаксические деревья - они позволяют делать DSL и на них уже решать саму задачу. Генерация объектов - это, конечно, хорошо. Но питон только для себя в свое АСТ генерирует. А если не только питон-код на выходе? Например код на питоне генерируется лиспом ;)
Про рекурсию - питон ее вообще не держит. Только до определенного числа итераций. Может щас что-то поменялось.
Я тут, кстати, на питон не наезжаю. Я все свои инструменты могу покритиковать. Например, тот же Лисп - есть за что.
UPD. Про рекурсию - не, не поменялось. Не держит. для сравнения:
На питоне:
def rec(count):
if count==0: return count
count -= 1
try: return rec(count)
except: print "count", count
print rec(10000)
count 9001
#;> (define (rec count)
(if (= count 0) count
(rec (- count 1))))
#;> (rec 100)
0
#;> (rec 10000)
0
#;> (rec 100000000)
0
#;>
Отредактировано (Март 27, 2009 17:21:09)
Офлайн