Почему функция compose
определена в интерпретаторе csi
, а не в компиляторе csc
? Я знаю, что могу легко определить это сам, но мне просто интересно, почему такая разница.
Различия между csi и csc (куриная схема)
Ответы (1)
Процедура compose
взята из модуля data-structures
(см. руководство или документы по API). Вы можете загрузить его, набрав (use data-structures)
.
Что касается того, почему он доступен в csi
, а не в csc
по умолчанию, это довольно сложная деталь реализации; интерпретатору csi
просто нужно загрузить несколько модулей, чтобы обеспечить среду интерпретатора. Из-за того, как это реализовано, все, что загружается csi
, также становится доступным на верхнем уровне. В CHICKEN 5 эта ситуация немного улучшилась, и интерпретатор запускается с чистой средой верхнего уровня.
На практике это означает, что вы всегда должны явно указывать (use)
все модули, которые нужны вашей программе, чтобы убедиться, что она работает как в скомпилированном, так и в интерпретируемом режиме. Вместо того, чтобы помещать свою программу в среду верхнего уровня, вы также можете обернуть всю свою программу внутри модуль. Модули всегда имеют полностью чистую среду, поэтому не будет никакой разницы, когда вы ее компилируете, а когда интерпретируете.