Рассмотрим простую функцию: (define (f a b) (+ a b)) Казалось бы, её можно откомпилировать в код (условно): F: MOV EAX, a ADD EAX, b RETURN EAX и получить хорошую, шуструю функцию. Но тут возникает 2 проблемы: 1. В схеме куча арифметических типов: целые, большие целые (которые не помещаются в 8 байтов), дроби, вещественные, мнимые, и тд. Тип переменной можно узнать только во время выполнения, т.е. придётся делать кучу проверок и в зависимости от их результата вызывать тот или иной алгоритм. 2. (set! + -) (f 3 2) ; возвращает 1 (set! + my-tricky-function) (f 3 2) ; возвращает ещё более странное значение Т.е. во время компилирования я вообще не имею права предполагать, что + это сложение. Значит ли это, что здесь вообще нет места оптимизации, и я всегда должен извлекать из памяти значение, ассоциированное с + и делать JMP на неизвестный во время компиляции адрес? (да ещё и проверять, что это действительно функция, а не какой нибудь вектор). Жутко тормозить ведь будет. Первое, что приходит в голову, это какой-то сложный анализ всей программы, возможно выведение всех возможных типов переменных, которые могут быть переданы данной функции, и тд. Теоретически это решает проблему, но практически это представляется сложным в реализации, к тому же значительно увеличит время компиляции, что в моём случае весьма нежелательно. Ещё один вариант над которым я мало думал, но он мне представляется малоперспективным: компиляция в байт-код, и его JIT-компиляция в рантайме, с учётом рантаймовых значений. Может быть у кого-нибудь есть мысли на эту тему?
Ответ на:
комментарий
от Kpoxman
Ответ на:
комментарий
от Legioner
Ответ на:
комментарий
от Legioner
Ответ на:
комментарий
от Legioner
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Статьи Линукс, ассемблер и X11 (2023)
- Форум Как написать x86 команду для вызова функции по адресу (2015)
- Форум GIMP: примитивы (2009)
- Форум PHP Рисование примитивов (2012)
- Форум Scheme (2011)
- Форум Scheme (2005)
- Форум Scheme (2006)
- Форум Scheme, идентификаторы (2012)
- Форум Императивность Scheme (2013)
- Форум erlang scheme (2012)