Возможно ли автоматически конвертировать большой проект с Java на C++?
У меня есть проект среднего размера, который по большей парсит строки (А если быть точным, то я сделал свой скрип-язык). Есть одно но. Скорость. Она очень маленькая. Обычная компиляция и запуск Java парсит маленький скрипт за 120 мс. Эта же программа и тот же скрипт но после компиляции через GraalVM native уже скорость 70, а с использованием PGO вообще 40. Но разве всё так плохо в Java? По этому хотелось бы перенести проект на C++ для дальнейшей разработки там. Разумеется я могу сам перенести, но это очень неприятно, учитывая что у меня +- 110 классов и в практически в каждом из них используется другой. Я видел несколько искусственных интеллектов, которые умеют переносить код, но один из них только на Linux, а второй только по одному файлу (Что банально может вызвать ошибки, когда декларируется метод и в качестве аргументов получает ссылку, а в другом файле передаётся значение). По этому было бы замечательно в автоматическом порядке перенести код. Я знаю, что в C++ нет например такого обширного функционала работы со строками, но для того я и предпочитаю искусственный интеллект, что бы он подставил требуемые методы решения такие ситуаций. Кстати говоря на счёт среды разработки приложения - я не использую ни одной сторонней библиотеки и рефлексии Java. В проекте я использовал Java 8. Может возникнуть логичный вопрос, а зачем переносить код на C++, если native image и так в 3 раза уменьшил скорость работы? Потому что можно ещё уменьшить, да и основная причина это то, что я изначально просто хотел поэкспериментировать с лексером и аст генератором, но получилось что то неплохое. По этому, пока не поздно я хочу перенести на C++, пока я не использовал ни одной функции Java, которая зависит от платформы
Дополнительно:
Если вопрос возможно ли - да, возможно. Я бы также на вашем месте опробовал подобные инструменты. https://www.codeconvert.ai/java-to-c++-converter
Ну и почему java 8?
Актуальная версия - 21, и за этот период (между 8 и 21) было выпущено множество оптимизаций работы со строками.
парсит маленький скрипт за 120 мс
Что-то не так в коде. Но не видя кода, никто не сможет ничего посоветовать.
Не исключено, что где то у меня лишний раз вызываются функции, это нужно всё дебажить
нужно профилировать код
И почему вы решили что просто переписывание на С++ даст прирост? Вы можете получить технические
долги. Утечки памяти и более серъезные беды чем есть сейчас.
Я-бы предложил не делать ничего. По крайней мере сейчас ситуация выглядит стабильной.
Зачем нужно играть в перфекционизм когда никто таймингов не заказывал?
Ответы:
В C++ и Java разная идиоматика, поэтому если перевести с одного языка на другой не изменяя ничего в программе, результат получится хуже. Если для конвертации использовать даже самый совершенный из существующих на сегодняшний день ИИ, получится вовсе запредельный хлам.
- То есть всё же лучше ручками?
- Александр Интересный, однозначно.
Все верно тебе ответили - ручками.
Но, начать можно с кодогенерации с помощью nuitka, особенно если у тебя полностью самописный код а не использование сторонних jni библиотек (с ними будет сложнее), это конвертер Java в C код с последующей ее компиляцией в нативный.
Результат будет хуже чем если все делать руками но возможно самую тупую но объемную работу можно будет взять от туда.
upd. я бы не сбрасывал со счетов ИИ, он дает неожиданные результаты, полностью работу пока еще на него я бы не перекладывал, но вот что то простое но объемное - почему нет.
Например у тебя много классов, большая часть методов - обслуживающая, обеспечивающая синтаксический сахар и мелкие удобства, создание каких-нибудь геттеров/сеттеров, где то обработка ошибок типовая, но без котрой никак а идентификаторы везде разные и т.п. Нейронка такие перенесет без особых проблем, только перепроверяй ее везде
я переносил немалый проект с помощью GPT 4, но я не кормил ему бездумно, сначала опиши тесты для каждого класса (это надо делать даже если руками переносишь) а потом корми ему по методу и проверяй, GPT не сделает все за тебя, но существенно ускорит под твои контролем переписывание кода
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Да, возможно автоматически конвертировать большой проект с Java на C++, однако это может быть сложной задачей, требующей специальных инструментов и навыков программирования. Существует несколько инструментов, которые могут помочь в этом процессе, но они не всегда работают идеально и могут требовать дополнительной настройки и корректировки кода после конвертации.
Один из таких инструментов - Java to C++ Converter, который позволяет автоматически преобразовать Java код в C++. Однако, как и любой автоматический инструмент, он не всегда может гарантировать идеальное преобразование и может потребовать дополнительных усилий для исправления ошибок и несоответствий.
При конвертации проекта с Java на C++ необходимо учитывать различия между этими двумя языками программирования, такие как система типов, управление памятью, структура классов и др. Это может потребовать дополнительной работы по адаптации и оптимизации кода после конвертации.
В целом, автоматическая конвертация большого проекта с Java на C++ возможна, но требует тщательного подхода, тестирования и корректировки кода. Лучше всего проводить этот процесс поэтапно, тщательно проверяя результаты и внося необходимые изменения для обеспечения правильной работы конвертированного проекта.