Я подумываю написать новый программный продукт. Производительность будет иметь решающее значение, поэтому я опасаюсь использовать интерпретированный или язык или тот, который использует слой эмуляции (читай java).
Что заставляет меня задуматься об использовании C (или C ++), однако оба они довольно длинные в зубе. Я не использовал ни один в течение длительного времени. Я полагал, что за последние 20 лет кто-то, вероятно, создал что-то достаточно популярное, приятное для написания и компиляции.
Какие есть более современные альтернативы C для написания высокопроизводительного скомпилированного кода?
Если бы C ++ был другим зверем, чем это было 15 лет назад, я бы подумал об этом, думаю, у меня было предположение, что у него есть некоторые присущие ему проблемы.
Параллелизация будет важна, но, вероятно, не на нескольких машинах.
источник
Ответы:
В разработке находится язык под названием The Rust Programming Language, который преследует те же цели, что и C ++, в частности абстракции с нулевой стоимостью и прекрасный контроль над управлением памятью. Тем не менее, это, пожалуй, самый заметный предстоящий кандидат, несмотря на то, что он еще очень молод.
Кроме Rust действительно нет других популярных альтернатив, которые компилируются в нативный код. Конечно, есть и Delphi, и D, но они не такие быстрые, популярные или используемые. Язык Google Go мог бы быть кандидатом, но он все еще очень молод и нацелен на немного другой домен.
Тем не менее, обратите внимание, что C # (с учетом платформы Microsoft) и Java могут быть не такими уж медленными, даже если они работают поверх виртуальной машины; Своевременная компиляция кода может сделать некоторые оптимизации, которые традиционные опережающие компиляторы не способны применить из-за недостатка информации о состоянии программы и среде.
Честно говоря, я бы лично не рассматривал C в качестве кандидата, если C ++ является опцией, в основном из-за того, что современный C ++ более безопасен, работает на более высоком уровне абстракции, более выразителен и практически не теряет производительность по сравнению с C (в некоторых случаях C ++ заметно быстрее). Проще говоря, C ++ предоставляет все, что предоставляет C и многое другое. Большая часть функциональности C считается «устаревшей», и стандартная библиотека C ++ предоставляет более качественные, безопасные, быстрые и интуитивно понятные альтернативы.
источник
Существует также Ada , которая компилируется в нативный код и переносится на различные платформы в пределах своей стандартной библиотеки. Язык жив и здоров, с последним обновлением стандарта языка (Ada 2012).
Краткое резюме для тех, кто не знаком с Ада:
источник
15 лет назад не было стандарта C ++. Второй был опубликован в прошлом году. Лучшие практики C ++ сильно изменились за 5 лет после публикации стандарта 98, и они снова меняются с публикацией стандарта 11.
источник
Почему люди всегда настаивают на поиске новых языков?
C ++:
Единственным недостатком C ++ является то, что вам нужно немного учиться. Вот и все.
Сравните это с другими языками, которые являются одним или несколькими из:
ИМХО, чем меньше языков мы будем использовать и поддерживать, тем лучше будет ситуация.
Это приводит к автоматическим улучшениям в структурах языка, поддержки, документации, работе комитетов по стандартизации, улучшенным книгам, большему количеству знаний, упрощению поддержки программного обеспечения, улучшенным шаблонам, более длительным циклам поддержки языка и более квалифицированному коду, написанному на языке.
Я знаю, что люди будут принижать это, но подумайте об этом, правда.
источник
const
проблемами корректности и тому подобным. Любой, кто читал Effective C ++ (как утверждает Кодер) и считает, что C ++ легко, имеет психическое отключение.C / C ++ довольно длинный в зубе .... это хорошо . Это подразумевает, что они были разработаны достаточно хорошо (хм), что они все еще очень удобны в использовании, что многие люди используют их для повседневных задач, и что вы найдете большое количество разработчиков, которые являются экспертами в них. Зрелость - это то, что нужно ценить.
Если вы проводите все свое время в поисках чего-то нового, просто потому, что оно новое, и поэтому думаете, что оно должно быть как-то лучше, вас ждет большое разочарование. Это относится к языкам программного обеспечения, системам графического интерфейса (обратите внимание, Microsoft и Gnome) и любителям (обратите внимание, юные леди :))
По общему признанию, если ваш опыт работы с C ++ составляет 20 лет, когда код C ++ обычно кодировался как C, то, возможно, пришло время переоценить язык, все функции, которые были там в тот день, которые никогда не использовались полностью, используются сегодня гораздо больше, и несколько усилий по стандартизации немного расширили язык, чтобы он выглядел очень отличающимся от тех старых разработок в стиле C. Не то, чтобы C тоже плох - это идеальный язык для многих типов задач кодирования!
источник
Текущий стандарт C ++ - C ++ 11 , который был опубликован в 2011 году. Так что это не 20-летний стандарт. И между ними было множество стандартов. Каждый из них представляет многочисленные улучшения производительности.
Компиляторы также постоянно совершенствуются. Они гораздо лучше оптимизируют, чем раньше.
Также улучшились исполняемые форматы, 20 лет назад у вас был a.out , теперь у вас есть ELF .
В целом, предположение, что C ++ не изменился за 20 лет, не может быть дальше от истины.
Также имейте в виду, что C и C ++ - это очень разные языки.
источник
Я не большой знаток этого языка, но я думаю, что OCaml может быть интересным вариантом.
OCaml - это скомпилированный, функциональный / объектно-ориентированный язык. Сравнение производительности с C ++ см. В C ++ против OCaml: Сравнение трассировщиков лучей . Конечно, это очень конкретный пример, и для лучшего понимания производительности OCaml необходимо провести более обширное тестирование.
источник
Зависит от того, что собирается делать ваш продукт. Если производительность действительно критична, то выбранным языком остается FORTRAN . Я также не исключаю, что Java - она используется во многих крупных торговых приложениях. Erlang стоит посмотреть, если ваш проблемный домен требует высокого параллелизма. Objective-C хорош, хотя я не знаю, насколько хорошо он поддерживается вне экосистемы Apple (кроме компиляторов и базового времени выполнения). Я также слышал хорошие отзывы о производительности Haskell, но я не уверен, является ли это абсолютной производительностью или просто производительностью по сравнению с другими функциональными языками.
источник
Когда вы говорите, что ваш проект чувствителен к производительности, вы имеете в виду каждую строчку кода? Или, как обычно, есть меньший процент, который критикует производительность, а остальная часть - ваш обычный прогон обычного бизнес-кода?
После того, как вы ответите, что является большим риском для вашего проекта: конечный результат слишком медленный или вы никогда его не закончите?
Предполагая, что вы ответите на второй вопрос для обоих, вы должны разработать язык более высокого уровня, который поддерживает нативное взаимодействие (Python, Ruby, .Net Family имеют все это). Сначала закончите проект. Затем профиль, оптимизировать, промыть, повторить. Только после этого рассмотрите возможность изменения сегмента выбора приложения в нативном коде и интеграции этого нативного кода с готовым продуктом.
источник
Vala похож на Java и C #, компилируется в нативный код (или исходный код C, если вы предпочитаете) и работает очень быстро . Он требует GLib для своих объектно-ориентированных битов, и он написан хакерами Linux для хакеров Linux, поэтому, если ваш домен Windows, это может быть не очень хорошо.
источник
Objective-C - это современная, скомпилированная альтернатива прямым C и C ++. Он имеет как сборщик мусора, так и детерминированное управление памятью, а среда выполнения передачи сообщений оптимизирована для повышения производительности.
Он доступен через GCC и CLang, и есть библиотеки приложений, такие как GNUStep и Cocotron, которые работают на различных платформах.
Если вы выполняете высокопроизводительную работу, я собираюсь предположить, что это что-то вроде обработки чисел или другой работы «разделяй и властвуй» вместо пользовательского интерфейса, так что это означает, что вы можете выполнять пользовательский интерфейс на любом языке, который вам проще всего, например, HTML через мини-http-сервер.
источник
Я никогда не использовал его, но один из моих знакомых с Cython, который позволяет вам использовать примитивы стиля C в критически важных для вашего кода частях кода, сохраняя при этом общий синтаксис python и имея возможность в полной мере использовать конструкции высокого уровня python для сокращения времени разработки время везде
источник