C є відкритим кодом?


77

Це, мабуть, дурне запитання, але я вже давно задавався цим питанням. Чи має C (або будь-яка інша мова низького рівня), взагалі, джерело, чи компілятор - це та частина, яка "виконує всю роботу", включаючи аналіз? Якщо так, то чи не можуть різні компілятори мати різні діалекти С? Де тут фактор stdlib? Мені б дуже хотілося знати, як це працює.

Відповіді:


135

Мова С - це не програмне забезпечення, а визначений стандарт , тому не можна сказати, що це відкритий код, а скоріше, що це відкритий стандарт.

Однак існує безліч різних компіляторів для C, і багато з них справді є відкритими. Найпомітнішим прикладом є компілятор C GCC , який знаходиться під загальною публічною ліцензією GNU (GPL) , ліцензією з відкритим кодом.

Варіантів більше. ВаткомНаприклад, є відкритим кодом. Не бракує компіляторів з відкритим кодом C, але, без сумніву, найпоширенішим, принаймні у світі, який не є Windows, є GCC.

Для Windows найкращим варіантом є Watcom або GCC, використовуючи Cygwin або MinGW .


29

C - це стандарт, який визначає, як компілятори C повинні генерувати програми.
Сам C не має жодного вихідного коду, як і музична нота не має пластику.

Деякі компілятори C, такі як GCC, є відкритими.


6
хороша відповідь, хоча музична нота / пластична аналогія була дещо сюрреалістичною. :-)
Spudley

10

C - це лише мова, причому стандартизована. Це майже компілятор, який "виконує всю роботу". Різні укладачі мали різні діалекти; до стандарту C99 ANSI у вас були такі речі, як Borland C та інші конкуруючі компілятори, які реалізовували мову C своїми фантастичними способами.

stdlib це лише узгоджена колекція стандартних бібліотек, які повинні бути присутніми в будь-якій реалізації ANSI C.


4

Щоб додати до інших чудових відповідей:

Що стосується різних діалектів - до C додано кілька додаткових функцій, які є специфічними для компілятора. Ви можете надати прапорець командного рядка -std=...gcc, щоб вказати стандарт C, який ви хочете використовувати, кожен має незначні зміни / доповнення до синтаксису, найпоширеніший, ймовірноc99 .

Кожен компілятор має тенденцію реалізовувати кілька різних додатків, наприклад, typeof()це не входить до стандарту С, тому компілятори не повинні реалізовувати це, але тим не менш це корисно, і більшість компіляторів надають це. Ось список розширень gcc C.

Stdlib - це набір функцій, визначених стандартом C. Подібно до компіляторів, stdlib може мати різні реалізації. Реалізація GNU є відкритим кодом, як і gcc, але існують інші компілятори і можуть бути інші реалізації stdlib, які є закритими.


3

Компілятор визначав би всі відображення від С до Асамблеї тощо ... але, наскільки хтось, хто володіє ним ....., насправді ніхто не володіє С, однак ANSI / ISO визначає стандарти


2

Компілятор C GCC написаний на мові C. Отже, ми знаємо, що існує принаймні один компілятор C, написаний на C.

GNU stdlib(glibc) також написаний на C (stdio.h, stdlib.h). Але в ньому також є деякі частини, написані мовою асемблера.


1

Справді гарне запитання. Є спосіб визначити мовний стандарт (а не реалізацію!) У формі "вихідного коду", суворою і однозначною мовою. На жаль, усі старі мови, включаючи С, погано визначені. Але все-таки можливо перевести ці визначення у форму вихідного коду.

Інший підхід полягає у визначенні мови за допомогою її оперативної семантики , часто у формі простої (та неефективної) посилальної реалізації.


1

Хельгі Храфн Гуннарссон написала головну відповідь, але я вважав, що варто зауважити, що ви можете ефективно закінчити діалектами.

Компілятори повинні робити те ж саме щодо будь-якого стандарту, який вони підтримують (який на сьогоднішній день повинен бути майже однаковою версією), але є сірі області. Наприклад, як компілятори працюють над "невизначеною" функціональністю. Якщо специфікація C говорить, що поведінка невизначена для конкретного випадку, то компілятор може робити майже те, що хоче.

Є також приклади функцій, доданих до бібліотек (і доданих нових бібліотек) розробниками компіляторів для підтримки певних особливостей платформи, створення конкурентних переваг або просто для полегшення життя. Цинік може припустити, що деякі з них додані, щоб допомогти зафіксувати людей у ​​певному компіляторі.


1

Я б сказав, що C як мова не є відкритим кодом. Як зазначають багато людей, ви можете завантажити ліцензовані компілятори та бібліотеки GNU безкоштовно, але якщо ви хочете написати свій власний компілятор C, вам потрібно буде дотримуватися стандартів ISO C, а ISO вимагати твердих грошей за специфікацію мови C , що на момент розміщення це становить 178 доларів. Тож насправді відповідь залежить від того, які елементи ви зацікавлені у тому, щоб бути вільними та з відкритим кодом.


0

Я не впевнений, які ваші визначення поняття "відкритий код".

У процесі стандартизації може взяти участь кожен, але якщо ви хочете мати можливість голосувати, вам потрібно буде заплатити за приєднання до вашого національного органу (наприклад, ANSI для США, BSI для Великобританії, AFNOR для Франції тощо). Як правило, більшість членів органу, що відповідає стандартам, виплачуються корпораціями. Тим не менш, процес є досить відкритим. Ви можете отримати доступ до дискусійних робіт на веб-сайті стандартів .

Самі стандарти теж не безкоштовні. В даний час у магазині ISO pdf продається стандарт С за 198 швейцарських франків . Чорнові копії стандарту можна легко знайти безкоштовно.

Існує безліч реалізацій з відкритим кодом як компіляторів, так і бібліотек.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.