Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ --> Java, Конвертер 
V
    Опции темы
Анор
Дата 3.6.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.6.2006

Репутация: нет
Всего: нет



Можно ли конвертнуть код написаный на С++ в код Java (ну как код Паскаля можно автоматом перегнать в код С++).
Может есть проги специальные? 
PM MAIL   Вверх
batigoal
Дата 4.6.2006, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Не слыхал, да и нетривиальная это задача. Как минимум, API конвертации не поддается. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Амортизатор
Дата 4.6.2006, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: нет
Всего: 8



Анор, как ты себе это представляешь? Программа на C++ использует соответсвующие средства системы для работы с файловой системой, сетью, графикой и т п. Java-программа использует стандартные библиотеки, поддерживаемые JVM. 


--------------------
Поехали!
PM MAIL   Вверх
DeadSoul
Дата 4.6.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: нет
Всего: 11



Цитата(Lamer George @  4.6.2006,  09:49 Найти цитируемый пост)
Не слыхал, да и нетривиальная это задача. Как минимум, API конвертации не поддается.  

А идиому "Захват ресурса - есть инициализация объекта" как конвертить? 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Beard
Дата 4.6.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.7.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 9



Цитата(Анор @  3.6.2006,  23:52 Найти цитируемый пост)
Можно ли конвертнуть код написаный на С++ в код Java (ну как код Паскаля можно автоматом перегнать в код С++).
Может есть проги специальные?  

Конечно есть, например С2J, C2J++, Ephedra и куча других - посмотри в гугле...


Цитата(Амортизатор @  4.6.2006,  10:48 Найти цитируемый пост)
Программа на C++ использует соответсвующие средства системы для работы с файловой системой, сетью, графикой и т п. Java-программа использует стандартные библиотеки, поддерживаемые JVM

http://www.jazillian.com/how.html
а все остальное оборачиваем JNI и вперед!
 
PM MAIL   Вверх
Амортизатор
Дата 4.6.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: нет
Всего: 8



Beard, ну прям так просто. Обернув JNI, ты получишь платформенно-зависимый код, а это нельзя считать полноценной конвертацией. На мой взгляд, полноценная конвертация - это замена платформенно-зависимых вызовов на обращения к библиотеке Java. А этот процесс невозможно автоматизировать. 


--------------------
Поехали!
PM MAIL   Вверх
Tirael
Дата 4.6.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 31.1.2006
Где: Москва

Репутация: нет
Всего: 7



Beard, как я понимаю конвертнуть можно только совсем простые выражения. Но вот множественное наледование, перегрузка операторов как-то плохо поддаются переводу. 
--------------------
 
PM MAIL   Вверх
Beard
Дата 4.6.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.7.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 9



Цитата(Амортизатор @  4.6.2006,  12:21 Найти цитируемый пост)
Beard, ну прям так просто. Обернув JNI, ты получишь платформенно-зависимый код, а это нельзя считать полноценной конвертацией. На мой взгляд, полноценная конвертация - это замена платформенно-зависимых вызовов на обращения к библиотеке Java. А этот процесс невозможно автоматизировать. 


Вспомним, что некоторые библиотечные классы (точнее, их методы) как раз и реализованы через JNI - просто иначе никак!
И кросс-платформенное приложение, которое взаимодействует, например, с ком-портом, мы никак не напишем на Java (хотя можно сделать по аналогии с этими библиотечными классами - для каждой ОС - библиотеку + JNI - и сказать, что оно кроссплатформенно, хотя и не pure-java).

Цитата(Tirael @  4.6.2006,  12:29 Найти цитируемый пост)
Beard, как я понимаю конвертнуть можно только совсем простые выражения. Но вот множественное наледование, перегрузка операторов как-то плохо поддаются переводу.


Замечательно поддаются конвертации - написать конвертор из С++ в Java (не считая библиотек - про некоторые библиотечные функции и их представление после конвертации написано в статье по ссылке, что я дал)  не так уж сложно самому - нудно и долго, конечно, но вполне реализуемо... 
Это не голосовное утверждение - почти все мои курсовики и дипломная + несколько
проектов связатны с конвертацией из одного языка в другой (или расширенного языка в таргет)...
Тем более что в джава можно реализовать псевдо-множественное наследование классов через
интерфейсы - по свойствам оно ничем не будет отличаться от множественного наследования классов в
С++.
И вообще - такой предмет как "Теория языков и трансляций" ничего не говорит!? - не знаю, во всех
ли тех. вузах он входит в программу..

 
PM MAIL   Вверх
Beard
Дата 4.6.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.7.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 9



Да - по поводу перегрузки операторов - этот механизм фактически является одним из видов
перегрузки функций, а здесь уж никакой сложности нет... 
PM MAIL   Вверх
Анор
Дата 5.6.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.6.2006

Репутация: нет
Всего: нет



Beard - спасибо, полез искатьsmile 
PM MAIL   Вверх
Амортизатор
Дата 5.6.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: нет
Всего: 8



Цитата(Beard @  4.6.2006,  14:15 Найти цитируемый пост)
Вспомним, что некоторые библиотечные классы (точнее, их методы) как раз и реализованы через JNI - просто иначе никак!
И кросс-платформенное приложение, которое взаимодействует, например, с ком-портом, мы никак не напишем на Java (хотя можно сделать по аналогии с этими библиотечными классами - для каждой ОС - библиотеку + JNI - и сказать, что оно кроссплатформенно, хотя и не pure-java).


