Какие быстрые низкоуровневые языки вы можете порекомендовать?


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

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

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

12 4

12 ответов:

Как насчет языка ассемблера или языка программирования D ?

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

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

Вы получаете "приличный" доступ к ресурсам платформы (условия варьируются), это может быть так быстро, как вы решите отточить его, и это немного легче (IMHO) написать, чем ASM. Там же есть и довольно приличный набор инструментов поддержки и инструментов анализа кода, чтобы сделать вещи немного проще.

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

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

Вперед!

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

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

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

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

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

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

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

Вещи, которые взорвут ваш разум

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

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

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

Сборка будет самой близкой к аппаратной и, следовательно, самой быстрой

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

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

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

Вы не можете приблизиться к языку ассемблера, если только не получите работу у производителя микросхем и не начнете писать микро-код!!!

Если вы находитесь на Windows, я думаю, что вы можете получить доступ к Microsoft MASM (Macro assembler), который позволит вам быстро встать и работать. Я использовал его давным-давно, и это неплохой продукт.

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

  • Пирекс
  • вала

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