|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.03.2022, 12:20 | #1 |
Заблокирован
Регистрация: 14.03.2022
Сообщений: 50
|
Переводим код с Java на Golang автоматичеки.
Не знаю в какои форуме правильно поместить заметку, тема затрагивает несколько смежных областей.
Поправьте если ошибся. После нескольких месяцев перехода в разработке от Java на Golang, мне показалось, что интересно было бы сделать перевод кода Java на Golang автоматически, написав Converter, так как синтаксис у обоих языков несколько похож. Нижеприведенный текст показывает, что удалось сделать на данный момент. Работа это не прототип, а скорее указывает возможность достижения результата. Для чего я сознательно упрощаю контекст разработки Converter-a где это будет возможно. Сначала мне показалось важным, что между Java и Go есть разница между реализацией Dynamic Dispatching, точнее в Go Dynamic Dispatching отсутствует. Примененное решение в текущей реализации Converter-a выглядет не только безобразно, но и нарушает несколько очень важных принципов в ОО проектировании. Тут я не шучу. Но вариант выгдядет вполне работающим. Далее я буду приводить код на Java, за ним следует автоматически сгенерированный код на Golang и комментарии по-необходимости. 1. Начал я конечно с самой популярной программы: "Hello World". Код:
Код:
Код:
Код:
Код:
Код:
последнем примере является amount() в классе Repeater. Без переписывания кода, я думаю, было бы невозможно вызвать его правильно. Код:
Код:
Всем большое спасибо. |
04.04.2022, 14:04 | #2 |
Заблокирован
Регистрация: 14.03.2022
Сообщений: 50
|
Еще один вариант использования для автоматического перевода кода,
написанного на Java на Golang: Обработка Исключений. Следующий пример скорее всего будет про многопоточность. Пример на Java: Код:
Код:
|
07.04.2022, 15:12 | #3 |
Заблокирован
Регистрация: 14.03.2022
Сообщений: 50
|
Спасибо коллеге, указавшему более правильный выходной код для Java to Go Converter-а. Привожу.
Код:
|
07.04.2022, 18:56 | #4 |
Заблокирован
Регистрация: 14.03.2022
Сообщений: 50
|
Прошу прощения, не проверил полученное решение. :-)
Привожу код, который работает. Код:
|
28.04.2022, 18:43 | #5 |
Заблокирован
Регистрация: 14.03.2022
Сообщений: 50
|
Мнгопоточность, простая.
Итак, многопоточность.
Нашел у Oracle простой пример с чудным названием BadThreads там: https://docs.oracle.com/javase/tutor...questions.html, еще более упростил его, обозвал пример новым простым именем One и дополнил Converter, что бы перевести код на Golang. В go нет похожей обработки для InterruptedException поэтому Converter не переводит обработку данного прерывания никак. Если у кого-либо есть относительно небольшой пример на Java - прошу поделиться. Код на Java: Код:
Код:
Если у кого-нибудь есть интересный пример - напишите, я подумаю как его решить. Только не могу обещать, что это будет быстро. :-) |
17.05.2022, 14:18 | #6 |
Заблокирован
Регистрация: 14.03.2022
Сообщений: 50
|
Многопоточность. Часть 2.
В Go многопоточность одна из главных возможностей, соответcтвенно умение преобразования Java кода с использованием многопоточности в код на Go автоматически, который использует channels, очень важен.
Нашел у Oracle подходящий пример ProducerConsumerExample там: ProducerConsumerExample, где класс Drop - кандидат на преобразование в Go с использованием channels. Но, сейчас привожу промежуточный результат без channels. Еще, прочитал мнение, что преобразование Java кода где используются аннотации в runtime-е -невозможен. Надо исследовать проблему и попытаться понять возможно ли ее как-то решить. Прежде чем переводить проект из статуса "возможность достижения" в статус "прототип" надо посмотреть, что можно сделать с указанными проблемами применительно к аннотациям. Код на Java: Код:
Код:
The Go Playground Всем огромное спасибо. |
22.05.2022, 09:30 | #7 |
Заблокирован
Регистрация: 14.03.2022
Сообщений: 50
|
Channels.
Итак, channels.
Теперь converter может преобразовывать Java классы в Go channels где это возможно. Предыдущий пример содержит класс Drop, котрый соответствует критериям преобразования, что и показывает нижеприведенный код примера на Go. Соответственно, если converter "не найдет" класс подходящий для преобразования, многопоточность на Java будет преобразована в Go код без испоьзования перевода в channels. Код на Java: Код:
Код:
Теперь я возьму паузу, надо разобраться с советами, которые я получил. Всем большое спасибо. |
24.08.2022, 02:23 | #8 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Приветствую. Это всё, конечно, замечательные вещи, но критику или восхищение не могу предоставить, не работаю с этими технологиями, кроме базового знакомства нет опыта. Но чисто концептуально у меня 2 вопроса:
1. Если у вас есть конвертер, пусть даже полурабочий, почему не оформить это в репозиторий для общественного достояния ? 2. Чем ваш подход иной (лучше, технологичней и т.п.), нежели чем уже существующие и опубликованные репозитории? Например, первое, что нагуглил: https://github.com/dglo/java2go |
26.08.2022, 10:33 | #9 |
Заблокирован
Регистрация: 14.03.2022
Сообщений: 50
|
Добрый день.
>>не работаю с этими технологиями, кроме базового знакомства нет опыта. Вам будет тяжко. :-) >>1. Если у вас есть конвертер, пусть даже полурабочий, почему не оформить это в репозиторий для общественного достояния ? Пока не готов, это все таки демонстрация возможности, не более. >>2. Чем ваш подход иной (лучше, технологичней и т.п.), нежели чем уже существующие и опубликованные репозитории? Например, первое, что нагуглил: https://github.com/dglo/java2go Взглянул, проект вроде на Go, я пока вижу более естественным генерировать Go-код из AST, который отражает Java программу. |
31.08.2022, 12:04 | #10 |
Заблокирован
Регистрация: 14.03.2022
Сообщений: 50
|
phomm,
пока план выпустить конвертер как Free сервис для общего доступа. Но когда это будет - трудно сказать. :-) |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
HEX переводим в Single | Yrok | Общие вопросы Delphi | 6 | 04.03.2009 17:00 |
язык Си, задача - переводим в 16-й код, старшие три бита интерпретируем как некое число n | drossel | Помощь студентам | 5 | 02.03.2008 17:24 |