Поддержка стандартной библиотеки C на пользовательском языке

Я разрабатываю собственный язык, и все работает хорошо, но я остановился на добавлении поддержки стандартных функций, таких как getchar(), fopen() и т. д. Одна из моих идей - парсить визуальные файлы .lib, но это огромная задача ( например, из-за недостатков в спецификации). У вас есть другие идеи? Как это сделано на таком языке, как D?

РЕДАКТИРОВАТЬ: Чего я хочу добиться, так это иметь возможность использовать системные функции (например, открывать файлы, использовать сокеты), но без необходимости писать их с нуля. Мне нужен какой-то способ доступа к уже написанным библиотекам/dll.

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


person chris    schedule 15.04.2012    source источник
comment
Трудно понять, что вы спрашиваете. Пожалуйста, отредактируйте сообщение и объясните больше.   -  person pzanoni    schedule 15.04.2012


Ответы (1)


Обычно вы создаете свою собственную стандартную библиотеку, подходящую для вашего языка, а не используете стандартную библиотеку C. Почему вы пишете на своем собственном языке, и разве это не должно учитываться при разработке вашей стандартной библиотеки?

Для совместимости с библиотеками C в целом я считаю, что наиболее распространенным подходом является повторное выражение интерфейса библиотеки на другом языке. Python предоставляет для этого модуль ctypes. В .NET вы должны использовать P/Invokes. Это приводит к некоторой ручной работе и возможности ошибок при переводе интерфейса, но это намного проще и мощнее, чем автоматизированный процесс.

Кроме того, .NET разработан таким образом, что доступ к библиотекам .NET возможен из любой реализации языка в .NET, если библиотека и язык спроектированы правильно. Конкретные языки могут иметь свои собственные потребности, которые удовлетворяются их собственными стандартными библиотеками, но такие вещи, как консольный ввод-вывод, находятся в одном месте, и их не нужно заново изобретать для каждого языка.

person Esme Povirk    schedule 15.04.2012