Какие виды приложений программируются в C в эти дни? [закрытый]

Решите его математически сначала, затем переведите в код. Помните, что самая короткая строка между точкой и краем круга также пройдет через свой центр (как указано @litb).

14
задан 4 revs, 4 users 100% 19 January 2013 в 19:55
поделиться

19 ответов

Одной из наиболее важных особенностей C является его переносимость. На x86 у вас есть практически все языки программирования, но на некоторых других архитектурах C часто является единственным выбором в дополнение к сборке. Другое значение переносимости, как кто-то заметил, состоит в том, что большинство других языков программирования имеют привязки C. Когда у вас есть библиотека C, вы можете относительно легко получить API Perl или Python со скоростью, сравнимой с собственной библиотекой C. Кроме того, компиляторы C обычно намного более надежны, чем компиляторы C ++, и более развиты. Кто-то сказал мне, что это одна из многих причин, почему ядро ​​Linux написано на C.

16
ответ дан 1 December 2019 в 05:55
поделиться
1
ответ дан 1 December 2019 в 05:55
поделиться

Приложение, над которым я работаю (блок, который управляет системами IP-камер), началось на C, потому что мы изначально разрабатывали его для очень маленькой встроенной системы, а C ++ не работал в Среда uclibc.

Со временем мы перешли на Regulac libc, но ядро ​​приложения осталось на C. Есть некоторые части, в которых мы выиграем от объектно-ориентированного дизайна и исключений, но я думаю, что язык по-прежнему хорошо работает для нас.

1
ответ дан 1 December 2019 в 05:55
поделиться

Встроенные устройства, торговые алгоритмы, алгоритмы обработки звука, драйверы, ядро ​​Linux и т. Д.

4
ответ дан 1 December 2019 в 05:55
поделиться

В моей текущей роли мы обычно пишем код C только при изменении устаревших систем ( VxWorks ядра) или иногда для простых инструментов или программ.

C также безумно портативный; (почти) каждая ОС и ядро ​​имеют компилятор C, поэтому для приложений, требующих такой поддержки, C является одним из лучших доступных вариантов.

C ++ считается в целом лучше C, хотя я понимаю, что при строгом соблюдении условий, компиляторы C предпочтительнее - условия, такие как драйверы низкого уровня, небольшие встроенные системы и т. д.

И называйте меня старомодным, но я думаю, что C - лучший язык для обучения начинающих программистов - PHP, C ++, Java ... все они похожи на C по синтаксису - я начал изучать C 10 лет назад и теперь чувствую себя уверенно, что могу взяться за любой язык программирования. А потом там '

2
ответ дан 1 December 2019 в 05:55
поделиться

Роботы.

1
ответ дан 1 December 2019 в 05:55
поделиться

Пока было получено много хороших ответов. Другая причина заключается в том, что это наименее общий знаменатель - многие языки высокого уровня имеют среду выполнения, реализованную на C, и поддерживают написание расширений на C. Таким образом, если вы пишете библиотеку на C, она может быть доступна на самых разных языках. . Это не тот случай, если вы используете, скажем, Java или Python для реализации своей библиотеки. Инструментарий GTK + GUI и связанные библиотеки написаны на C именно с этой целью.

2
ответ дан 1 December 2019 в 05:55
поделиться

В наши дни я в основном занимаюсь Linux, и удивительное количество кода Linux написано на C, а не на C ++ или чем-то еще.

Есть очень веские причины, по которым ядро ​​Linux, и в этом отношении другие ядра, такие как Darwin, различные дистрибутивы BSD и т. д., написаны на C. Вот некоторые из них:

  • C часто называют «переносимым языком ассемблера». Довольно легко мысленно «скомпилировать» простые операторы C для целевого процессора и представить, что произойдет, в терминах инструкций, регистров и так далее. И вы действительно хотите иметь возможность делать это при работе с ядром ОС.

  • Есть много библиотечных процедур, которые вы просто не можете использовать в ядре, например, malloc () или printf (), потому что они небезопасно в этом контексте. Вместо этого вы должны использовать специальные эквиваленты ядра. Проблема с C ++ заключается в том, что многие вещи, которые люди считают фундаментальными функциями языка, такими как оператор new, iostreams или автоматическое построение объекта в стеке, небезопасны в ядре в их конфигурациях по умолчанию. Возможно, вы сможете взломать что-нибудь, что будет работать, но гораздо проще придерживаться известного рабочего решения, которое заключается в использовании C.

  • Кодовая база уже написана на C, и это было бы огромным задание по преобразованию его в C ++.

  • Для данной архитектуры ЦП код, сгенерированный из C, довольно стандартизирован. Не так с C ++, особенно для таких вещей, как шаблоны и встроенные функции. Машинный язык C ++ довольно непредсказуем, и некоторые компиляторы C ++ создают действительно раздутый код. Это не то, что вам нужно от ядра, код которого должен быть предсказуемым, быстрым, и как можно меньше.

