Relearning C: Новые идиомы?

Я переучиваю C после того, как не коснулся его с 2000 года или около того. С тех пор я работаю в Ruby, и я обнаружил целый мир идиом программирования, о которых я никогда не знал.

Какие важные методы С, книги, идиомы и т.д. возникли в последнее десятилетие, если они есть? Я знаю о стандартах C99 и C11, но где еще я должен смотреть? Или стиль C оставался постоянным, даже когда OOP и FP стали нормой?

Ответ 1

C не поддерживает на уровне языка не что иное, как процедурное программирование - и это точный выбор, потому что он родился в основном как "переносная сборка", и он работал как можно плотно рядом с машиной (без прибегая к сборке). Большинство языков ассемблера не обеспечивают гораздо больше, с точки зрения парадигмы программирования, чем оператор вызова стека и функции (некоторые из них даже не такие) - и то, на что моделируется C.

В конце концов, есть причина, по которой родились С++ и Objective C: C должен сохранять свою философию дизайна и добавлять больше абстрактных материалов, которые люди должны были бы развить язык.

Если говорить, то ничего не мешает вам писать, например. OO-код на C - на самом деле, многие люди делают это (я бы сказал, что это одна из самых распространенных идиом на C), но вам не нужно ожидать почти любого синтаксического сахара для этого: вам нужно будет использовать struct для данных, "нормальные" функции для "эмулировать" методы, состав для наследования, таблицы указателей для полиморфизма и т.д. Тем не менее, я не знаю, считается ли это как идиома "последнего десятилетия", она используется с гораздо дольше.

Ответ 2

Это зависит от культуры, и она действительно не развивалась так же сильно, как и другие языки, которые я использую. Я видел:

  • больше тип безопасность
  • лучший инструмент
  • 32/64 бит совместимых кодов и типов фиксированной ширины
  • в частности POSIX
  • более объектно ориентированный

не совсем новые идиомы для каждой точки - насколько способ построения и приближения программ, это некоторые из наиболее заметных изменений на исходном уровне.