Я не программист, а учёный, использую R для разработки новых алгоритмов и проведения вычислительных экспериментов. В плане скорости воплощения идей в готовые инструменты, подготовки какой-то нестандартной научной графики R просто превосходен и не перестаёт радовать. Но в некоторых случаях, особенно при достаточно массивных вычислениях, скорость исполнения кода удручает. Всё уже распараллелено, используются самые быстрые конструкции, но похоже это предел. Циклы использовать нельзя, всё приходится превращать в ломающие мозг и крайне неудобные для отладки future_apply и аналоги, но и их скорости уже не хватает. Куда стоит двигаться? Как обычно, хочется минимальными усилиями получить максимальный результат. Пока вижу варианты:
- Rcpp – насколько понимаю, это самый популярный путь, когда не хватает скорости. В плане технологии вопросов нет, вроде бы есть пошаговые инструкции и всё должно работать. Но не очень привлекает, что придётся изучать второй язык и потом поддерживать код сразу на двух языках. Я и так не очень-то программист, основные рабочие задачи никто не отменял, так что времени плотно заниматься этим скорее всего не будет. Насколько я понимаю, С++ достаточно сложен в плане получения оптимального кода, так что для того, чтобы действительно добиться ускорения критических мест может потребоваться значительное время.
- Вставка функций на Fortran. Не самое популярное решение, но вроде бы тоже есть какие-то инструкции, как запустить. Так же, как и с С++, в наличии все проблемы изучения второго языка и сопровождения двуязычного кода. Привлекает, что если немного разобраться с основами, то скорее всего достаточно быстро удастся получить приемлемый по производительности код, не вникая особо в какие-то программистские нюансы. Собственно, это было и остаётся основной особенностью языка, из-за которой его используют в научных расчётах. Не привлекает, что если возникнут проблемы, мало у кого можно спросить совета, сообщества уже особенно-то и нет. Ну и вообще, изучение фортрана сегодня сложно воспринимать как инвестицию в будущее.
- Julia. Красивый современный язык, гораздо более привлекательный в плане изучения, чем Fortran. К самому языку никаких вопросов нет, но в плане экосистемы пока что откровенно сыроват. Советы из сети и код из книжек зачастую уже не работают, опытных «гуру», у которых можно узнать правильные ответы, пока ещё очень мало. Пробовал вызывать Julia из R и через XRJulia, и чрез JuliaCall, но так и не смог заставить это работать. Возможно через какое-то время появятся новые рабочие способы как их связать, но пока что такая связка выглядит не очень надёжной. А переходить полностью на Julia – значит выбрасывать весь свой опыт, который есть с R. Можно вызывать R из Julia, это работает, но это уже самый крайний случай. Ну и по скорости – чтобы получить на Julia код, как-то сопоставимый по скорости с С++ или Fortran, нужно очень постараться. Получается далеко не у всех. Как рубашка на вырост Julia возможно и неплохой вариант, но если хочется скорости здесь и сейчас, то не уверен, что это лучшее, что можно придумать.
Какие есть идеи?