Я бы предложил Scala вместо C ++ по следующим причинам:
- Параллелизм - как вы говорите, в JVM есть отличная поддержка параллелизма, и Scala является хорошим языком для этого. Это не значит, что вы не можете писать параллельный код на C ++, но гораздо проще «из коробки» в Scala.
- Сборка мусора - многие алгоритмы графов значительно выигрывают от сборки мусора по сравнению с другими методами управления памятью. Опять же, сборка мусора в JVM превосходна (лучше, чем что-нибудь в мире C ++), и она значительно упростит написание ваших алгоритмов.
- Качество JIT-компилятора - Я сомневаюсь, что для прохождения графов объектов в динамической памяти будет существенная разница в производительности между хорошим кодом C ++ и кодом, создаваемым JVM JIT. JVM довольно сильно оптимизирована для такого использования.
Конечно, возможно написать чрезвычайно производительный код на C ++. В некоторых ситуациях вручную настроенный код C / C ++ может превзойти JIT (например, избегая необходимости проверок границ массива или проверок нулевого указателя, когда вы можете доказать, что они не нужны). Или вы можете написать свой собственный распределитель памяти, который специализирован для обработки графов и который теоретически может превзойти сборщик мусора общего назначения в JVM (хотя вам лучше быть настоящим гением, если вы хотите попробовать это ....)
В целом, будет гораздо сложнее написать все на C ++, и предельное улучшение производительности, которого вы теоретически сможете достичь, почти наверняка не стоит этих усилий.