Подтвердить что ты не робот

Поскольку Java имеет значение Scala, С++ - это...?

Хотя С++ 0x является довольно улучшением для С++ (вывод типа, анонимные функции и т.д.), я должен сказать, что Scala кажется еще лучше. Дело в том, что Scala работает только на JVM, хотя кажется, что он также может работать поверх С#.

В идеале, я бы хотел, чтобы язык был таким же приятным, как Scala, но выполнялся над "С++", используя стандартные библиотеки, легко связывая с объектными файлами C/С++ всю сделку. Я делаю много числового программирования, построенного из хорошо установленных библиотек C/С++ (быстро и надежно), и это не то, от чего я могу уйти.

Кто-нибудь знает о таком языке?

Update:

Я ищу следующие функции:

  • Бесшовная интеграция с библиотеками C/С++, так же как Scala может обращаться к библиотекам Java без необходимости создания/поддержки привязок

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

  • Функциональные и OO-функции, встроенные в язык, с поддержкой собственных библиотек, вместо того, чтобы полагаться только на стандартные библиотеки C/С++.

Кажется, что большая часть работы clang/LLVM, выполняемая прямо сейчас, может облегчить работу в этих строках, но было бы неплохо найти, что что-то вроде этого уже обрабатывается.

4b9b3361

Ответ 1

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

Ответ 2

Возможно, вы захотите подумать о Haskell. Он имеет такую ​​же привлекательность, как и любой язык (по-своему, конечно), но он пламен в своей приверженности функциональному программированию, поэтому барьер для обучения является существенным. Тем не менее, его можно использовать для вызова C/С++, и он неожиданно высокопроизводителен сам по себе.

Вы также должны решить, нужен ли вам сам язык для обеспечения высокопроизводительных вычислений. Если нет, довольно легко создать привязки Python к C/С++, и у Python есть немало приятных функций. Или вы можете использовать что-то вроде Matlab, которое предназначено для числовых вычислений, поскольку я уверен, что вы хорошо знаете, и можете очень хорошо интегрироваться с C-кодом через файлы mex. Если вам нужен язык, на котором вы в настоящее время можете написать высокопроизводительный код, вы можете даже рассмотреть вопрос о принятии нетривиальной задачи создания привязок С++ для Scala (это не так уж плохо, если вы используете JNI или JNA для Java, а затем вызовите эту Java из Scala), а затем используйте ее только для наиболее важной работы с числовыми параметрами, тогда как Scala обрабатывает менее важные по времени (но еще несколько важные) части.

Ответ 3

Не сложно написать язык, совместимый с С++, потому что существует так много функций, и ABI обычно считается специфичным для конкретной версии компилятора С++. Если вы действительно ищете легкую интеграцию с С++, я бы рискнул, что лучше всего использовать Scala с GCJ. Вы можете использовать GCJ CNI для интеграции с вашими объектами С++ (хотя предложение GCJ CNI является основанием для нисходящего потока здесь).

Ответ 4

Как насчет Scala, с доступом к вашим библиотекам на С++ через SWIG -генерированные привязки Java?

Ответ 5

Ну, Scala - объектно-ориентированный и функциональный язык программирования. Если вы ищете современный объектно-ориентированный и функциональный язык программирования, который также может вызывать код C через интерфейс внешней функции, тогда вас может заинтересовать OCaml.

Ответ 6

Я удивлен, что никто не упомянул D. Он близок к синтаксису С++, но очень "чище", может без проблем использовать C и С++ libs и добавляет множество дополнительных функций. Конечно, этот шаг не такой большой, как от Java до Scala, но я думаю, что, учитывая сложность С++, гораздо сложнее придумать действительно инновационный дизайн, который не бросает большинство частей С++.

Ответ 7

Rust выглядит как лучший и лучший кандидат.

Ответ 8

Как насчет Python с привязками С++?

Смотрите здесь.

Ответ 9

Как насчет Scala + JNA? В принципе, JNA - это библиотека, которая позволяет объявлять интерфейсы (или черты в Scala), соответствующие DLL.

Ответ 10

Прошло несколько лет с момента публикации этого вопроса, но С++ 14, вероятно, теперь правильный ответ. С++ 11/14 добавить вывод типа, лямбда-функции и другие другие функции, схожие с этими Scala, добавленными над Java. Другими реалистичными соперниками для замены С++ 98/03 являются Go и Rust.

# Makefile
CXX = clang++
CXXFLAGS = -std=c++1y -stdlib=libc++
LDFLAGS = -lc++

main: main.cpp
    $(CXX) -o [email protected] $(CPPFLAGS) $(CXXFLAGS) $< $(LDFLAGS)

Ответ 12

Я ищу то же самое. Lua и D - два варианта. У lua есть интерпретатор командной строки, luajit работает быстро, а для математики я использую оболочку gsl. D более сложный, но простой в использовании. D также работает с С++.