LINUX.ORG.RU
 
satanic-mechanic

Подъемна ли задача


0

0

Сразу говорю, не надо никакого флейма, наездов и т. д. Прошу отвечать
по-существу.

Итак, поставили тут передо мной задачу. Люди разрабатывают программы
на С++ и Java, используя одинаковый framework, написанный и под
первый язык, и под второй. Разрабатывают одинаковые приложения. Т. е.
приложение_X в итоге должно быть на C++ и на Java. Разрабатывают две
разные группы, поэтому происходит дублирование работы. Возникла у
людей идея писать только на C++, а затем преобразовывать на Java. И
они хотят этот процесс хотя бы _ЧАСТИЧНО_ автоматизировать. Вот и
поставили передо мной эту задачу.

Я не идиот :)

Разумеется речь не идет о преобразовании _любой_ C++-прогрммы на Java.
Будет введено множество ограничений на то, что можно использовать, что
нельзя (типа нельзя множественное наследование, перегрузка операторов
указатели в чистом виде (то есть массивы, строки - можно), или
обязательное использование smart-pointer'ов, использование только
определенный библиотек и функций, достаточных для решения типовых
задач в их области). Тем более народ пишет скорее не на C++, а на C
с классами. И вообще, им не нужен идеальный результат, им нужно то,
что ускорит разработку.

Мне эта задача кажется вроде бы подъемной, хотя и очень сложной.
Но самое главное - интересной, она во многом пересекается с тем, чем я
занимаюсь. Но в такой области я не делал пока ничего.

Я знаю, что здесь есть немного людей, которые больше знают меня в этой
области (вспоминается здесть пробегали темы по генерации кода на
Fortran для числодробильных задач). Я хотел бы услышать мнение этих
людей о подъемности этой задачи. Я не хочу браться за задачу без
знания того, что это вообще возможно (хотя возможно все :) ). Я понимаю, что это не легко. Проблема как в непосредственной реализации,
так и в продумывании всех ограничений, а также правильной архитектуры
всего приложения. Также не откажусь от каких-либо общих советов,
советов по использованию чего-то стороннего, что облегчит разработку.

Собираюсь это писать на OCaml, из сторонних вещей нашел GCC-XML.

P.S. Возможен вообще-то вариант Java -> C++, но он мне кажется более
     сложным.

P.P.S. Я давно здесь не видел Виталия Луговского, но если он заходит
       сюда анонимно, я очень прошу его высказаться по этому поводу.

P.P.P.S. Если вы дочитали до этого места и из-за величины поста
         забыли о моей просьбе, высказанной в начале, я напоминаю:
         отвечайте только если вам есть что сказать по-существу.

ЗАСТАВЬ КОМПЬЮТЕР ПОЛИВАТЬ ОГОРОД

автоматизация своими руками: электроприборы под контролем компьютера
beware of programmers who carry screwdrivers!
http://www.unicontrollers.com/products/unc01x

