Почему один из самых популярных языков программирования называют мер

Почему один из самых популярных языков программирования называют мертвым и кому он нужен?

Category: О проекте

Title image, read title

Дмитрий Герасимов, основатель, генеральный директор компании Demlabs

Блокчейн-платформа CellFrame Network написана на низкоуровневом языке С. Почему мы выбрали именно его для создания наших максимально быстрых, надежных и безопасных сервисов?

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

Какие и кому нужны программисты

Ответ на вопрос «Кому и какие программисты нужны?» зависит от языка программирования, который необходим тому или иному заказчику. Давайте посмотрим, кому нужны программисты на С:

  • Малый и средний бизнес

Чаще всего этот сегмент имеет потребность в сайтах или несложных сервисах. Но язык С актуален и для него. Здесь он может понадобиться для запуска процесса чипизации ПО: переноса тех или иных команд с универсального компьютера на связанные с ним гаджеты.

*Пример использования С в процессе чипизации ПО: устройство, включающее лампочку на камере одновременно с моментом начала съемки, чтобы человеку было ясно, что запись началась.

  • Корпорации

Основной заказчик на рынке услуг по использованию языка С: с его помощью можно решить множество любые запросы, идущие от корпораций.

  • Государство

Заказчик, схожий по запросам с корпорациями и активно использующий возможно языка С для своих нужд.

  • Наука

Чаще всего в сфере науки язык программирования имеет прикладное значение. С здесь тоже используется, но реже, чем, например, Python.

Два периода, когда язык С считался мертвым

1 период. 2000 - 2005 гг.

В тот момент взлет переживал язык Java. Появилось ощущение, что низкоуровневые языки — близкие к машинным кодам и имеющие мало абстракций — теряют свою актуальность.

Тогда заказы на написание решений на языке С приходили практически только от корпораций. В России того времени — Хабра еще не было — комьюнити разработчиков на С общались на русскоязычном сайте IBM.

В тот момент что-либо узнать об этом языке или получить указания по написанию кода на С можно было по сути из двух источников:

  • на сайте Opennet (до сих пор еще жив!)
  • на русскоязычном сайте IBM

2 период. 2016 год - по настоящее время.

Сейчас взлет переживает язык Rust. Это своего рода конкурент языка С. В рамках этой конкуренции язык С переживает большое давление (эта конкуренция похожа на ту, которая была между C++ и Java в начале нулевых). Сейчас все, что раньше предполагалось писать на языке С, все чаще пишут на языке Rust. Но и здесь возможен некий откат.

Сегодня программирование популярно, люди массово идут на курсы программирования на разных языках. А вот в 80-90-е ситуация была совсем иная: в программисты шли энтузиасты, которые изучали не только программирование, но и массу всего смежного. К тому же, это всегда были люди с высшим образованием: те, кто закончил университет по специальности «программирование» (или, по крайней мере, «математика»).

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

Особенности российского программирования (и программистов!)

  • Традиция олимпиад
  • ВПК (интересные задачи для программистов, которые пишут на С: например, в области ракетостроения, создания дронов и т.п.
  • Плохое знание английского и, как следствие, создание собственных оригинальных решений, не похожих на общепринятые.
  • Плохие навыки коммуникаций. Это часто заставляет многих отечественных программистов идти в горизонтальный карьерный рост — от джуниора до архитектора и…все.
  • habr.com, как площадка для обмена опытом.
  • Традиция «изобретать велосипед»: склонность «перепридумывать» уже существующие решения.

Сегодня общие решения нередко становятся не слишком надежными: возникает так называемая проблема «supply channel attack» (внедрение каких-либо негативных элементов в общедоступную библиотеку данных)

В сфере криптовалют это особенно опасно (язык Rust), ведь при закладке вредоносного элемента в код криптовалют можно украсть сотни миллионов и даже миллиардов долларов. Совсем недавно подобное произошло с криптовалютой Solana).

История С/С++

Почему эти два языка идут вместе и считаются основой для программирования?

Ведь последние десять лет эти языки не популярны, и код на них пишут редко.

Но все-таки это основа. Почему?