В том то и дело, что БИБЛИОТЕЧНЫЕ классы - т е те, что входят в состав JRE! То бишь собственно бинарники программы не будут отличаться в общем случае в зависимости от платформы, они будут одинаково обращаться к библиотеке ( javax.comm в случае ком порта), а то, что дальше - это уже дело JRE и для каждой платформы у нее своя реализация. А если речь идет о конвертации C++-программы в Java, то JNI идет в коде программы, т е теряется независмость от платформы. Смысл то такой конвертации, если она все равно сможет исполняться только на той оси, под которой работает программа на С++? 


--------------------
Поехали!
PM MAIL   Вверх
Амортизатор
Дата 5.6.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: нет
Всего: 8



Естественно, в тех случаях, когда что-то невозможно сделать стандартными библиотеками Java и приходится прибегать к явному JNI, тогда при конвертации ничего не теряется. Однако ничего и не приобретается. Опять таки, есть ли смысл в подобной конвертации? Только если реализовать, как ты говоришь, для каждой оси свою либу. 


--------------------
Поехали!
PM MAIL   Вверх
Beard
Дата 5.6.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.7.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 9



to Amortisator: Мы, наверное, о разных вещах говорим...
Есть задача из области реинжиниринга - сорцы программы C++ -> сорцы Java.
Если наши сорцы на С++ на выходят за рамки Standart C++ (т.е. не используют сторонних
библиотек), то проблем никаких (может я и вру, но ничего в стандарте C++, что нельзя
реализовать (найти аналог) на Java, нет! - если не прав, ткните).
Если же мы пользуем такие библиотеки, то у нас не получится
pure-Java приложение (и я с этим не спорю)... 
Тем более, если у нас, например, все жестко завязано на пользовательский интерфейс (придется буквально все ручками переписывать)..
Но мы хотим заставить (программа - минимум) сконвертированное
в Java приложение работать под исходную платформу (где и C++) - используя JNI мы этого добиваемся
(причем практически автоматом).
Кросплатформенность в смысле платформы (простите за тавтологию, да и за возможные опечатки - 
алкоголь из крови еще не вышел) Java естественно теряется...
Если этого кода (завязанного на JNI) немного (да если и много, то уж чего делать - босс сказал..), то мы также ручками доводим его до кросплатформенного (если есть возможность) решения - реинжиниринг произведен, все довольны.

Добавлено @ 21:41 
Цитата(Амортизатор @  5.6.2006,  21:23 Найти цитируемый пост)
Естественно, в тех случаях, когда что-то невозможно сделать стандартными библиотеками Java и приходится прибегать к явному JNI, тогда при конвертации ничего не теряется. Однако ничего и не приобретается. Опять таки, есть ли смысл в подобной конвертации? Только если реализовать, как ты говоришь, для каждой оси свою либу


Да, я про это и говорил.
А приобрестись может то, что мы доведем этот код ручками до кроссплатформенного

Добавлено @ 21:46 
Вобщем, если главная цель - логика приложения (тем более при конвертации могут "отсекаться" даже 
паттерны проектирования) - мы много приобретаем для дальнейшего развития нашего проекта на 
новой платформе 
PM MAIL   Вверх
Void
Дата 5.6.2006, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 1
Всего: 173



Цитата(Beard @  5.6.2006,  23:37 Найти цитируемый пост)
(может я и вру, но ничего в стандарте C++, что нельзя
реализовать (найти аналог) на Java, нет! - если не прав, ткните).

JNI упоминался как средство реализации функциональности сторонных библиотек. Если оставаться в рамках стандартной библиотеки C++ то да, почти для всего найдутся аналоги в JRE.

У меня есть кое-какой опыт создания трансляторов между ЯВУ. И навскидку при преобразовании C++ -> Java я вижу основную проблему:
Указатели. В общем случае адресную арифметику перенести на Java нельзя. Можно только распознать некоторые типичные случаи применения адресной арифметики и эмулировать ее с помощью массивов, спец. классов и т.д. В общем случае придется либо прибегать к помощи JNI, либо поднимать лапки.

Думаю, не ошибусь, если скажу, что для такого транслятора «специальные случаи» и применение эвристик будут постоянной практикой. Если, например, при реализации Java -> C++ основную сложность составила бы реализация рантайма (GC, портирование библиотек), а сам транслятор был бы сравнительно простым, то тут возникает масса проблем именно при преобразовании исходного кода.

Все остальное вроде решаемо.
Множественное наследование эмулируется интерфейсами и дублированием кода.
Шаблоны — тоже дублирование кода и, возможно, дженерики.
Цитата(DeadSoul @  4.6.2006,  13:35 Найти цитируемый пост)
А идиому "Захват ресурса - есть инициализация объекта" как конвертить?

Наименьшая из проблем. Каждый блок в try..finally и вызывать деструкторы в finally.

И, наконец, не забываем про исключительную сложность самого парсера C++. Хотя конечно можно подцепить GCC-XML, OpenC++ или купить у EDG исходники фронтэнда smile

Проблема в том, что практическая польза от такого транслятора не оправдывает трудности реализации из-за огранчиений на библиотеки. Единственно, диплом может хороший получится или даже диссер.  

Это сообщение отредактировал(а) Void - 5.6.2006, 23:32


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
sergejzr
Дата 5.6.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



Не усложняйте задачу smile
В большинстве стучаев конвертер нужен для перегона алгоритмов из одного языка в другой. Иногда проектов. Для этих задач конверторы и существуют. Конечно они являются ничем другим, как инструментом - помощником. какую часть всегда придётся править ручками, но рутину они перенимают. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0868 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.