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
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
@rPman
Все верно тебе ответили - ручками.

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект