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

Ссылка скопирована
1 ответ

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

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

Дополнительно:

Если вопрос возможно ли - да, возможно. Я бы также на вашем месте опробовал подобные инструменты. https://www.codeconvert.ai/java-to-c++-converter

  • Dmitrii, проблема в том, что искусственный интеллект декларирует методы которые получают ссылки, но при вызове не всегда передаёт именно ссылки. Да и на этом сервисе ограничение в 4000 символов, если не ошибаюсь
  • Александр Интересный, в любом случае, вам все равно придется исправлять ошибки конвертации вручную. Ни один инструмент не даст 100% гарантии переноса кода с одного языка на другой.
  • Александр Ананьев, Да, но в любом случае там ограничение в количестве символов
  • Надеюсь, вы бенчмарки ваши на «прогретой» jvm запускали?
    Ну и почему java 8?
    Актуальная версия - 21, и за этот период (между 8 и 21) было выпущено множество оптимизаций работы со строками.
  • Dmitry Roo, Потому, что проект писал несколько лет назад
  • Александр Интересный, ну так переведите его на 21ю. Есть шанс, что получите прирост производительности почти бесплатно.
  • парсит маленький скрипт за 120 мс

    Что-то не так в коде. Но не видя кода, никто не сможет ничего посоветовать.

  • Иерокопус Таманский, Код действительно большой, 300 КБ кода. Не исключено, что где то у меня лишний раз вызываются функции, это нужно всё дебажить
  • Александр Интересный,

    Не исключено, что где то у меня лишний раз вызываются функции, это нужно всё дебажить

    нужно профилировать код

  • Джава отличная. Но если в С++ вы создаете исполняемый файл, который запускается и парсит, то в джава сперва запускается джава а потом уже ваш jar, поэтому парсинг маленьких вещей будет дольше просто за счет запуска.
  • Программирование парсеров и трансляторов - великое искусство.

    И почему вы решили что просто переписывание на С++ даст прирост? Вы можете получить технические
    долги. Утечки памяти и более серъезные беды чем есть сейчас.

    Я-бы предложил не делать ничего. По крайней мере сейчас ситуация выглядит стабильной.
    Зачем нужно играть в перфекционизм когда никто таймингов не заказывал?

  • Ответы:

    В C++ и Java разная идиоматика, поэтому если перевести с одного языка на другой не изменяя ничего в программе, результат получится хуже. Если для конвертации использовать даже самый совершенный из существующих на сегодняшний день ИИ, получится вовсе запредельный хлам.

    • То есть всё же лучше ручками?
    • Александр Интересный, однозначно.

    Все верно тебе ответили - ручками.

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

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

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

    Например у тебя много классов, большая часть методов - обслуживающая, обеспечивающая синтаксический сахар и мелкие удобства, создание каких-нибудь геттеров/сеттеров, где то обработка ошибок типовая, но без котрой никак а идентификаторы везде разные и т.п. Нейронка такие перенесет без особых проблем, только перепроверяй ее везде

    я переносил немалый проект с помощью GPT 4, но я не кормил ему бездумно, сначала опиши тесты для каждого класса (это надо делать даже если руками переносишь) а потом корми ему по методу и проверяй, GPT не сделает все за тебя, но существенно ускорит под твои контролем переписывание кода

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

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

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

    При конвертации проекта с Java на C++ необходимо учитывать различия между этими двумя языками программирования, такие как система типов, управление памятью, структура классов и др. Это может потребовать дополнительной работы по адаптации и оптимизации кода после конвертации.

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно