Что такое newlib на языке C?

В Википедии сказано, что «Newlib — это реализация стандартной библиотеки C, предназначенная для использования во встроенных системах». Хорошо, но где я могу найти последнюю версию canon? то есть правильная истинная полная версия.

Кроме того, какие еще библиотеки существуют для языка C? Не могли бы вы дать мне номера ISO для них?

Я пытаюсь понять, какие типы/версии библиотек существуют для языка C, поэтому я знаю, что они означают, когда столкнусь с ними в будущем.

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


person quantum231    schedule 22.01.2017    source источник
comment
Newlib является реализацией стандартной библиотеки.   -  person GSerg    schedule 23.01.2017
comment
Я сталкиваюсь с ними в будущем, просто используйте реализацию вашего компилятора, как правило, достаточно.   -  person Stargateur    schedule 23.01.2017
comment
Стандарт C описывает набор функций, которые должны предоставлять все совместимые компиляторы C. Это стандартная библиотека C. Фактическая реализация самой библиотеки, и особенно ее имя, на самом деле не имеют значения. Если у вас есть библиотека, реализующая стандартную библиотеку C, это a стандартная библиотека C.   -  person Some programmer dude    schedule 23.01.2017
comment
Я балуюсь Nios II, это процессор, реализованный в FPGA. Есть своя IDE. Однако я также занимался программированием на C для настольного компьютера. (Да я не программист, просто балуюсь). Поэтому я пытался понять, какие варианты стандартной библиотеки Си существуют, какое у них название и какие файлы с какими функциями они содержат.   -  person quantum231    schedule 23.01.2017
comment
@ Какой-то программист, чувак, что ты имеешь в виду под реализацией библиотеки? Если код написан на языке высокого уровня (самом Си), то зачем нам вообще нужны разные реализации?   -  person quantum231    schedule 23.01.2017
comment
Таким образом, этот URL-адрес, по-видимому, является местом для загрузки новой библиотеки sourceware.org/newlib, и эта статья немного описывает компилируя его billgatliff.com/newlib.html, как и эту вики wiki.osdev.org/Porting_Newlib   -  person Richard Chambers    schedule 23.01.2017
comment
Это все равно, что спросить, почему у нас должны быть разные реализации компилятора C? Или действительно разные языки программирования? К небольшим встраиваемым платформам предъявляются другие требования, чем к полноценным мультигигагерцовым ПК с несколькими гигабайтами памяти. Не существует универсального решения для всех.   -  person Some programmer dude    schedule 23.01.2017
comment
Мы можем просто использовать разные компиляторы для разных процессоров, чтобы скомпилировать один и тот же код C для работы на разных процессорах, зачем тогда нужны разные реализации? Не могли бы вы дать определение термину «реализация» в том смысле, в каком он здесь используется?   -  person quantum231    schedule 23.01.2017
comment
Термин «реализация» означает именно это, реализацию, фактический код. И как такая библиотека, как GNU libc (реализация GNU стандартной библиотеки C), поместилась бы на компьютере всего с парой мегабайт (или даже кило байт) памяти? Память? Сама библиотека намного больше. Или для операционной системы, для которой он не был разработан? Вы знаете, что везде есть маленькие компьютеры, которые не соответствуют аббревиатуре ПК? Разные операционные системы, разное железо (не только процессор) и многое другое означает разные варианты (реализации) библиотеки.   -  person Some programmer dude    schedule 23.01.2017
comment
Да я это понимаю, имею дело именно с таким, процессором с оперативкой менее 1Мб. Тогда мой последний вопрос (надеюсь) заключается в том, содержат ли реализации стандартных библиотек больших библиотек и реализации небольших стандартных библиотек одни и те же функции, поскольку они должны выполнять одни и те же спецификации? Если да, то чем вызвано изменение размера?   -  person quantum231    schedule 23.01.2017
comment
@ quantum231 Реализация, как правило, менее полная, но обычно неполные функции редко используются, поэтому они будут казаться похожими. Это приводит к уменьшению размеров. Кроме того, многие вещи, присутствующие в ОС (такие как потоки, файлы и т. д.), должны быть вручную добавлены через заглушки в новую библиотеку, чтобы они работали.   -  person    schedule 23.01.2017
comment
Если библиотека должна реализовывать стандартные функции C, то да, обе библиотеки должны содержать по крайней мере их. Они также могут содержать специфичные для платформы функции. Или другие нестандартные функции. А размер зависит от кода, реализации. Большая библиотека может иметь другие оптимизации, в то время как маленькая библиотека фокусируется только на размере. Многие алгоритмы можно закодировать по-разному, чтобы они были быстрыми или малыми, но часто не тем и другим одновременно. Различные способы выполнения операций, даже если конечный результат один и тот же, приводят к различному коду и разным размерам.   -  person Some programmer dude    schedule 23.01.2017


