Comments 6
Это неплохая вводная книга, но выбор для издания именно Racket-версиии -- сомнительное решение. Код в версии учебника для Python вместе с match/case выглядит, местами, даже изящнее Scheme. Да и читательский охват был бы шире.
Я, кстати говоря, вовсе не против разработки компиляторов на Racket, это замечательный диалект Scheme, но в рассматриваемом учебнике нет какой-то особенной специфики теории компиляции функциональных языков или LOP (Language-Oriented Programming).
Если вы знакомы с английским, то Python-версию книги можно совершенно свободно скачать здесь: https://github.com/IUCompilerCourse/Essentials-of-Compilation
P.S. А если вас интересуют прикладные аспекты разработки DSL-компиляторов на Python, то могу порекомендовать посмотреть мой недавний доклад: https://www.youtube.com/watch?v=h-TzDPL2nDE
Уважаемый Пётр, если я не ошибаюсь, Джереми опубликовал Питоновскую версию совсем недавно. Ну и я проходил и писал про «рекетирскую». Возможно, это связано. Возможно, если тут опубликовать рецензию на чудесную книжку Introduction to Static Analysis, её переведут.
Кстати, было бы интересно проверить, как соотносится словарь этого перевода и словарь https://github.com/true-grue/Compiler-Development/blob/master/docs/dictionary.md
__________
И ещё для меня загадка — как вы умудряетесь преподавать студентам на Python'е и обходить неочевидности его семантики (это же Ԥ временами). Из недавнего, почёрпнутого тут:
a = 1
b = 2
def f():
print(b)
a = b
f()
и
a = 1
b = 2
def f():
print(b)
b = a
f()
дают принципиально разные результаты. Всевозможная функциональщина вообще непонятно, как интерпретируется. Да и банальные
l1 = []
l2 = l1
l1.append(8)
print(l2)
l1 += 9
print(l2)
l1 = l1 + 10
print(l2)
дают совершенно неочевидные эффекты (обычно +=
— это синтаксический сахар для a = a + ...
, а тут эффект совершенно не тот).
Для первых двух примеров я бы предложил написать учебный интерпретатор на уровне питоновского AST. Учитывайте при реализации отсутствие в Питоне явных объявлений переменных.
По третьему примеру могу сказать только, что код перед публикацией надо бы проверять на корректность :)
Чем эта книга предпочтительнее книги дракона?
Книга «Основы компиляции: инкрементный подход»