Добрый день. Извините, за ещё один вопрос, просто вопросы возникают быстрее, чем я читаю маны по языку :)
Но вот собственно возник вопрос, в С и С++ можно подгружать свои библиотеки к уже готовым, собранным .exe файлам. Самый простой пример, что приходит в голову это CS 1.6 и Amxx или Oblivion с его расширением OBSE. То есть загружается заранее скомпилированная программа с нужной библиотекой, а затем уже вызывается программа.
Я понимаю, что всё же Лисп не вин-ориентированный язык, но всё же интересно возможно ли такое сделать в лиспе? Умеют ли это делать CLISP и LispWorks? И если да, то как?
Заранее спасибо за ответы :)
Если речь об обычных разделяемых библиотеках (то бишь dll в винде), то, чтобы подгрузить внешнюю библиотеку, можно воспользоваться load-foreign-library из cffi или напрямую соответствующей функцией из используемой реализации (для clisp это ffi:open-foreign-library, для lispworks не знаю). Сборка лисп-кода не потребует предварительного подгружения разделяемой библиотеки, если на этапе сборки не требуется вызывать функции из этой библиотеки.
Если речь об обычном лисп-коде, который подгружается в виде модулей к собранной программе, то с этим тем более нет проблем, главное чтобы опять же функции из этого модуля не вызывались нигде до момента его подгрузки.
Скорее речь идёт о лисп-коде, который в виде модулей.
Допустим я хочу расширить стандартный Блокнот в виндовсе. У меня есть notepad.exe. И я хочу расширить его функциональность путём создания, допустим, функции подсветки текста. Тогда я создаю лисп-код, описываю в нём необходимые мне функции, а затем следуя руководству создаю главную функцию (defun notepad-extender ()) в которой осуществляю вызов самого блокнота и подключение описанного мной функционала.
Правильно ли я понял? Но тогда нужно ли мне дописывать в исходники самого блокнота тот факт, что будет осуществлён вызов лисп-кода? Или это уже лишнее?
> понимаю, что всё же Лисп не вин-ориентированный языкВот это распространенное заблуждение, зачем-то упорно проталкиваемое некоторыми не совсем вменяемыми линуксоидами.
С лиспом все отлично под виндой:
Можно посмотреть у меня по блогу, например:http://love5an.livejournal.com/tag/lisp
Кстати, я сейчас как раз делаю обертку над Winapi, включая COM/OLE(хотя к тому же COM в коммерческих реализациях, типа LispWorks, интерфейс уже и так есть).
Более того, под винду для лиспа есть замечательная библиотека RDZNL, которая позволяет из лиспа использовать дотнет.
По поводу вопроса - тут уже сказали, вобщем-то, все, да. Если речь о сишных библиотеках, то это делается через FFI, если о лисповом коде - то еще и того проще, через compile-file/load, или через ASDF, да и еще много как - собственно удобное динамическое обновление кода эта одна из отличительных фишек CL.
Хмм...Спасибо, с радостью и интересом посмотрю.
Да, тут уж пожалуй купился на это заблуждение, даже не смотря на то, что вроде бы и пишу на лиспе из-под винды :)
Большое спасибо. Вот COM/OLE это как раз то, что нужно. Удачи в разработке :) И вот как более-менее сносно изучу лисп, и если всё ещё нужна будет помошь, то я с радостью помогу в разработке :)