LINUX.ORG.RU

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


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. Если вы дочитали до этого места и из-за величины поста
         забыли о моей просьбе, высказанной в начале, я напоминаю:
         отвечайте только если вам есть что сказать по-существу.

кхм кхм...

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

anonymous
()
Ответ на: комментарий от anonymous

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

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

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

satanic-mechanic
() автор топика
Ответ на: комментарий от anonymous

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

Находятся всякие поделки для диссера, которые используют малую часть библиотеки. Большинство вещей - это трансляторы из 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."

satanic-mechanic
() автор топика
Ответ на: комментарий от satanic-mechanic

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

satanic-mechanic
() автор топика
Ответ на: комментарий от satanic-mechanic

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

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

:)

anonymous
()
Ответ на: комментарий от satanic-mechanic

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

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

anonymous
()
Ответ на: комментарий от anonymous

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

satanic-mechanic
() автор топика

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

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

Burbaka ★★
()
Ответ на: комментарий от Burbaka

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

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

satanic-mechanic
() автор топика
Ответ на: комментарий от satanic-mechanic

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

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

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

theserg ★★★
()
Ответ на: комментарий от theserg

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

:)

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

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

satanic-mechanic
() автор топика
Ответ на: комментарий от satanic-mechanic

> :)

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

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

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

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

amm
()
Ответ на: комментарий от amm

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

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

satanic-mechanic
() автор топика
Ответ на: комментарий от satanic-mechanic

понятно.

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

theserg ★★★
()

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

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

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

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

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

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

satanic-mechanic
() автор топика
Ответ на: комментарий от satanic-mechanic

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

amm
()
Ответ на: комментарий от satanic-mechanic

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

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

amm
()
Ответ на: комментарий от theserg

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

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

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

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

bugmaker ★★★★☆
()
Ответ на: комментарий от satanic-mechanic

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

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

cvv ★★★★★
()

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

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

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

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

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

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

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

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

dilmah ★★★★★
()
Ответ на: комментарий от Die-Hard

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

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

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

Burbaka ★★
()
Ответ на: комментарий от Burbaka

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

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

cvv ★★★★★
()
Ответ на: комментарий от dilmah

dilmah :

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

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

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

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

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

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

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.