Swimergg
@Swimergg
Пишу код, и узнаю много чего интересного

Возможно ли автоматически конвертировать большой проект с Java на C++?

У меня есть проект среднего размера, который по большей парсит строки (А если быть точным, то я сделал свой скрип-язык). Есть одно но. Скорость. Она очень маленькая. Обычная компиляция и запуск Java парсит маленький скрипт за 120 мс. Эта же программа и тот же скрипт но после компиляции через GraalVM native уже скорость 70, а с использованием PGO вообще 40. Но разве всё так плохо в Java? По этому хотелось бы перенести проект на C++ для дальнейшей разработки там. Разумеется я могу сам перенести, но это очень неприятно, учитывая что у меня +- 110 классов и в практически в каждом из них используется другой. Я видел несколько искусственных интеллектов, которые умеют переносить код, но один из них только на Linux, а второй только по одному файлу (Что банально может вызвать ошибки, когда декларируется метод и в качестве аргументов получает ссылку, а в другом файле передаётся значение). По этому было бы замечательно в автоматическом порядке перенести код. Я знаю, что в C++ нет например такого обширного функционала работы со строками, но для того я и предпочитаю искусственный интеллект, что бы он подставил требуемые методы решения такие ситуаций. Кстати говоря на счёт среды разработки приложения - я не использую ни одной сторонней библиотеки и рефлексии Java. В проекте я использовал Java 8. Может возникнуть логичный вопрос, а зачем переносить код на C++, если native image и так в 3 раза уменьшил скорость работы? Потому что можно ещё уменьшить, да и основная причина это то, что я изначально просто хотел поэкспериментировать с лексером и аст генератором, но получилось что то неплохое. По этому, пока не поздно я хочу перенести на C++, пока я не использовал ни одной функции Java, которая зависит от платформы

OgF1rIP.png
  • Вопрос задан
  • 333 просмотра
Решения вопроса 1
@rPman
Все верно тебе ответили - ручками.

Но, начать можно с кодогенерации с помощью j2c, особенно если у тебя полностью самописный код а не использование сторонних jni библиотек (с ними будет сложнее), это конвертер Java в C код с последующей ее компиляцией в нативный.

Результат будет хуже чем если все делать руками но возможно самую тупую но объемную работу можно будет взять от туда.

upd. я бы не сбрасывал со счетов ИИ, он дает неожиданные результаты, полностью работу пока еще на него я бы не перекладывал, но вот что то простое но объемное - почему нет.

Например у тебя много классов, большая часть методов - обслуживающая, обеспечивающая синтаксический сахар и мелкие удобства, создание каких-нибудь геттеров/сеттеров, где то обработка ошибок типовая, но без котрой никак а идентификаторы везде разные и т.п. Нейронка такие перенесет без особых проблем, только перепроверяй ее везде
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
В C++ и Java разная идиоматика, поэтому если перевести с одного языка на другой не изменяя ничего в программе, результат получится хуже. Если для конвертации использовать даже самый совершенный из существующих на сегодняшний день ИИ, получится вовсе запредельный хлам.
Ответ написан
@Drottarutarnum
Любопытный любитель
я переносил немалый проект с помощью GPT 4, но я не кормил ему бездумно, сначала опиши тесты для каждого класса (это надо делать даже если руками переносишь) а потом корми ему по методу и проверяй, GPT не сделает все за тебя, но существенно ускорит под твои контролем переписывание кода
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы