example classes java c++ c scala numerical-methods

classes - Como Java es para Scala, C++ es para...?



wrapper classes java (12)

Aunque C ++ 0x es una mejora bastante grande para C ++ (inferencia de tipo, funciones anónimas, etc.), debo decir que Scala parece aún mejor. El problema es que Scala solo se ejecuta en la JVM, aunque parece que también se puede ejecutar sobre C #.

Idealmente, me gustaría un lenguaje tan bueno como Scala, pero ejecutando "encima de" C ++ - usando las bibliotecas estándar, vinculando fácilmente los archivos de objetos C / C ++, todo el asunto. Hago mucha programación numérica construida con la parte superior de bibliotecas C / C ++ bien establecidas (rápidas y confiables), y eso no es algo de lo que pueda alejarme.

¿Alguien es consciente de tal lenguaje?

Actualizar:

Las características que estoy buscando son:

  • Integración perfecta con las bibliotecas C / C ++, al igual que Scala puede acceder a las bibliotecas Java sin la necesidad de generar / mantener enlaces.

  • Un sistema de tipos sólido, con un sistema de inferencia de tipos bien diseñado que me impide tener que escribir anotaciones de tipo detalladas y redundantes

  • Funciones funcionales y OO integradas en el lenguaje, con el soporte de sus propias bibliotecas en lugar de depender únicamente de las bibliotecas estándar de C / C ++.

Parece que gran parte del trabajo de Clang / LLVM que se está realizando en este momento puede facilitar el trabajo en este sentido, pero sería bueno encontrar que algo como esto ya se está trabajando.


¿Qué hay de Scala + JNA? Básicamente, JNA es una biblioteca que le permite declarar interfaces (o rasgos en Scala) que coinciden con las DLL.


¿Qué le parece el propio Scala, con acceso a sus bibliotecas de C ++ a través de los enlaces de Java generados por SWIG ?


¿Qué pasa con Python con enlaces de C ++?

Ver here


Bueno, Scala es un lenguaje de programación orientado a objetos y funcional. Si está buscando un lenguaje de programación moderno, orientado a objetos y funcional, que también pueda llamar código C a través de una interfaz de función externa, es posible que esté interesado en OCaml .


Es difícil escribir un lenguaje que sea compatible con C ++, porque hay muchas características, y el ABI generalmente se considera específico para una versión particular del compilador de C ++. Si realmente está buscando una fácil integración con C ++, me atrevería a decir que lo mejor es usar Scala con GCJ. Puede usar la GCI CNI para integrarse con sus objetos C ++ (aunque sugerir que la GCJ CNI tiene motivos para un voto negativo por aquí).


Es posible que desee pensar en Haskell. Tiene tanta amabilidad como cualquier otro lenguaje (a su manera, por supuesto), pero es ardiente en su adhesión a la programación funcional, por lo que la barrera para el aprendizaje es considerable. Aún así, se puede usar para llamar a C / C ++, y es sorprendentemente de alto rendimiento por sí solo.

También debe decidir si necesita que el lenguaje en sí sea capaz de computación de alto rendimiento. Si no es así, es bastante fácil crear enlaces de Python a C / C ++, y Python tiene algunas características interesantes. O puede usar algo como Matlab, que está diseñado para la computación numérica como estoy seguro de que usted sabe, y puede integrarse bastante bien con el código C a través de archivos mex. Si necesita que el lenguaje sea uno en el que actualmente pueda escribir código de alto rendimiento, podría incluso considerar la tarea no trivial de crear enlaces C ++ para Scala (no es tan malo si usa JNI o ​​JNA para Java, y luego llame a ese Java desde Scala), y luego solo use eso para el trabajo numérico más importante, mientras que Scala maneja las partes menos críticas en el tiempo (pero aún así algo importantes).


Estoy buscando lo mismo. Lua y D son dos opciones. lua tiene un intérprete de línea de comandos, luajit es rápido y para matemáticas uso gsl shell. D es más sofisticado pero aún así fácil de usar. D también es tan rápido como C ++.


Han pasado algunos años desde que se publicó esta pregunta, pero C ++ 14 es probablemente la respuesta correcta ahora. C ++ 11/14 agrega inferencia de tipo, funciones lambda y otras características similares a las que Scala agregó sobre Java. Otros contendientes realistas para un reemplazo de C ++ 98/03 son Go y Rust.

# Makefile CXX = clang++ CXXFLAGS = -std=c++1y -stdlib=libc++ LDFLAGS = -lc++ main: main.cpp $(CXX) -o $@ $(CPPFLAGS) $(CXXFLAGS) $< $(LDFLAGS)



Me sorprende que nadie mencione a D Está cerca de la sintaxis de C ++, pero es mucho más "limpia", puede usar las librerías C y C ++ sin problemas y agrega muchas características avanzadas. Claro, el paso no es tan grande como de Java a Scala, pero creo que dada la complejidad de C ++, es mucho más difícil encontrar un diseño realmente innovador que no desperdicie la mayoría de las partes de C ++.


Rust se ve como un mejor y mejor candidato.