Ответы (1)


Это одна из многих реализаций стандартной библиотеки C. Вот некоторые другие реализации:

Это прекрасное сравнение 4 различных реализаций. Вам может быть проще понять, почему люди создают свои собственные реализации: http://www.etalabs.net/compare_libcs.html

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

Python, например, также имеет различные реализации - см. этот ответ: /а>.

person Mateusz Piotrowski    schedule 22.01.2017
comment
ага, хм, не могли бы вы кратко описать, что подразумевается под реализацией. Поскольку мы пишем реализацию библиотеки в коде C, зачем нужны разные реализации? Мы можем просто использовать разные компиляторы для разных процессоров, чтобы скомпилировать один и тот же код C для работы на разных процессорах, зачем тогда нужны разные реализации? Стандартная библиотека, безусловно, должна соответствовать всем его требованиям, верно? - person quantum231; 23.01.2017
comment
@ quantum231 Например, вы создаете продукт и не хотите использовать какой-либо код GPL. В этом случае GNU libc вам не подходит. Вторым примером может быть кодирование сверхзащищенного приложения, и вы должны самостоятельно убедиться, что используемая вами библиотека достаточно безопасна для вас — в этом случае вы можете выбрать реализацию с кодовой базой, достаточно малой для аудита. и просмотрите его перед использованием. - person Mateusz Piotrowski; 23.01.2017
comment
@quantum231 Посмотрите на ссылку, которую я разместил: etalabs.net/compare_libcs.html. Существует таблица, объясняющая различия между 4 реализациями. Вы можете легко увидеть, о чем идет речь. - person Mateusz Piotrowski; 23.01.2017
comment
кстати, поскольку GPL означает что-то бесплатное и с открытым исходным кодом, почему бы не захотеть его использовать? Я имею в виду, если что-то экономит время и деньги, мы бы выбрали это, верно? Кстати, я инженер-электронщик, а не инженер-программист, но я изучаю программное ядро ​​Nios II, используемое в Altera FPGA, и набор инструментов, используемый с ними. - person quantum231; 23.01.2017
comment
@ quantum231 В некоторых случаях можно не захотеть публиковать исходный код своего программного обеспечения. В этом случае GPL — враг. - person ; 23.01.2017
comment
@ quantum231 Марк прав. В основном это и есть причина. Иногда выпуск вашего исходного кода — не лучшее решение для вашей бизнес-модели, и это то, к чему вас обязывает GPL. (Конечно, лицензирование в целом намного сложнее, поэтому я рекомендую вам немного прочитать об этом. Это действительно увлекательно.) - person Mateusz Piotrowski; 23.01.2017
comment
@ quantum231: Стандарт языка определяет только типы и имена, которые должна предоставлять библиотека (в виде прототипов функций), а также их поведение (на простом английском языке). Сам по себе он не предоставляет никакого кода, реализующего такое поведение. Стандарт не является программным обеспечением, это просто спецификация. Настоящие библиотеки, о которых здесь идет речь, являются программными. - person Kerrek SB; 23.01.2017