Как Java для Scala, C ++ для ...? - PullRequest
       22

Как Java для Scala, C ++ для ...?

22 голосов
/ 29 декабря 2010

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

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

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

Обновление:

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

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

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

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

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

Ответы [ 12 ]

19 голосов
/ 29 декабря 2010

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

11 голосов
/ 29 декабря 2010

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

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

6 голосов
/ 29 декабря 2010

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

5 голосов
/ 29 декабря 2010

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

4 голосов
/ 29 декабря 2010

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

4 голосов
/ 29 декабря 2010

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

3 голосов
/ 20 июня 2014

Rust выглядит все лучше и лучше.

1 голос
/ 28 июня 2014

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

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

main: main.cpp
    $(CXX) -o $@ $(CPPFLAGS) $(CXXFLAGS) $< $(LDFLAGS)
1 голос
/ 31 декабря 2010

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

1 голос
/ 29 декабря 2010

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

См. здесь .

...