Как в DrScheme реализована оптимизация Tail Call? - PullRequest
3 голосов
/ 05 декабря 2008

Я слышал, что прыжки на батуте - неэффективный способ внедрения TCO. Как это делает DrScheme (PLAI Scheme, технически)? Делает ли он это «правильным» способом (то есть генерирует ли ассемблерный код, который непосредственно ветвится к хвостовому вызову, вместо того, чтобы проходить через стек и трамплинировать)?

Ответы [ 3 ]

4 голосов
/ 06 декабря 2008

Мэтью Флэтт, главный разработчик MzScheme (теперь PLT Scheme), сказал мне в июне 2008 года, что когда-то они компилировались в код виртуальной машины, и в этом случае легко написать виртуальную машину, которая выполняет правильные вызовы хвоста. Однако теперь система достаточно развита, чтобы на x86 они использовали простой JIT. В любом случае нет трамплина - ребята из Схемы PLT знают свое дело.

2 голосов
/ 05 декабря 2008

Разработчики PLT Scheme довольно активны в своей группе Google , где вы можете получить быстрый ответ от людей, которые пишут код.

Я не уверен, что они читают ТАК, поэтому, вероятно, ваш лучший выбор будет спрашивать там.

1 голос
/ 07 декабря 2008

Батуты используются в реализациях, которые переводят код Scheme на целевой язык X (C, Java и т. Д.), Который не поддерживает надлежащие вызовы Tail. Схема PLT использует JIT-компиляцию - и, следовательно, батуты не нужны. Для точной используемой стратегии реализации задайте вопрос в списке рассылки PLT.

PS: Вы можете прочитать больше о батутах в различных документах "Compile Scheme to C", доступных на ReadScheme.org .

...