![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 14.03.2022
Сообщений: 9
|
![]()
Не знаю в какои форуме правильно поместить заметку, тема затрагивает несколько смежных областей.
Поправьте если ошибся. После нескольких месяцев перехода в разработке от Java на Golang, мне показалось, что интересно было бы сделать перевод кода Java на Golang автоматически, написав Converter, так как синтаксис у обоих языков несколько похож. Нижеприведенный текст показывает, что удалось сделать на данный момент. Работа это не прототип, а скорее указывает возможность достижения результата. Для чего я сознательно упрощаю контекст разработки Converter-a где это будет возможно. Сначала мне показалось важным, что между Java и Go есть разница между реализацией Dynamic Dispatching, точнее в Go Dynamic Dispatching отсутствует. Примененное решение в текущей реализации Converter-a выглядет не только безобразно, но и нарушает несколько очень важных принципов в ОО проектировании. Тут я не шучу. Но вариант выгдядет вполне работающим. Далее я буду приводить код на Java, за ним следует автоматически сгенерированный код на Golang и комментарии по-необходимости. 1. Начал я конечно с самой популярной программы: "Hello World". Код:
Код:
Код:
Код:
Код:
Код:
последнем примере является amount() в классе Repeater. Без переписывания кода, я думаю, было бы невозможно вызвать его правильно. Код:
Код:
Всем большое спасибо. |
![]() |
![]() |
![]() |
#2 |
Регистрация: 14.03.2022
Сообщений: 9
|
![]()
Еще один вариант использования для автоматического перевода кода,
написанного на Java на Golang: Обработка Исключений. Следующий пример скорее всего будет про многопоточность. Пример на Java: Код:
Код:
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 14.03.2022
Сообщений: 9
|
![]()
Спасибо коллеге, указавшему более правильный выходной код для Java to Go Converter-а. Привожу.
Код:
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 14.03.2022
Сообщений: 9
|
![]()
Прошу прощения, не проверил полученное решение. :-)
Привожу код, который работает. Код:
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 14.03.2022
Сообщений: 9
|
![]()
Итак, многопоточность.
Нашел у Oracle простой пример с чудным названием BadThreads там: https://docs.oracle.com/javase/tutor...questions.html, еще более упростил его, обозвал пример новым простым именем One и дополнил Converter, что бы перевести код на Golang. В go нет похожей обработки для InterruptedException поэтому Converter не переводит обработку данного прерывания никак. Если у кого-либо есть относительно небольшой пример на Java - прошу поделиться. Код на Java: Код:
Код:
Если у кого-нибудь есть интересный пример - напишите, я подумаю как его решить. Только не могу обещать, что это будет быстро. :-) |
![]() |
![]() |
![]() |
#6 |
Регистрация: 14.03.2022
Сообщений: 9
|
![]()
В Go многопоточность одна из главных возможностей, соответcтвенно умение преобразования Java кода с использованием многопоточности в код на Go автоматически, который использует channels, очень важен.
Нашел у Oracle подходящий пример ProducerConsumerExample там: ProducerConsumerExample, где класс Drop - кандидат на преобразование в Go с использованием channels. Но, сейчас привожу промежуточный результат без channels. Еще, прочитал мнение, что преобразование Java кода где используются аннотации в runtime-е -невозможен. Надо исследовать проблему и попытаться понять возможно ли ее как-то решить. Прежде чем переводить проект из статуса "возможность достижения" в статус "прототип" надо посмотреть, что можно сделать с указанными проблемами применительно к аннотациям. Код на Java: Код:
Код:
The Go Playground Всем огромное спасибо. |
![]() |
![]() |
![]() |
#7 |
Регистрация: 14.03.2022
Сообщений: 9
|
![]()
Итак, channels.
Теперь converter может преобразовывать Java классы в Go channels где это возможно. Предыдущий пример содержит класс Drop, котрый соответствует критериям преобразования, что и показывает нижеприведенный код примера на Go. Соответственно, если converter "не найдет" класс подходящий для преобразования, многопоточность на Java будет преобразована в Go код без испоьзования перевода в channels. Код на Java: Код:
Код:
Теперь я возьму паузу, надо разобраться с советами, которые я получил. Всем большое спасибо. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
HEX переводим в Single | Yrok | Общие вопросы Delphi | 6 | 04.03.2009 17:00 |
язык Си, задача - переводим в 16-й код, старшие три бита интерпретируем как некое число n | drossel | Помощь студентам | 5 | 02.03.2008 17:24 |