Проблемы языкового дизайна с включением библиотек

Я пишу компилятор, который будет компилировать язык, который я сделал (называется Сленг (в настоящее время эти файлы несколько отстают, что не важно) в C ++ (в конечном итоге ELF, Mach-O и PE, но это будет позже). Это мой первый компилятор, и мне было интересно, как лучше включить библиотеки? В c / c ++ библиотеки просто импортируются путем копирования и вставки (в худшем случае. Я уверен, что некоторые более сложные вещи происходят там). Это лучший способ сделать это для компилятора? Есть ли более эффективный способ для тех, кто не сможет подобрать препроцессор gcc / visual c ++ / clang? Заранее благодарю за любую помощь, которую вы можете оказать. Просто чтобы прояснить, я не прошу конкретный код, просто идеи о том, как это сделать.

Примечание Если кто-нибудь знает о каких-либо форумах, посвященных компилятору, или IRC-каналам, я хотел бы знать, что они из себя представляют. Я посмотрел и посмотрел, и еще не нашел ни одного, кроме конкретных для продукта, таких как #gcc или #clang.

редактировать: я оговорился выше. Я знаю, что только файл заголовка вставляется в файл, включающий его, и затем компоновщик связывает исходные файлы с большим количеством исходных файлов и / или библиотек. Однако я все еще ищу наиболее эффективный способ включения библиотек без написания компоновщика для SLang.

2

Решение

Вы не предоставили небольшой пример «Hello World» для своего языка программирования и, по вашей ссылке, не показали ни одного примера напрямую.

Попытка сделать что-то подобное, в прошлом.

Возможно, вы захотите взглянуть на D, так как это похожий известный случай:

http://dlang.org/index.html

Большинство языков программирования не имеют заголовочных файлов, но могут генерировать заголовочные файлы, если они скомпилированы в C или C ++.

Как ваш компилятор / язык программирования обрабатывает отдельные файлы?
Как ваш компилятор / язык программирования находит отдельные файлы?

Я предлагаю вашему языку программирования поддерживать пространства имен или модули. «Обычный C» и «PHP» изначально не имели пространств имен.

Что-то вроде:


Файл: «CollectionExample.sprg»


namespace CollectionExample;

import Collections = "c:\\slang\\Collections.slib";

...

void main()
{
// do something with definitions in "Collections"}
...

Он может генерировать файлы C ++, такие как:


Файл: «CollectionExample.hpp»


А также:


Файл: «CollectionExample.cpp»


#include "c:\\slang\\Collections.hpp"#include "c:\\slang\\CollectionExample.hpp"...

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

Приветствия.

0

Другие решения


По вопросам рекламы [email protected]