[#]  

Re: Подъемна ли задача

кхм кхм...

а почему бы сразу не попробовать готовые решения? типа java2cpp, jazillian, c2j, octopus, cappuccino, etc, etc (hint: google "c++ java translator")

anonymous ()
[#] Ответ на: Re: Подъемна ли задача от anonymous 07.09.2006 23:27:13  
satanic-mechanic

Re: Подъемна ли задача

кхм кхм... это к чему?

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

Спасибо за информацию, сейчас посмотрю.

* ()
[#] Ответ на: Re: Подъемна ли задача от anonymous 07.09.2006 23:27:13  
satanic-mechanic

Re: Подъемна ли задача

Ну вот, я так и думал. Кратко прошелся - ничего путного не нашел. Конечно еще надо будет смотреть.

Находятся всякие поделки для диссера, которые используют малую часть библиотеки. Большинство вещей - это трансляторы из C в Java - это не подходит. Ключевая информация в моем посте - использование некоего стороннего фреймворка. То есть нужно, чтобы приложение можно было настраивать на использование сторонних библиотек. Что-то похожее на правду - это Octopus, который по словам создателей умеет универсально Java -> C++, но: "Remotesoft Octopus is still in beta testing phase, pricing information will be available when the product is ready to sell. In the meantime, we do offer translation service, see more detail here."

* ()
[#] Ответ на: Re: Подъемна ли задача от satanic-mechanic 07.09.2006 23:47:42  
satanic-mechanic

Re: Подъемна ли задача

По поводу octopus'а еще один большой вопрос - многие ссылки на их сайте не работают.

* ()
[#] Ответ на: Re: Подъемна ли задача от satanic-mechanic 07.09.2006 23:31:20  

Re: Подъемна ли задача

>кхм кхм... это к чему?

это от неуверенности, я в этом вопросе не компетентен, просто подумал, что должны быть готовые трансляторы, уж больно языки популярные, и всё же доволе много в них общего...

:)

anonymous ()
[#] Ответ на: Re: Подъемна ли задача от satanic-mechanic 07.09.2006 23:47:42  

Re: Подъемна ли задача

>так как общая задача преобразования из одного языка в другой мне кажется не реальной

почему же, smarteiffel, например так работает (сразу генерирует сишный код)

anonymous ()
[#] Ответ на: Re: Подъемна ли задача от anonymous 07.09.2006 23:59:29  
satanic-mechanic

Re: Подъемна ли задача

Это я сгоряча и под языками имел ввиду C++ и Java. На самом деле конечно реальная, кроме smarteiffel так делают многие. Но для некоторых сочетаний (исходный язык, целевой язык) _качественное_ преобразование очень сложно (реализовать полностью C++ шаблоны, например), а в моем случае не нужно. Если я захочу реализовать полный стандарт языка C++, то на это уйдут годы - мне этого не нужно :) Поэтому и сказал - нереально.

* ()
[#]  

Re: Подъемна ли задача

Из того что упростит реализацию: Я смотрел GCC-XML около года назад, на тот момнет он не умел отплевывать XML-описания тел функций и методов. Советую лучше использовать стандартный дамп GCC-шного AST. Оно задается опциями *dump* (смотри man gcc).

А так, задача на мой взгляд вполне реальная, если правильно выработать совокупность ограничений для программистов на Си++.

** ()
[#] Ответ на: Re: Подъемна ли задача от Burbaka 08.09.2006 1:19:09  
satanic-mechanic

Re: Подъемна ли задача

Спасибо за информацию по поводу GCC-XML, посмотрю. Задача и мне кажется реальной. Я просто решил запостить сюда, чтобы, если никто не докажет мне, что она нереальна, с большей уверенностью согласиться на ее реализацию.

Вот правильно выработать ограничения будет действительно нелегко...

* ()
[#] Ответ на: Re: Подъемна ли задача от satanic-mechanic 08.09.2006 1:32:09  
theserg

Re: Подъемна ли задача

уфф, мысля такая: когда программировал под винду, там были такие dll-ки: пишешь на паскале, а используешь на c++, или наоборот.

Впрочем, это вам не поможет... в данном случае надо разработать собственный язык, который будет легко транслироваться в код как на c++, так и на яве (автоматически, т.е. скриптом). Такой язык, вроде бы, Д.Кнут разработал, когда TeX писал

И звиняйте, если бред написал - позно уже, спать пора бы :)

*** ()
[#] Ответ на: Re: Подъемна ли задача от theserg 08.09.2006 2:21:48  
satanic-mechanic

Re: Подъемна ли задача

> уфф, мысля такая: когда программировал под винду, там были такие dll-ки: пишешь на паскале, а используешь на c++, или наоборот.

:)

> в данном случае надо разработать собственный язык, который будет легко транслироваться в код как на c++, так и на яве (автоматически, т.е. скриптом). Такой язык, вроде бы, Д.Кнут разработал, когда TeX писал

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

* ()
[#] Ответ на: Re: Подъемна ли задача от satanic-mechanic 08.09.2006 2:42:29  

Re: Подъемна ли задача

> :)

Может в самом деле лучше библиотеку через jni использовать. Создание привязок легко автоматизируется (с некоторыми ограничениями интерфейса библиотеки).

> Это было бы более простым решением, но к сожалению, заказчик хочет писать на C++, а затем, в виде бонуса, получать также код на Java, который затем с минимальными затратами (в идеале вообще без них) приводится к работающему виду.

Покопать еще в сторону компиляции сразу в байткод. Или задача в получение исходников?

Обсуждение этого вопроса: http://groups.google.ru/group/comp.lang.c/browse_thread/thread/88cb533585cafe...

* ()
[#] Ответ на: Re: Подъемна ли задача от amm 08.09.2006 11:50:35  
satanic-mechanic

Re: Подъемна ли задача

> Может в самом деле лучше библиотеку через jni использовать.

Вы немного не так поняли: нужный фреймворк есть и под C++ и под Java. Он является основой всех приложений, на C++/Java реализуется только логика, что и дает возможность ввести множество ограничений на C++.

* ()
[#] Ответ на: Re: Подъемна ли задача от satanic-mechanic 08.09.2006 12:08:52  
theserg

Re: Подъемна ли задача

понятно.

я думаю, надо подождать луговского! Позовите меня, когда начнётся ;)

*** ()
[#]  
bugmaker

Re: Подъемна ли задача

Из java в c++ ИМХО преобразовать намного легче. Ибо java проще намного. Однако качество С++ кода будет преацтойным. Более внятным подходом было бы делать прогу на чём-нибудь поддерживающим метапрограммирование, например лисп, и озаботиться двумя наборами макросов, производящих коды для с++ и жаба отдельно. В этом случае можно будет добитиься качества кода, достаточно приемлемого чёбы сдать ево заказчику под видом рукописного.

****# ()
[#] Ответ на: Re: Подъемна ли задача от bugmaker 08.09.2006 12:38:57  
theserg

Re: Подъемна ли задача

точно, лисп! когда же будет хаскель? хвостовая рекурсия?

*** ()
[#] Ответ на: Re: Подъемна ли задача от theserg 08.09.2006 13:01:37  
Valeriy_Onuchin

Re: Подъемна ли задача

off-topic.
Кто-нибудь, что-нибудь слышал о php->C/C++ конверторах?

** ()
[#] Ответ на: Re: Подъемна ли задача от bugmaker 08.09.2006 12:38:57  
satanic-mechanic

Re: Подъемна ли задача

Будет использоваться не C++, а его подмножество, зато преобразование C++ -> Java позволит не вычислять самостоятельно когда освобождать память (в принципе все можно было бы оборачивать в SmartPoint'ы).

Я понимаю, что подход с lisp'ом и набором макр _намного_ проще. Но заказчик не пересадит отдел С++-программистов на Lisp. Условие: исходный язык: C++ или Java, первый предпочтительнее.

Я, как уже упоминал, саму программу решил писать не на Lisp, а именно на OCaml.

P.S. В принципе, за задачу решил взяться.

* ()
[#] Ответ на: Re: Подъемна ли задача от satanic-mechanic 08.09.2006 12:08:52  

Re: Подъемна ли задача

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

* ()
[#] Ответ на: Re: Подъемна ли задача от satanic-mechanic 08.09.2006 13:23:35  

Re: Подъемна ли задача

Все, теперь явошный отдел весь сократят. :(

Надеюсь, о резултатах работы сообщишь.

* ()
[#] Ответ на: Re: Подъемна ли задача от theserg 08.09.2006 13:01:37  
bugmaker

Re: Подъемна ли задача

> когда же будет хаскель?

Когда шареные либы понимать начнёт.

> хвостовая рекурсия?

Хвостовая рекурсия - это часть Питона, оставшаяся после отсечения головной рекурсии. Причём тут С++ и жава если руби лучше?

****# ()
[#]  

Re: Подъемна ли задача

http://www.jazillian.com/ люди хвалили. Только дорого стоит

anonymous ()
[#] Ответ на: Re: Подъемна ли задача от satanic-mechanic 08.09.2006 13:23:35  
cvv

Re: Подъемна ли задача

>Будет использоваться не C++, а его подмножество,

одумайся пока не поздно, слишком высока вероятность что ты в тупик зайдёш и без шаблонов. обратная задача намного проще

***** ()
[#]  

Re: Подъемна ли задача

Не надо путать теплое с мягким :-)

Совершенно без проблем написАть транслятор Жаба-ЦеПП или наоборот. Пишется студентом старшего курса за месяц, или профессионалом - специалистом по теории языков за пару часов.

Только надо отдавать себе отчет в том, что получаемый текст будет не для человека.

Видимо, у вас, все же, другая задача: по мере возможности автоматизировать процесс перевода _человекочитаемых_ программ с ЦеПП на Жабку. Без человека тут никак не обойтись, очевидно...

Тут, скорее всего, готовых решений (и даже общей теории) нет, и поможет только творчество. Главное, что задача слишком привязана к конкретике вашей конторы, и готовых решений быть не может... ИМХО, конечно.

***** ()
[#] Ответ на: Re: Подъемна ли задача от Die-Hard 10.09.2006 0:10:30  

Re: Подъемна ли задача

> овершенно без проблем написАть транслятор Жаба-ЦеПП или наоборот. Пишется студентом старшего курса за месяц, или профессионалом - специалистом по теории языков за пару часов.

вызывающе неверное утверждение:) Жалкое подобие на такой транслятор, который будет работать в типичных случаях -- может быть.

***** ()
[#] Ответ на: Re: Подъемна ли задача от Die-Hard 10.09.2006 0:10:30  

Re: Подъемна ли задача

> Совершенно без проблем написАть транслятор Жаба-ЦеПП или наоборот. Пишется студентом старшего курса за месяц, или профессионалом - специалистом по теории языков за пару часов.

Не думаю я :) Чего стоит написать подходящую рантайм обвязку для Си++ реализуюшую garbage collector. Нормальных gc под Си++ я пока еше не видел. Да и сама реализация траслятора переднего плана для жабы задача достаточно трудоемкая, уж точно не "пару часов".

Я бы выбрал трансляцию ограниченного Си++ (без шаблонов, без препроцессора, со спрятанными указателями и т.д.) -> Жаба именно из-за garbage сollector-а. И то при условии что есть готовый frontend Cи++. Тем более если есть общий фреймворк, то можно посмотреть как они решали проблему "одинаковости" на двух разных платформах.

** ()
[#] Ответ на: Re: Подъемна ли задача от Burbaka 10.09.2006 1:22:59  
cvv

Re: Подъемна ли задача

>Я бы выбрал трансляцию ограниченного Си++ (без шаблонов, без препроцессора, со спрятанными указателями и т.д.) -> Жаба именно из-за garbage сollector-а.

наверное я таки присоеденюсь к этому утверждению. хотя если честно я плаваю в вопросах использования GC в С++

***** ()
[#] Ответ на: Re: Подъемна ли задача от dilmah 10.09.2006 0:50:30  

Re: Подъемна ли задача

dilmah :

>> овершенно без проблем написАть транслятор Жаба-ЦеПП или наоборот. Пишется студентом старшего курса за месяц, или профессионалом - специалистом по теории языков за пару часов.

> вызывающе неверное утверждение:)

Видимо, кто-то из нас другого не понял...

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

И то, и то, описано и для Жабы, и для ЦеПП.

Конечно, перевод не будет человекочитаемым.

***** ()