Существует ли конвертер/инструмент Java для С++?
Я всегда спрашивал себя, можно ли сделать конвертер Java в С++.
Может быть, инструмент, который преобразует синтаксис Java в синтаксис С++?
Я знаю, что языки разные, но простые вещи, такие как циклы, где семантика соответствует 1 к 1.
Есть ли такой инструмент? Или можно сделать один?
Ответы
Ответ 1
Можно делать все, что дает достаточно времени, денег и ресурсов. Это практично? Помимо тривиальных примеров на самом деле. Вернее, это зависит от того, что составляет приемлемую частоту ошибок.
Реальная проблема заключается в том, что идиомы различаются в Java до С++. Java на С#, например, будет намного проще (потому что идиомы гораздо более похожи). Самым большим из них является то, что С++ имеет деструкторы и управляемую вручную память. Java использует, наконец, блоки для такого поведения и имеет сбор мусора.
Кроме того, Java имеет общий супертип объекта. С++ не делает.
Генерики для шаблонов были бы почти невозможны, я бы себе представил.
Ответ 2
Парсер Firefox HTML5 написан на Java и преобразован в С++. Но я думаю, что используемый в нем конвертер довольно специфичен для этого проекта. Интересно, что получившийся С++ парсер был быстрее, чем старый синтаксический анализатор, написанный на С++.
Я также пишу конвертер как часть база данных H2 в разделе src/tools/org/h2/java. Идея состоит в том, чтобы разрешить преобразование подмножества базы данных H2 в С++, поэтому это также не переводчик общего назначения.
И есть проект с открытым исходным кодом J2C.
Итак, есть способы конвертировать Java в С++. Но не ожидайте, что переводчик поддержит все функции и не ожидает, что полученный код будет быстрее, чем хороший Java JVM.
Ответ 3
Возможно, не вопрос, но это будет не так просто. Это был бы компилятор Java, который генерирует С++.
Если вы хотите сделать это с нуля, это будет очень сложно, вам нужно выполнить всю работу javac и JVM для вас (например, сбор мусора).
Btw. У Google есть компилятор Java для JavaScript (включен в GWT)
Ответ 4
Есть один, бит, я не уверен, действительно ли он работает.
Java-С++ Converter-Tangible Software Soulutions.
Странно, как есть конвертеры С++ для java, но только 1 конвертер java в С++.
Ответ 5
Как сказано, было бы сложно преобразовать Java в С++, но у нас может быть приложение или инструмент, который генерирует код в Java и эквивалентный код С++.
Я знаю одно приложение, которое генерирует код в С++/Java/С# с учетом модели, которая имеет свой собственный способ уменьшить ее.
Этот инструмент принадлежит CA, а имя - CA Plex.
Поиск на www.ca.com
Ответ 6
http://www.tangiblesoftwaresolutions.com/Order/Order_Upgrade_Instant_CPlus_Java_Edition.htm
Зависит от области использования кода, с точки зрения обучения, возможно, это может быть интересно.
Я просто нашел это через google, поскольку я вспомнил, что видел в Univeristy, который создал код на основе uml.
Ответ 7
Существуют программы, которые утверждают, что они могут это сделать, но никто не получил достаточной популярности, чтобы часто упоминаться, поэтому мы оставим их в "попытках". Для создания конвертера потребуется много AI, встроенных в вашу программу. Трудность увеличивается в десять раз, когда задействован swing, потому что GTK/wxWidgets/Qt/win32 API все сильно отличаются от качелей. Но это возможно. Не то, чтобы качество кода было отличным, и не гарантирует, что ваша программа не будет сбой из-за использования отдельных методов обработки памяти, но это возможно.
Ответ 8
Что-то аккуратное будет инструментом, который переводит Java на "С++ с использованием Java API" (например, GNU GCJ CNI), остается одна проблема - управлять array.length
(array not vector)...
Ответ 9
Основная проблема заключается в том, что java - это язык, который написан и предназначен для общения с виртуальной машиной. Я предполагаю, что это будет возможно, но все, что вы оставите, - очень плохо оптимизированное приложение с само переводчивым слоем, выполняющим то, что уже делает VM. Я имею в виду, конечно, возможно, это все равно не будет решением для всего, о чем я мог думать. Если вы хотите, чтобы ваш вялый Java-приложение был родным, может быть, ваше мышление слишком сложно, просто используйте приложение, такое как JET, его на самом деле неплохо, и даст вам те преимущества, которые принесет родное приложение. Конечно, если виртуальная машина уже делает то, что приложение просит, чтобы она выполнялась так же хорошо, как и собственный код (иногда бывает: P), это ничего не изменит.
Java to С#, tho, звучит более разумно, так как оба языка написаны подобным образом, говоря с каркасом как таковым, но это все равно оставит код очень неоптимизированным, поскольку код, написанный с нуля для конкретной структуры, не может быть побежденным.
Ответ 10
Java-C на самом деле будет самым простым. Помните, что вам нужно преобразовать язык. Если вы это сделаете, необходимые библиотеки могут быть преобразованы вашим новым компилятором. Другими словами, Swing и AWT не должны быть большой проблемой...
Я бы начал с хорошего взгляда на Java Native Interface (JNI). JNI является частью java, что позволяет использовать его с C и С++. Причина, по которой я начинаю здесь, заключается в том, что становится довольно очевидным, как части Java могут быть реализованы в C. После того, как я понял основные структуры, например, как объекты Java могут быть отображены на C-структуры (struct) и как почти все в Java является объектом, включая массивы, я мог бы заглянуть в исходный код Open JDK.
Фактический конвертер должен будет преобразовать все импортированные библиотеки Java (и их импортированные библиотеки и т.д.), что означает, что вам нужен исходный код для всего. Это преобразование - небольшая задача, поскольку библиотеки Java большие.
Процесс потребует много времени, но AI не требуется. Однако я не вижу причин для такого преобразования. Он утрачивает переносимость Java и не будет получать эффективность C (за исключением того, что он будет скомпилирован с помощью собственного кода, но лучше было бы скомпилировать машинный код непосредственно с Java).