Должна ли стандартная библиотека C ++ быть написана на C или сборке? - PullRequest
2 голосов
/ 06 декабря 2010

Можно ли написать полную стандартную библиотеку C ++ (включая, конечно, STL, но автономную, только внутренние зависимости), используя только C ++?Я бы предположил, что контейнеры и <cstdlib> функциональность были бы выполнимы с точки зрения char s, битовых сдвигов и для циклов и других причудливых байтовых вещей, но такие вещи, как исключения и, возможно, std::cout и std::cin, кажутся мне трудными беззависимость для начала.Допустим, есть набор доступных функций ОС, которые полностью реализованы на ассемблере (чтобы избежать заражения Си).

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

Если это было задано ранее или это тривиально глупый вопрос, пожалуйста, прости меня.Я не пытаюсь начать войну C <-> C ++ здесь, просто пытаюсь выяснить ограничения реализации зверя, такого как Стандартная библиотека ...

Спасибо!

Ответы [ 4 ]

6 голосов
/ 06 декабря 2010

Поскольку практически все, что написано на C, можно довольно легко переписать на C ++, вы спрашиваете, нужен ли ассемблерный код, и ответ обычно - нет.

Если мы не говорим о встроенном программировании, операционные системы имеют все необходимые функции файлов и ввода / вывода, доступные через системные вызовы, обычно (в настоящее время) в формате C. Библиотека должна вызывать их, вероятно, через extern "C"{ ... } объявления. Функции операционной системы не считаются частью библиотеки C ++ и, как правило, не являются точным соответствием чему-либо определенному в Стандарте C ++.

Чтобы реализовать стандартную библиотеку C ++, вам необходимо знать сам язык, знать вызовы ОС, которые вы собираетесь использовать, и иметь алгоритмы, которые вы собираетесь использовать. На этом этапе это довольно простой вопрос написания программного обеспечения.

3 голосов
/ 06 декабря 2010

Во-первых, не имеет значения, является ли это C, C ++ или D. Любой компилируемый язык программирования в конце дает вам (в основном) один и тот же объектный файл сборки.

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

GCC теперь генерирует действительно хороший вывод в asm для исключений.Я рекомендую прочитать о C ++ ABI (если вам это интересно).

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

Я надеюсь, что я хотя бы частично ответил на ваш вопрос.

1 голос
/ 06 декабря 2010

Единственная часть C ++, которая нуждается в сборке, - это обработка исключений. Я полагаю, что это может быть выполнимо в C ++, если существуют библиотеки для обработки необходимых регистров и управления стека.

Конечно, эти библиотеки будут включать сборку. Другого способа управления регистрами просто не существует.

1 голос
/ 06 декабря 2010

STL очень сильно зависит от заголовочных файлов #include ed.Это в значительной степени должно быть C ++.

Все, чего нет в одном из этих заголовочных файлов, хотя теоретически может быть реализовано на C, Ada, Assembly или другом языке системного программирования на ваш выбор.Однако вам, вероятно, придется поддерживать два интерфейса, если вы не создадите хотя бы верхний уровень C ++.

...