Многие другие функции "пользовательского пространства" в Linux также написаны на C. Некоторые из компонентов, над которыми я работаю, включают X Windows, GLib / GObject, GDK / GTK, Cairo, Pango и Clutter. Все это можно было бы написать или переписать на C ++, но, похоже, в мире Linux предпочтение отдается C.

5
ответ дан 1 December 2019 в 05:55
поделиться

Игры, особенно консольные игры и серверы для MMO.

1
ответ дан 1 December 2019 в 05:55
поделиться

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

5
ответ дан 1 December 2019 в 05:55
поделиться

Причины, по которым можно увидеть написанный новый код C, включают:

  1. Код, которому по-прежнему нужен доступ к «голому железу» (драйверам устройств и т. Д.).
  2. Процедуры библиотеки (вызываемые с других языков, пожалуйста), где производительность имеет решающее значение .
  3. Взаимодействие с существующей базой кода C.
  4. Среды (например, встроенные контроллеры), в которых жесткие ограничения ресурсов ограничивают решения.

Настоящий код приложения общего назначения (особенно там, где есть человек в цикле) ... не так много.

8
ответ дан 1 December 2019 в 05:55
поделиться

Я использую C для несистемного программирования. Моя работа связана с биоинформатикой . Причина, по которой я использую C, заключается в том, что существует множество очень хороших библиотек C, а подпрограммы очень загружают процессор.

C также легко связывается с другими языками. Таким образом, вы можете создать библиотеку на C и заставить ее работать с C ++, Python, Java, .NET, Ruby, PHP и т. Д. Это не так просто в обратном направлении.

11
ответ дан 1 December 2019 в 05:55
поделиться

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

1
ответ дан 1 December 2019 в 05:55
поделиться

C / C ++ также используется для повышения скорости, поэтому такие вещи, как видеоигры, по-прежнему пишутся на C / C ++. Торговые приложения в реальном времени, вероятно, также написаны на C.

0
ответ дан 1 December 2019 в 05:55
поделиться

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

1
ответ дан 1 December 2019 в 05:55
поделиться

Когда я читал первое, было не сразу очевидно, что SomeProperty было логическим свойством, и что Bar () не возвращал логическое значение, пока вы не прочитаете часть else оператора.

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

Поскольку первый оператор требует от меня ссылки на часть else в операторе, чтобы интерполировать, что и SomeProperty, и Bar () являются логическими по своей природе, я бы использовал вторую.

Во втором случае в одной строке кода сразу же очевидны все следующие факты:

  • SomeProperty является логическим.
  • Foo () и Bar () возвращают значения, которые можно интерпретировать как логические.
1
ответ дан 1 December 2019 в 05:55
поделиться

Большинство встроенных систем, приложения HPC (здесь также много Fortran ), операционные системы, множество приложений Unix ( Apache и Sendmail )

Компиляторы / интерпретаторы для большинства других языков также могут содержать C в разной степени!

1
ответ дан 1 December 2019 в 05:55
поделиться

Как кто-то заметил, C используется там, где вы программируете близко к оборудованию. Это одна из основных причин, по которой C используется во многих приложениях робототехники. Существует множество кросс-компиляторов, которые позволяют кодировать на C, а затем переносить код на микропроцессор, микроконтроллер , встроенное устройство и даже процессоры DSP . Существуют даже специальные языки, основанные на C, например nesC , которые используются специально для программирования беспроводных датчиков малого радиуса действия.

Даже для тяжелой промышленной робототехники вы обнаружите, что программирование контроллеров низкого уровня выполняется на C и затем инженеры поместили графический интерфейс Java или C #, который взаимодействует с обширными библиотеками C.

1
ответ дан 1 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: