Подтвердить что ты не робот

Существует ли конвертер/инструмент Java для С++?

Я всегда спрашивал себя, можно ли сделать конвертер Java в С++.

Может быть, инструмент, который преобразует синтаксис Java в синтаксис С++?

Я знаю, что языки разные, но простые вещи, такие как циклы, где семантика соответствует 1 к 1.

Есть ли такой инструмент? Или можно сделать один?

4b9b3361

Ответ 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).