Я также собираюсь пойти против структуры и попытаться сделать (немного смешно) эстетическое обоснование C. Хотя некоторые люди могут назвать это "некрасивым" по разным причинам, таким как отсутствие конструкций более высокого уровня, таких как классы или Я полагаю, что это не тот случай для меня .
TL; DR : На мой взгляд, 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 выполняется, поскольку каждый оператор имеет четко определенную семантику. Там нет перегрузки в 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. Я считаю, что этот мир апеллирует к моим эстетическим чувствам, и я бы посоветовал всем, кто считает С своей следующей целью, рассмотреть эти моменты. Я чувствую, что аргументы об операционных системах и тому подобное лучше поддерживаются явным изложением их, потому что определенно не нужно понимать ядра, чтобы быть успешным программистом, но можно найти эти поля убедительными субъективно.