November 13th, 2019

Книга Ben Clemens "21st Century C"

Прочитал книгу Ben Clemens "21st Century C", 296 стр., англ. язык.



Не очень понравилось. Автор больше всего внимания уделяет макросам, особенно макросам с использованием __VA_ARGS__. Это может выглядеть эффектно, но на самом деле, макросы - зло, а макросы с __VA_ARGS__ - зло в квадрате.

В книге упоминаются некоторые возможности С11, но специально они не перечислены. Расширения синтаксиса gcc вообще не упоминаются. Про параллелизм написано, что он существует, и даже упоминаются потоки С11 и pthreads, но без существенных подробностей, а про OpenMP даже не упомянуто.

Материал выглядит довольно бессистемным сборником рецептов, придуманных самим автором, и не являющихся best practices в языке С.

Моё мнение таково: язык С очень старый, и имеет множество черт, которые в наше время устарели и мешают писать красиво и эффективно. Развитие С идёт медленно, последний стандарт языка был принят в 2011 году. Для сравнения, С++ уже имеет стандарт 2020 года, и вовсю обсуждаются дальнейшие нововведения.

Это многие понимают, и в последние годы было достаточно много попыток создать язык системного программирования, лишённый этих недостатков. В качестве примеров можно привести языки D, Rust, в некоторой степени Go, и несколько языков, пока не вышедших из стадии экспериментов. Но ни один из этих языков не может, в силу разных причин, заменить С.

Вместе с тем, есть прекрасный, мощный, хотя и сложный язык, позволяющий решать те же задачи, что и С. Это С++, конечно же. Последние стандарты существенно расширили синтаксис языка, сделав его удобным и мощным. Конечно, С++ в первую очередь ассоциируется с ООП, которое подходит не для всех задач, и влечёт за собой некоторые накладные расходы, как по времени выполнения кода, так и по объёму исполняемого кода. Но на самом деле, ООП не является обязательным в С++. Можно писать на С++ вообще не используя классов, но используя весь остальной синтаксис, и, таким образом, использовать С++ как "улучшенный С".