Чому сі - добре, а сі
Мова програмування Сі створювався з конкретною метою: це мова для написання портіруемость програм, при цьому максимально ефективний в плані швидкодії, який можна порівняти з асемблером (який на всіх апаратних платформах різний). Зручність програмування в Сі - це річ третьорядна, він дійсно не дуже зручний. Виконуються тільки ті дії, які програміст прописав явно - саме тому рядки і масиви реалізовані так дубово і непоказний.
Якщо поставити перед собою таке завдання і писати відповідно до стандарту ANSI C, то на Сі можна написати портіруемость програму або бібліотеку функцій. Цю програму можливо відкомпілювати практично на будь-якому типі процесора - компілятор Сі є скрізь. І вона буде працювати. Прикладів незліченну кількість (zlib, libpng і так далі).
Отже, Сі - це мова низкоуровневого програмування, призначений для створення портіруемость програм і бібліотек функцій. Його створення було справжньою революцією, тому що він дозволив відв'язати програми від конкретної процесорної архітектури, практично нічого не втративши в продуктивності і швидкодії, в порівнянні з асемблером.
Цю нішу він зайняв назавжди і пребуде в ній назавжди. Немає сенсу придумувати щось ще.
Спочатку творці мови Сі і системи Unix припускали, що виникнуть інші мови, більш зручні для програмістів (кожна мова зі своєю спеціалізацією). Для кожного такого мови, на Сі буде написаний транслятор (НЕ компілятор), який транслює исходник з цієї мови знову ж на Сі, а не в виконуваний код. І вже цей проміжний Сі-текст транслюється Сі-компілятором в бінарний виконуваний файл. Такою була початкова філософія системи Unix: всі програми портіруемость і всі мови надбудовуються над базовою мовою Сі.
Улучшайзеров Бйорн Страуструп і його Сі ++
І ось, користуючись тим, що мова Сі багато хто знає, хтось Бйорн Страуструп вирішив його "проапгрейдить": він приліпив додаткові фічі (здебільшого абсолютно ідіотські - начебто перевантаження стандартних операторів) і додав "об'єктно-орієнтованість". Ну, що стосується "об'єктно-орієнтованості" - це окрема розмова, а в цілому отримали наступне: в мову введено неявні приховані механізми, які не працюють однаково на різних платформах, портіруемость програми писати неможливо, і в той же час мова незручний для високорівневого програмування , як і Сі. Компілятори Сі ++ набагато складніше, ніж компілятор Сі, і є не скрізь. В основному Сі ++ використовують, тому що під нього написані бібліотеки класів (як правило прив'язані до певної платформі і операційній системі).
Проте, Сі ++ використовують і пишуть на ньому програми. Ну просто людина до всього звикає.
Дінрус - це російська версія мови програмування D. На даний момент мова знаходиться в розробці - ведеться розробка основної рантаймной бібліотеки Dinrus.Base.dll
Описувати переваги Ді перед Сі ++ не буду - вони дуже високі.
Що стосується Дінрус, то я особисто займаюся його розробкою і хотів би знайти кваліфікованих помічників.
Сі входить сюди ж, як складова частина.
Ось ряд сішних функцій в Дінрус:
цілий видали (in ткст фімя);
alias видали remove;
цілий перейменують (in ткст з, in ткст в);
alias перейменують rename;
хук времфл ();
alias времфл tmpfile;
ткст час (ткст s);
alias час tmpnam;
цілий закройфл (хук потік);
alias закройфл fclose;
цілий слейфл (хук потік);
alias слейфл fflush;
хук откройфл (in ткст фімя, in ткст режим);
alias откройфл fopen;
хук переоткройфл (in ткст фімя, in ткст режим, хук потік);
alias переоткройфл freopen;
проц устбуф (хук потік, ткст буф);
alias устбуф setbuf;
цілий уствбуф (хук потік, ткст буф, цілий режим, т_мера розмір);
alias уствбуф setvbuf;
цілий вфвиводф (хук потік, in ткст формат, спіс_ва арг);
alias вфвиводф vfprintf;
цілий вфсканф (хук потік, in ткст формат, спіс_ва арг);
alias вфсканф vfscanf;
цілий всвиводф (ткст s, in ткст формат, спіс_ва арг);
alias всвиводф vsprintf;
цілий вссканф (in ткст s, in ткст формат, спіс_ва арг);
alias вссканф vsscanf;
цілий ввиводф (in ткст формат, спіс_ва арг);
alias ввиводф vprinf;
цілий всканф (in ткст формат, спіс_ва арг);
alias всканф vscanf;
цілий берісфл (хук потік);
alias берісфл fgetc;
цілий вставьсфл (цілий c, хук потік);
alias вставьсфл fputc;
ткст дайтфл (ткст s, цілий n, хук потік);
alias дайтфл fgets;
цілий вставьтфл (in ткст s, хук потік);
alias вставьтфл fputs;
ткст дайте (ткст s);
alias дайте gets;
цілий вставте (in ткст s);
alias вставте puts;
цілий отдайс (цілий c, хук потік);
alias отдайс ungetc;
т_мера Новомосковскйфл (ук указат, т_мера розмір, т_мера nmemb, хук потік);
alias Новомосковскйфл fread;
т_мера пішіфл (in ук указат, т_мера розмір, т_мера nmemb, хук потік);
alias пішіфл fwrite;
цілий дайпозфл (хук потік, цілий * поз);
alias дайпозфл fgetpos;
цілий устпозфл (хук потік, in цілий * поз);
alias устпозфл fsetpos;
>> максимально ефективний в плані швидкодії
Швидкодія визначається реалізацією компілятора / оптимізатора і стандартних бібліотек. Сам по собі мова не може бути гальмівним або швидким.
>> Якщо поставити перед собою таке завдання і писати відповідно до стандарту ANSI C, то на Сі можна написати портіруемость програму або бібліотеку функцій.
Аргумент відстійний. Стандарт ANSI C занадто малий і навіть мережевий введення / виведення в себе не включає. Про яку портіруемость мова? Для утиліт рівня grep / echo / cat? Тому що ніяке графічне додаток на ANSI C написати не вийде. Кросплатформеність в бібліотеках типу qt / gtk досягається за рахунок подачі різного коду різних архітектур. Немає причин, по яким те ж саме можна зробити і в C ++.
zlib і libpng погані приклади, оскільки це допоміжні бібліотеки, яким від системи потрібно хіба що виділення пам'яті або файловий ввід / вивід - це повинно бути в будь-стандартної бібліотеці будь-якої мови програмування. Решта в них складають найчистіші алгоритми.
>> Компілятори Сі ++ набагато складніше, ніж компілятор Сі, і є не скрізь.
Компіляторів купа, і під різний. Той же GCC може бути легко портований на потрібну архітектуру. Пояснюю принцип його роботи - код на C ++ спочатку транслюється в асемблер цільової архітектури, після чого до нього "пришивається" OS-залежний код (типу ініціалізації при старті і т.д.), після чого все це лінкуются в потрібний виконуваний формат, разом з Портировать стандартними бібліотеками.
>> В основному Сі ++ використовують, тому що під нього написані бібліотеки класів (як правило прив'язані до певної платформі і операційній системі).
Раптово, для використання C ++ бібліотек зовсім не обов'язково писати на C ++. Достатньо написати заглушку класів в процедури на C. Зачатки ООП є в бібліотеці Glib (не плутати з Glibc), яку використовують і в проектах на C.
Давно не Новомосковскл такої нісенітниці. На сьогоднішній день C ++ є найкращим мовою програмування, на мій погляд. І C природно теж. як його складова частина. Єдине-ця мова вимагає професіоналізму, його переваги проявляються при рівні підготовки розробника набагато вище середнього.
Репост багаторічного товстого наброса давно протухлого холівара на рівні восьмого класу. Свіжіше нету?
марення сивої кобили