Comments 13
там все описано. Впрочем все тоже самое относится и к яве.
Вроде и есть куча JVM, но писать на чем либо кроме Oracle значит стрелять себе в ногу
При этом язык Java сильнее завязан на open source (по сравнению, например, с C#...
Большинство проектов .NET Foundation распространяются по лицензией MIT/X11/BSD, вообще эти лицензии очень распространены в .NET мире.
хотелось прочитать хотя бы про общую схему как вы туда java прикрутили
Общая схема стара как мир — часть Rust-интерфейсов вынесена в C-API, которое цепляет Java через JNI. Для этого есть замечательная библиотека jni-rs (кстати сказать, недавно она перешла под крыло разработчиков Exonum Java Binding). Все, что нужно Java-сервису (мы так называем смарт-контракты) со стороны блокчейн-библиотеки — линкуется в виде динамической Rust-библиотеки.
Для запуска всего этого есть отдельное небольшое приложение EJB App — оно стартует JVM, линкуется со всеми необходимыми библиотеками и заодно настраивает ноду Exonum.
Общая схема получается такая (не умею рисовать, не бейте камнями):
К сожалению, полноразмерных бенчмарков пока что не проводилось (но они без сомнения будут). Пока что можно сказать что да, теряем производительность, возможно очень серьезно. Впрочем, еще есть много простора для различных оптимизаций, и даже при некоторых потерях производительности Exonum все равно остается одним из самых производительных на рынке.
Какие критерии рассматривали, когда выбирали язык для написания? Вы указали "безопасность работы с памятью, скорость, гонки", но наверное есть еще? Наличие разработчиков? Предыдущие наработки? Жесткое/мягкое время?
Рассматривалась ли, например, Scala? Язык во многом похож на Rust:
- компилируемый (в байт-код JVM)
- такая же типобезопасность,
- статическая типизация с генериками
- безопасная работа с памятью
- аналогичные
Option
,Result
,match
.
Плюс функциональный язык, что так же помогает писать надежный код в ситуациях гонок.
При этом Scala хорошо принимается в финансовом мире, ее активно используют в банках. JVM — стандарт де-факто.
Вот пишут, что Waves сделали блокчейн на Scala всего в ~20К строк (в коде bitcoin примерно 100К строк).
Если не секрет, сколько у вас получилось строк?
Почему первым языком был выбран Java, а не Scala — число разработчиков, широко используемая экосистема, большое количество legacy проектов на Java. Потенциально Scala тоже хороший вариант.
Про количество строк не секрет. В ядре Exonum сейчас около 80К сейчас, включая тесты, дело, тесткит и стандартные сервисы. А в Java Binding 9K — это Java код и XML.
Первый байндинг для Exonum: почему мы выбрали Java