Я також збираюся йти проти зерна тут і намагатись зробити (трохи жартівливий) естетичний випадок для C. Хоча деякі люди можуть називати це "потворним" з різних причин, наприклад, відсутність конструкцій вищого рівня, таких як класи або залежно від покажчиків, я вважаю, що це не так для мене .
TL; DR : На мій погляд, C простий, хороший C читабельний, і певну радість можна знайти в шматочках.
C проста
Стандарт C визначає лише кілька основних типів та механізмів для створення функцій, покажчиків та масивів з них. На додаток до цього, існує невелика кількість композиційних конструкцій для створення більш складних типів з примітивів (наприклад, структур та об'єднань). Зверніть увагу, як я описав більшу частину мови у двох реченнях. Це означає, що вам не потрібно зберігати в голові занадто багато синтаксичних правил і форм, кодуючи їх.
Просто - красиво .
C не є таємничим
На відміну від багатьох мов вищого рівня, вам важко буде знайти багато дивних, незрозумілих символів у С. У світі С головним засобом як абстракції, так і "синтаксичного стиснення" є функція - семантично дуже проста і самозрозуміла конструкція. Хороший стиль C заохочує майже поетичну, читабельну красу. Для ілюстрації спробуємо прочитати наступний фрагмент з ядра Linux. Навіть не розуміючи основної структури даних та деталей щодо реалізації, ми можемо мати багато сенсу з наступного:
bool kthread_freezable_should_stop(bool *was_frozen)
{
bool frozen = false;
might_sleep();
if (unlikely(freezing(current)))
frozen = __refrigerator(true);
if (was_frozen)
*was_frozen = frozen;
return kthread_should_stop();
}
Середина функції звучить "у випадку малоймовірності того, що струм замерзає, попросіть холодильник, чи дійсно сталося заморожування". Доктор Сеусс не міг написати це краще.
Читання - це красиво .
C прозорий
Якщо висловлювання C не включає виклик функції, як правило, ви можете отримати дуже гарне уявлення про його вартість виконання та побічні ефекти. C дає програмісту контроль і в кінцевому підсумку довіряє йому чи їй зробити правильно. Ми можемо отримати уявлення про те, що відбувається, коли цей (трохи переформатований для SE) фрагмент із впровадження strlen()
у бібліотеці GNU C працює, оскільки кожен оператор має чітко визначену семантику. У С. немає перевантаження.
for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
++char_ptr)
if (*char_ptr == '\0')
return char_ptr - str;
Для цілей «оптимізації» ця властивість чудова. Можливо, деякі мови вищого рівня полегшують стисле вираження алгоритмів вищого рівня (наприклад, C ++ з класами та перевантаженням), але для цілей, на які C був розроблений - виступаючи як портативний асемблер - C ідеально підходить. Іноді, після успішного виконання коду низького рівня, програміст може відчути себе з машиною, в певному сенсі (або нульовим - це деталь реалізації). Це не означає, що інші мови погані, недостатньо "дзен" або щось подібне нерозумно, просто те, що IMO C може бути цікавим тим, що багато інших мов з багатьох поважних причин вирішили не бути.
На мою думку, три наведені вище пункти дозволяють керувати створенням складних, але ефективних - систем, втілених у моїй думці Linux. Я вважаю, що цей світ звертається до моїх естетичних почуттів, і я б порадив кожному, хто вважає С своєю наступною ціллю, розглянути ці моменти. Я вважаю, що аргументи щодо операційних систем і того, що краще підтримувати, чітко викладаючи їх, тому що, звичайно, не потрібно розуміти ядра, щоб бути успішним програмістом, але можна знайти ці поля переконливими.