Какие приложения запрограммированы в C в наши дни?
Когда я учился в колледже 20 лет назад, C был нашим языком выбора, потому что в то время это была почти единственная игра в городе как язык программирования общего назначения. Мы научились программировать с использованием C. Он использовался для системного программирования, структур данных, операционных систем и всего остального. Консольный ввод-вывод на основе текста был основным способом взаимодействия с компьютером. GUI были редкими, и веб-программирования вообще не существовало.
Переверните часы вперед на 20+ лет. У нас есть множество языков, которые специализируются. Например, PHP хорош для веб-программирования. Было бы безумно писать веб-приложение на C, но также было бы безумным делать системное программирование на PHP.
Я больше не пишу на C. Я уже не в курсе, что касается нынешнего использования в отрасли языка. Я знаю, что он используется для разработки ядра, микроконтроллеров и т.п. Что еще?
Каковы ключевые отрасли, которые используют C, потому что это лучший язык для работы? Для каких типов приложений предпочтительным является C?
Ответы
Ответ 1
Одной из наиболее важных особенностей C является ее мобильность. На x86 у вас почти все языки программирования, но на некоторых других архитектурах C часто является единственным выбором в дополнение к сборке. Другое значение переносимости - это, как указал кто-то, большинство других языков программирования имеют привязки C. Когда у вас есть библиотека C, вы можете относительно легко использовать API Perl или Python со сравнимой скоростью с родной библиотекой C. Кроме того, компиляторы C обычно гораздо более надежны, чем компиляторы С++ и более зрелые. Кто-то сказал мне, что это одна из многих причин, почему Linux-ядро написано на C.
Ответ 2
Я использую C для программирования без систем. Моя работа связана с bioinformatics. Причина, по которой я использую C, состоит в том, что существует очень много очень хороших библиотек C, а подпрограммы очень интенсивно работают с процессорами.
C также легко связывается с другими языками. Таким образом, вы можете построить библиотеку на C и работать с С++, Python, Java,.NET, Ruby, PHP и т.д. Это не так прямолинейно в обратном направлении.
Ответ 3
Причины, по которым можно увидеть новый код C, включают:
- Код, который по-прежнему нуждается в доступе к "голым металлам" (драйверы устройств и т.д.).
- Библиотечные подпрограммы (вызываемые с других языков, пожалуйста), где производительность имеет решающее значение.
- Взаимодействие с существующей базой кода C.
- Среды (например, встроенные контроллеры), где жесткие ограничения ресурсов ограничивают решения.
Правда, код общего назначения (особенно там, где есть человек в цикле)... не так много.
Ответ 4
Все, что близко к аппаратным драйверам устройств и встроенным системам, наиболее заметно. Вещи, где уровень абстракции C полезен для обеспечения некоторой переносимости, но что-то еще мешает.
Ответ 5
В наши дни я занимаюсь главным образом работой Linux, и поразительное количество кода Linux написано на C, а не на С++ или что-то еще.
Есть очень веские причины для ядра Linux, и в этом отношении другие ядра, такие как Darwin, различные BSD-дистрибутивы и т.д., написаны на C. Вот несколько:
-
C часто называют "портативным языком ассемблера". Это довольно легко мысленно "скомпилировать" простые операторы С для целевого ЦП и представить, что произойдет, с точки зрения инструкций и регистров и т.д. И вы действительно хотите это сделать при работе с ядром ОС.
-
Существует множество библиотечных процедур, которые вы просто не можете использовать в ядре, например malloc() или printf(), потому что в этом контексте они небезопасны. Вместо этого вы должны использовать специальные эквиваленты ядра. Проблема с С++ заключается в том, что многие вещи, которые люди считают основными языковыми функциями, такими как новый оператор или iostreams или автоматическое построение объектов в стеке, не будут безопасны в ядре в их конфигурациях по умолчанию. Возможно, вы сможете взломать что-то, что сработает, но гораздо проще придерживаться известного рабочего решения, которое должно использовать C.
-
База кода уже написана на C, и было бы огромной задачей преобразовать ее в С++.
-
Для данной архитектуры процессора код, сгенерированный с C, довольно стандартизирован. Не так с С++, особенно для таких вещей, как шаблоны и встроенные функции. Язык машины из С++ довольно непредсказуем, а некоторые компиляторы С++ производят действительно раздутый код. Это не то, что вы хотите в ядре, код которого должен быть как можно более предсказуемым, быстрым и малым.
Множество других функций "пользовательского пространства" в Linux также написано на C. Некоторые из компонентов, над которыми я работаю, включают в себя X Windows, GLib/GObject, GDK/GTK, Cairo, Pango и Clutter. Все они могли быть написаны или переписаны на С++, но, похоже, предпочтение от C в мире Linux.
Ответ 6
Встроенные устройства, алгоритмы торговли, алгоритмы обработки звука, драйверы, ядро Linux и т.д.
Ответ 7
Развитие языка, поэтому нам не нужно писать в C.
Python - http://svn.python.org/view/python/trunk/Parser/
PHP - http://svn.php.net/viewvc/php/php-src/trunk/main/
Perl - http://perl5.git.perl.org/perl.git/tree
Lua - http://www.lua.org/ftp/
Ответ 8
В моей текущей роли мы обычно пишем только код C при изменении устаревших систем (VxWorks ядро) или иногда для простых инструментов или программы.
C также безумно переносима; (примерно) каждая ОС и ядро имеют компилятор C - поэтому для приложений, требующих такой поддержки, C является одним из лучших доступных вариантов.
С++, как правило, превосходит C, хотя я понимаю, что в строгих условиях предпочтительны компиляторы C - такие условия, как низкоуровневые драйверы, небольшие встроенные системы и т.д.
И назовите меня старомодным, но я думаю, что C - лучший язык для обучения начинающим программистам - PHP, С++, Java... все они C-like в синтаксисе - я начал учиться C 10 лет назад и сейчас уверенно решать любой язык программирования. И тут возникает проблема со всеми этими выпускниками, не понимающими управление памятью...: (
Ответ 9
До сих пор было много хороших ответов. Другая причина заключается в том, что это наименьший общий знаменатель; многие языки высокого уровня имеют время выполнения, реализованное в C, и поддерживают написание расширений в C. Таким образом, если вы пишете библиотеку на C, ее можно сделать доступной на самых разных языках. Это не тот случай, если вы используете, скажем, Java или Python для реализации вашей библиотеки. Инструментарий GTK + GUI и связанные с ним библиотеки написаны на C с этой целью. Они предназначены для обертывания и для большого количества языков.
Итак, в целом, C хорош не только для низкоуровневого кода, который все еще переносится на разных платформах, но и для кода, который переносится между языковыми средами высокого уровня.
Ответ 10
Я знаю, что драйверы низкого уровня, как правило, записываются на C из-за простых предварительных и пост-условий для любой данной инструкции. У меня есть друг, который пишет низкоуровневые драйверы устройств для компании флэш-памяти, и весь код, который он пишет, находится на C.
Ответ 11
Приложение, над которым я работаю (поле, управляющее системами IP-камер), началось с C, потому что мы изначально разрабатывали его для очень маленькой встроенной системы, а С++ не работал в среде uclibc.
С течением времени мы переключились на regulac libc, но ядро приложения осталось на C. Есть некоторые части, в которых мы могли бы воспользоваться объектно-ориентированным дизайном и исключениями, но я думаю, что langauge все еще хорошо работает для нас.
Ответ 12
Игры, особенно консольные игры и серверы для MMO.
Ответ 13
Системы управления распределенными версиями (DVCSes), такие как Git.
Ответ 14
Роботы  .;
Ответ 15
Установленные, цифровые телевизоры и встроенные системы по-прежнему используют "C" для разработки приложений.
Ответ 16
Большинство встроенных систем, приложений HPC (много Fortran здесь), операционных систем, много приложений Unix (Apache и Sendmail приходит в голову)
Компиляторы/интерпретаторы для большинства других языков также могут содержать C в различной степени!
Ответ 17
Как заметил кто-то, C используется там, где вы программируете рядом с оборудованием. Это одна из основных причин, по которой C используется во многих приложениях для робототехники. Существует множество кросс-компиляторов, которые позволяют вам вводить код на C, а затем переносить код на микропроцессор, microcontroller, встроенное устройство и даже процессоры DSP. Существуют даже специальные языки, основанные на C, такие как nesC, которые используются специально для программирования беспроводных датчиков ближнего действия.
Даже для тяжелой промышленной робототехники вы обнаружите, что программирование контроллера низкого уровня выполняется на C, а затем инженеры, поместите Java или С# GUI, который взаимодействует с обширными библиотеками C.
Ответ 18
Один предмет, который еще не упоминался, - скорость. Хотя многие компиляторы языков более высокого уровня выполняют хорошую работу, если у вас есть приложение, которое должно выполняться очень быстро или небольшой внутренний цикл кода, который многократно вызывается в критичной для производительности среде, хорошо написанный код C может часто выполняйте работу лучше, чем большинство других параметров, за исключением машинного кода.
Ответ 19
C/С++ также используются для скорости, поэтому такие вещи, как видеоигры, все еще написаны на C/С++. Торговые приложения реального времени, вероятно, также написаны на C.