Pull to refresh

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. Учитывайте при реализации отсутствие в Питоне явных объявлений переменных.

По третьему примеру могу сказать только, что код перед публикацией надо бы проверять на корректность :)

Для первых двух примеров я бы предложил написать учебный интерпретатор на уровне питоновского AST.

Я в этом разобрался, но все, решительно все наши «знатоки Питона» не смогли их интерпретировать в уме.

Чем эта книга предпочтительнее книги дракона?

У вас компилятор в х86 сразу после первой главы. В следующих главах он только расширяется и улучшается.

Sign up to leave a comment.