Допустим, я реализовал язык программирования, (назовем его теперь). довольно похоже на C.
Я хочу, чтобы мои пользователи имели доступ к функциям и структурам данных из уже существующих библиотек Си. Это возможно? Если это так, как будет выглядеть наивная реализация?
Это во многом зависит от того, какой язык является.
Если это скомпилированный язык, то вам нужно создать соответствующий код на ассемблере (посмотрите «соглашения о вызовах», в частности, соглашение о вызовах C) для вызова соответствующей функции C. Если вы используете LLVM, вы можете сделать это довольно легко, используя declare
а также call
заявления. После того, как вы это сделаете, вам нужно будет связать исполняемый файл с рассматриваемой библиотекой C.
Однако, если это интерпретируемый язык, вам необходимо динамически загружать библиотеку. Как это сделать, зависит от платформы: например, в системах Unix-типа это может быть достигнуто с помощью dlopen
функция.