Какие быстрые языки низкого уровня вы можете порекомендовать? - PullRequest
4 голосов
/ 17 марта 2009

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

  • должно быть близко к аппаратному обеспечению (битовая навигация, указатели или другой альтернативный безопасный метод, например ссылки)
  • нет управляемого кода (нет языков jvm / .net)
  • должно быть очень быстро (как C)
  • должно быть выше уровня ASM (и да, мне интересны макроязыки поверх ASM)
  • может быть неясным, не очень распространенным

Меня в основном интересуют малоизвестные языки.

Ответы [ 12 ]

12 голосов
/ 17 марта 2009
9 голосов
/ 17 марта 2009

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

6 голосов
/ 17 марта 2009

Ну, я всегда предпочитал C и / или C ++, потому что существует несколько разновидностей (MSVC, glibc и т. Д.), Он работает на разных платформах (например, мобильные устройства, Windows, Linux) и устройства, и его можно записать кроссплатформенность (разные процессорные архитектуры) и даже для высококачественной графики (например, DirectX).

Вы получаете «приличный» доступ к ресурсам платформы (условия могут отличаться), это может быть так быстро, как вы решите отточить его, и это немного легче (ИМХО) писать, чем ASM. Есть также довольно приличный набор вспомогательных инструментов и инструментов анализа кода, чтобы немного упростить задачу.

Кроме того, C и C ++ существуют уже довольно давно, поэтому у него (даже сегодня) прекрасное и восторженное сообщество!

6 голосов
/ 17 марта 2009

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

3 голосов
/ 17 марта 2009

Forth!

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

2 голосов
/ 10 июля 2010

Вариации на тему

FORTRAN старше, чем C, и до сих пор является одним из основных игроков в численных вычислениях. До 1990 года (когда язык был существенно модернизирован), язык не имел никакой формы указателя (проверено или нет). Этот недостаток означал, что не было никакого способа управлять памятью динамически; это также облегчило компилятору анализ псевдонимов , что делает код Fortran быстрым.

АЛГОЛЬ был первым языком структурированного программирования. Хотя он имел ограниченный успех с программистами, он оказал сильное влияние на разработчиков языков.

Ada - это императивный язык с сильной системой типов и хорошей модульностью, что делает его пригодным для низкоуровневого программирования с жесткими требованиями доверия (его спонсировал правительство США). с учетом военных и авиационных приложений). Он был вдохновлен Pascal , как Modula-2 и Modula-3 .

Если пойти дальше от основного направления низкоуровневого императивного программирования, то будет FORTH . FORTH может быть скомпилирован и даже интерпретирован на устройствах с очень небольшим объемом памяти; он находит широкое применение в недорогих встроенных системах, включая микроконтроллеры. Язык основан на обратной польской записи, известной калькуляторам HP (на самом деле, язык калькуляторов HP сильно зависит от FORTH). Многие реализации не имеют переменных: все данные хранятся в одном или нескольких стеках.

Ради интереса я упомяну INTERCAL , дедушку эзотерических языков.

Материал, который поразит вас

Эзотерические языки могут быть поучительными, и довольно много работы рядом с машиной (обычно это виртуальная машина, но в принципе вы можете реализовать их для реального компьютера, если вы достаточно сумасшедший). Вы можете посмотреть на brainfuck (своего рода промежуточный этап между машинами Тьюринга и C) или на множество языков с одной инструкцией, или befunge (что, если память была два -мерный массив?).

Cyclone очень похож на C. Синтаксис тот же, и у Cyclone есть указатели, нетегированные структуры и объединения, операторы goto и ручное управление памятью. И все же это безопасный язык: вы не можете иметь висячий указатель или переполнение буфера. И у вас есть доступ к высокоуровневым функциям, таким как сопоставление с образцом, исключения, полиморфизм, абстрактные типы и необязательное автоматическое управление памятью (не только сборка мусора, но и области). Циклон полезен и поучителен; для С - это хороший способ узнать, что делает безопасный язык. Cyclone может компилироваться в C, поэтому вы можете запускать свои программы везде, где у вас есть компилятор C.

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

1 голос
/ 17 марта 2009

Вы можете начать программирование FPGA в VHDL, Verilog, System C ...

1 голос
/ 17 марта 2009

OpenCL может быть интересным. Это что-то вроде языка шейдеров OpenGL (подмножество C с расширениями), но для вычислений общего назначения с параллельными массивами.

1 голос
/ 17 марта 2009

Ada был изначально разработан для встроенных систем (среди прочего).

1 голос
/ 17 марта 2009

сборка будет ближайшей к оборудованию и, следовательно, самой быстрой

...