Изначально был ассемблер — машинно-ориентированный язык программирования низкого уровня. Этому языку уже за 70, он основан на работе с машинным языком, языком «процессора». Каждая его команда — это команда процессора, а не операционной или файловой системы. Но он оказался неудобным: уже в 50-60 годах было очевидно, что работать с ним непросто.

Следующим этапом стало появление языка С — компилируемого, статически-типируемого языка программирования общего назначения (разрабатывался Ритчи и Керниганом в 69-73 гг.). Название свое язык получил потому, что стал следующим шагом в разработке после языка B. Впрочем, есть и другая трактовка этого названия: С — кроссплатформенный (cross-platform) ассемблер.

Язык С был призван совместить несовместимое — мир человеческих абстракций и машинных кодов. Он стал прародителем почти всех существующих языков (наравне с языком Simula и Lisp).

С++ стал прямым объектно-ориентированным продолжением языка С. Это первый действительно универсальный язык программирования (особенно в промышленности).

Дополнительно С породил Objective-C и Objective-C++ (языки экосистемы Apple) и — уже позднее — Rust, Go, Java, С# и многие другие.

С и С++ для языков программирования — это как латынь для латинских языков. Они в основе всего. Знаем их — знаем все.

Области применения С и ассемблера

Программисту на С необязательно, но рекомендуется знать ассемблер. Это расширяет его возможности и глубину понимания того, какую важность имеет время выполнения задач. Зачастую, время исполнения даже важнее, чем производительность.

Во многом именно поэтому техника Apple имеет преимущество перед Android — ее разработчики думали об оптимизации на низком уровне, о времени исполнения. Вследствие этого телефоны Apple дольше живут на одной батарее и демонстрируют более быстрый отклик интерфейса.

  1. High Load (Высоконагруженные системы)
  • облачные вычисления
  • научные вычисления (телескопы, дроны и т.п.)
  • мультимедиа
  1. Встраиваемые системы (например, чипизация ПО)

Наиболее распространенная область применения языка С — программирование, прошивка «железа».

  • в полноценных мини-компьютерах (например, Raspberry Pi)
  • в системах без ОС (8- и 16-ти битные чипы Attiny)
  • системы, в которых есть только ядро
  1. Криптография
  2. Системные службы (все, что «под капотом» у операционной системы)
  3. Вредоносное ПО
  4. ПО энтузиастов
  • Написание графических приложений (например, wireshark — приложение для анализа сетевого трафика)
  • Написание игровых движков (например, в Quake Arena 3)
  • Blockchain

Уровни программирования

Пространство пользователя:

  • системное программирование (самая очевидная среда использования языка С) : системные библиотеки и сервисы ОС
  • прикладное программирование: frontend, middleware, backend

Пространство ядра (напрямую работаем с процессором и элементами железа):

  • системное программирование: драйверы и службы ядра
  • прикладное программирование: простейшие встраиваемые системы

Псевдо ООП (объектно-ориентированное программирование)

Как устроен исходник на С? Никаких объектов в коде нет, но программист читает код — у него в голове появляется ООП. Эта техника называется псевдо ООП и относится к zero cost abstraction («абстракции с нулевой стоимостью»).

Конкуренты С

  • Rust (самый молодой, быстрый и производительный, активно используется в криптоиндустрии)
  • C++ (может делать некоторые вещи быстрее, чем C)
  • GO (golang) (нет небезопасного режима (арифметики указателей), есть псевдо функции (goroutines) без собственного стека, которые в некоторых типовых задачах предполагают скорость работы даже более высокую, чем у C++)

Почему сейчас стоит писать на С

  • Производительность (высокая скорость): Rust медленнее в 2-3 раза, C++ — в 5 раз, Java — в 20 раз, Python — в 200 раз
  • Максимальная портируемость (заведется даже на холодильнике!)
  • Много готовых разнообразных библиотек
  • Меньше конкурентов
  • Можно сделать любой сервис
  • Это круто!

Будущее C

  • AI-отладка: статистический анализ кода для отладки языка C, который может повлечь за собой отмирание многих высокоуровневых языков в будущем)
  • CoPilot: искусственный псевдоинтеллект от компании Microsoft, который подсказывает код
  • Чипизация ПО (программирование гаджетов)
  • Стандартные компоненты
  • Новые ОС
  • Новые языки