Интерпретируемая стандартная библиотека

Обычно язык программирования поставляется со стандартной библиотекой, хотя бы частично реализованной в самом языке.

В случае интерпретируемого языка очевидной реализацией является чтение исходных файлов библиотеки при запуске интерпретатора, но это приводит к запутанной, но постоянной проблеме обеспечения того, чтобы интерпретатор знал, где найти эти файлы, даже когда оба перемещены. . Было бы чище, если бы они могли быть встроены в сам интерпретатор, чтобы был только один исполняемый файл.

Я вижу простой способ сделать это, просто переведя исходные файлы библиотеки в буквальные строки C, но мне любопытно, есть ли какие-то подводные камни, которые я упускаю из виду, или улучшения метода.

Итак, мой вопрос: какие существующие интерпретируемые языки прикрепляют исходные файлы библиотеки на самом языке к интерпретатору?


person rwallace    schedule 26.02.2011    source источник
comment
Проблема, о которой вы говорите, вообще не должна возникать. Просто не перемещайте такие вещи и не обновляйте языковой эквивалент пути поиска модуля, когда это необходимо.   -  person    schedule 26.02.2011
comment
Чем это перемещение вещей отличается от того же самого с компилируемым языком? Либо вы оставляете вещи в месте по умолчанию, компилятор / интерполяция знает, где их найти, либо вы должны сообщить компилятору / интерпритатору, куда вы их поместили.   -  person RHSeeger    schedule 26.02.2011


Ответы (1)


Виртуальные машины с байт-кодом часто дают ответ на этот вопрос: хранить байт-код в файлах (* .pyc, * .rbc) и загружать версии библиотек с байт-кодом, используя более простой механизм.

Smalltalks делает это, выгружая стандартную кучу в отдельный файл, называемый «изображением».

Что касается однофайлового распространения, добавьте файл (ы) библиотеки в конец исполняемого файла и включите специальную логику для интерпретатора, чтобы читать из его двоичного файла и находить структуру этих интерпретируемых данных программы, или, альтернативно, создайте интерпретатор с статическое включение данных программы.

person Brian T. Rice    schedule 26.02.2011
comment
Кроме того, диалекты Lisp обычно имеют форму, аналогичную pyc / rbc, как FASL (что означает FASt Load), которые представляют собой либо байт-код, либо некоторый связываемый динамический двоичный формат (так что это не совсем объектный файл, а более оптимизированный, чем просто байт-код). - person Brian T. Rice; 04.03.2011