Google выпускает J2ObjC, open-source конвертер кода Java в Objective-C для iOS-приложений

    Google представили выпуск open-source проекта J2Objc, собственный конвертер из исходного кода на Java в Objective-C для приложений на iPhone/iPad.

    image

    J2ObjC делает возможным использование кода на Java в качестве части билда iOS-приложений, при этом дополнительной правки кода не потребуется. Цель данного проекта — позволить программистам писать часть, которая не касается UI (доступ к данным или внтуреннюю логику приложения) на Java и получать код, который можно было было бы использовать для Android, веб-приложений и iOS.

    J2ObjC — это не эмулятор Java; вместо этого он конвертирует классы Java в классы Objective-C, которые напрямую используют iOS Foundation Framework. Полностью поддерживается язык Java 6 и большинство из его runtime-опций, которые требуются клиент-серверным разработчикам, включая обработку ошибок, generic- и анонимные классы, потоки и отражения. Поддерживается трансляция тестов JUnit и их выполнение. J2ObjC может быть использован с большинством инструментов для билда приложений, в том числе Xcode и Make.

    За дальнейшими подробностями добро пожаловать по ссылке: http://google-opensource.blogspot.com
    Страница проекта: code.google.com/p/j2objc/ (спасибо sphinks за ссылку).
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 96
    • +16
      Тут гораздо больше волнует вопрос «А что не конвертируется?»
      • +3
        А мне интересно, как они решили проблему ручного управления памятью в ObjC при компилляции из Java-кода, в котором управления памятью нет вообще.
        • 0
          Они предлагают аж 3 варианта управления памятью: простой подсчет ссылок на объекты; сборщик мусора на базе libgc, концептуально близкий к Javа-вскому; нечто под названием APC (вроде как родной GC от Apple для iOS 5+).
          • 0
            ARC — не GC, это (почти) compile time технология (автоматическая расстановка вызовов retain/release/autorelease).
            Настоящий GC в OS X уже deprecated, в iOS его никогда не было.
            Ну и они сами пишут, что ARC должен стать основным методом у них.
            И как разруливать reain cycles тоже пишут (специальной аннотацией).
      • +9
        Очень круто! Думаю одной из целей может служить подталкивание разработчиков изначально писать приложение для Android а потом его легко портировать на iOS, а не наоборот, как сейчас делает большинство. Я буду очень рад, если это будет работать достойно.
        • +35
          GWT, теперь это — похоже Гуглу проще сделать конвертер из Java во что угодно, чем переучивать своих программистов :)
          • +3
            Я думаю дело не в программистах, а в том что постоянно поддерживать две ветки регулярно развиваемого кода намного дороже чем однажды написать конвертер и иногда его фиксить.
          • +8
            Будем ждать новостей:
            2068 год: Google сделал конвертер английского языка в objective-c.
            • +15
              Вообще непонятно. Конверторов английского языка в objective-c пруд пруди. Введите в гугле «objective-c программист».
              • НЛО прилетело и опубликовало эту надпись здесь
                • +19
                  london.isTheCapitalOf(greatBritain);
                  • +4
                    City london = GreatBritain.getInstance().getCapital();
                  • +1
                    2099-й год: Google сделал Java официальным и единственным языком планеты, конвертеры больше не нужны, дети первым словом говорят не «мама» или «папа», а System.out.println("Hello World");
                • +1
                  Офигенно! Вот это подарок от гугла, есть это будет хорошо работать
                  • +1
                    Я пробовал изучить objective-c понял что это не для меня, а теперь можно еще раз попробовать написать приложение под ios на яве и получить результат, надеюсь получится.
                    • –9
                      выучите regular expression и тогда сможете писать на objective-c :)
                      • +11
                        выучите regular expression и objective-c, тогда сможете писать на objective-c
                        • +25
                          и зачем-то будете знать regular expression
                          • +1
                            Будет парсить Obj-C код и конвертировать в Java :)
                            • 0
                              Грамматика Objective-C, если я не ошибаюсь, является контекстно-свободной, а регулярные грамматики являются ограниченным подмножеством контекстно-свободных — это значит, что нельзя правильно распарсить код Objective-C регулярными выражениями. Проще говоря, регулярки слишком примитивны и не могут осилить рекурсивные структуры языка программирования (выражения, например).
                    • +6
                      UI всё равно придётся на ObjC писать.
                      • +2
                        А это, кстати, в большом проценте приложений основной функционал, так что выигрыш будет сомнительный. Ну не верю я, что он переводит без косяков.
                        • +1
                          Ну да, эта штука сгодится разве что для написания кроссплатформенного Android/iOS протокольного движка для общения с сервером. Но его и без того многие на плюсах пишут.
                          • 0
                            Хмм, именно в клиент-сервере, мне кажется, играет роль не язык а библиотеки — а они в андроиде и айфоне очень разные.

                            А вот бизнес-логику какую-нибудь сложную, да, можно. Но, как вы правильно заметили, можно было и раньше — NDK на Андроиде, Objective-C++ на айфоне. Так что — не революция.
                            • 0
                              Я имел в виду такую систему: нижний слой взаимодействие (отправка и приём пакетов по сети) — native, слой обработки полученных пакетов и формирования исходящих — j2objc, выше — бизнес логика, которая, как Вы заметили, так же может быть на j2objc, а самый верх — GUI, опять же native.
                              • +1
                                Тогда согласен полностью.
                        • 0
                          тут встает вопрос поддержки jni если она есть, то станет возможным использование такиких библиотек как swt (во всяком случае для desktop приложений), кроме того, насколько я знаю привычки java community, скоро появятся кроссплатформенные обертки над gui для всех целевых платформ.
                      • +2
                        Круто… моя мотивация изучить Java возросла. :)
                        • –1
                          Отлично, авторитет Java растет.:)
                          • +9
                            Мне кажется, что авторитет рос, если бы сделали конвертер с Obj-C на Java. :)
                            • +1
                              Я бы не отказался. Думаю, не только я.
                              • +3
                                Если сделали с Java на Obj-C значит на Obj-C писать никто не хочет. А хотят на java, то есть авторитет java растет.
                                • +2
                                  тут вопрос не в хотелках, а в использовании имеющегося кода на java
                                  • 0
                                    Имеющийся код на obj-c? Сомневаюсь, что там есть нпаисали что-то полезное, чего ещё не написали на java.
                          • +11
                            Добавьте в ссылки страничку проекта: code.google.com/p/j2objc/
                            Ссылка на новость не так уж важна.
                            • +5
                              большое плохого кода с ондроеда, теперь и на iOS!
                              • –2
                                а generics будут работать?
                                • 0
                                  Вот странно, поидее минусовать должны первый коммент за несправедливый наезд на андроид, а минусуют коммент, кторый по делу.
                                • 0
                                  Хорошее слово — ондроед…
                                • 0
                                  Было бы круто если бы там появилась трансляция и под другие платформы. Windows Phone например
                                  • 0
                                    Я правильно понимаю, что учитывая наличие Visual J# Binary Converter Tool, ну чисто теоретически, можно писать ядро мобильного приложения на Java и под windows phone тоже?
                                    • 0
                                      Скорее всего нет. Поддержку J# уже давно прекратили. Утилита по ссылке поддерживает максимум .net 2.0, а для Windows Phone исспользуется свой рантайм.
                                      • 0
                                        А не в курсе, почему прекратили поддержку J#?
                                        • майкрософт проиграла суд
                                          • 0
                                            вы путаете MS JVM (http://en.wikipedia.org/wiki/Microsoft_Java_Virtual_Machine) и J# — последний прекратили разрабатывать поскольку он просто оказался никому не нужен особенно
                                          • 0
                                            Это у МС нужно спросить.
                                            Думаю спрос на J# был недостаточно хороший чтобы оправдать разработку.
                                            Плюс сильные ограничения в разработке: с одной стороны нужно поддерживать синтаксис Java, который разрабатывался на тот момент Sun и нужно добавлять новые функции которые появлялись в .net, C#, VB.NET. Отойдёшь от совместимости, это будет уже не Java, сохранишь совместимость, получим многословность современной Java, тогда смысла в такой разработке не много.
                                          • 0
                                            Свой? .NET Compact, или как его… Тот же, как и на Windows Mobile. Разве что версии более новой…
                                        • 0
                                          А можно задать вопрос? Java легко изучать, например по сравнению с Javascript, PHP или C++?
                                          • +2
                                            знания языка не наделяют способностью писать код, а вообще выучить можно за 3 дня. Ваш кэп.
                                            • +1
                                              проще, чем C++, сложнее, чем JS или PHP
                                            • +5
                                              Ну вот я бы сравнил изучения Java с другими языками так:

                                              JavaScript — Структура языка сложнее и запутаннее чем в Java. Надо потратить много времени, прежде чем постигнешь дао языка со всеми его кложерами и прочими мудростями. Если писать простейшие скрипты — JavaScript крайне прост, но для сложных приложений уже нет.

                                              PHP — Очень легок для изучения и написания первых простых сткриптов.

                                              С++ — Относительно сложный язык. Надо изучить много понятий, касающихся указателей, работу с памятью и т.п. Без этого на С++ вы ничего не сделаете. Джаву можно в чем то сравнить с упрощенным C++ из которого убрали заумные и путанные вещи. Но это очень грубо.

                                              Но чтобы стать профессиональным программистом на любом из этих языков и писать сложный и хороший код — в любом случае надо потратить много времени. Как и везде
                                              • –5
                                                ИМХО, сложность изучения такая:
                                                Javascript (самый простой в изучении),
                                                Java
                                                PHP
                                                C++ (самый сложный)

                                                А возможно изучать Java еще легче
                                                • 0
                                                  очень любопытно, как PHP, как язык, оказался сложнее Javascript и даже Java.
                                                  • –1
                                                    ИМХО, Javascript в плане легкости изучения может обойти даже паскаль и стать номером 1. Частичто это достигается за счет динамической типизации, ну и еще пары вещей. Хотелось бы увидеть язык, который изучить еще проще.

                                                    Опять же ИМХО, изучние Java легче изучения PHP, т.к. джава «логичнее» что-ли. Меньше хаоса. Достаточно понять несколько базовых принципов и можно писать слжные вещи.
                                                    • +2
                                                      IMHO, PHP изначально процедурный язык, соответсвенно, сама парадигма проще (именно поэтому с нее и начинают вместе с паскалем). Думаю, что куча концепций, вроде колбеков и асинхронности в Javascript, дженериков в Java и т.п. намного сложнее всего, что есть в PHP. Да думаю, даже синтаксис проще в PHP воспринимается. Судите сами, он ведь не зря самый популярный.
                                                      • 0
                                                        > он ведь не зря самый популярный.
                                                        Контраргумент засчитан.
                                                  • 0
                                                    если на javascript писать onclick=«window.location='www.google.com'», то да, пхп и ява сложнее)
                                                    • –1
                                                      Я знаю и то и то. Изучать Javascript легче чем изучать Java. Привидите примеры обратного.
                                                      • –1
                                                        Что значит изучать? Если разобраться с синтаксисом языка, то в джава скрипте есть много всяких нестандартных конструкций, всякие _, $ и прочие. Я вот писал что то на нем когда-то давно, теперь сложные Ajax скрипты мне трудно читать. Соответственно сам синтаксис языка мне кажется одинаковый по сложности.

                                                        В плане библиотек — тут тоже вполне сравнимо, просто у джавы областей применения больше, соответственно сама область ее применения шире и библиотек для стандартного набора надо больше изучить. Зато для изучения джаваскрипта неплохо бы разобраться в DOM модели, что усложняет изучение javascript как просто языка и требует знания CSS\HTML и прочего.

                                                        Еще сильно осложняет тот факт, что джава скрипт — язык прототипный (вроде так говорится), а это требует четкого понимания, как работает программа и как изменяются свойства и методы обьектов на протяжении всей работы.

                                                        Я это все пишу, чтобы аргументировать свою мысль.

                                                        Если изучать — имеется в виду «начать писать простые программы», то вы правы. Но если изучать — значит серьезно разобраться и быть в состоянии делать сложные штуки, то я бы поставил Джаву и джаваскрипт на одну ступень.
                                                        • +3
                                                          Вы уверены, что " всякие _, $ и прочие" это часть «синтаксиса языка»?
                                                • 0
                                                  Слегка разочарую восторженные крики про то, что можно всё писать теперь на Java. Цитата с сайта проекта:

                                                  This tool enables Java code to be part of an iOS application's build, as no editing of the generated files is necessary. The goal is to write an app's non-UI code (such as data access, or application logic) in Java, which is then shared by web apps (using GWT), Android apps, and iOS apps.


                                                  Из раздела What J2ObjC isn't
                                                  «iOS UI code needs to be written in Objective-C or Objective-C++ using Apple's iOS SDK».


                                                  Собственно, писать на Obj-C всё равно придётся. Тем более, что в типичном приложении, по моему опыту, с UI надо взаимодействовать очено часто.
                                                  • 0
                                                    А если допилят?
                                                    • 0
                                                      сомнительно. Objective C все же немного динамический язык (можно вызвать метод просто по строковому имени, например), и Cocoa этим активно пользуется.
                                                      • и в чем проблема с вызовом метода по строковому имени?
                                                        • 0
                                                          ну если они придумают свою языковую конструкцию для Java, позволяющую это делать без плясок с рефлексией
                                                          • в посте сказано что рефлексия поддерживается, почему бы ее не использовать?
                                                            • 0
                                                              ну ок, многословно просто будет.
                                                              А какой-нибудь CoreData-класс как будет на Java выглядеть?
                                                              • я, честно говоря, даже в курсе что это такое:)
                                                                • 0
                                                                  доступ к бд через классы. сами классы по сути ничего не содержат, а динамически трансформируют запросы в чтение/запись в бд
                                                                  • 0
                                                                    не столько доступ к БД, сколько object graph management.
                                                                    Да, фишка как раз в том, что обращения к полям этих классов налету превращается в вызов методов valueForKey: и setValue:ForKey:, вместо key подставляется как раз имя поля.
                                                      • 0
                                                        А если нет?
                                                        Чего гадать-то? Говорим о том, что есть на данный момент, а не о том, что может будет, а может нет.
                                                      • 0
                                                        интересно что подразумевается под «UI code». Как оно будет дружить с DataCore и сетевым стеком.
                                                        Пока видится одно применение — написание Model, только кода там очень много
                                                        • 0
                                                          Да вполне обычные вещи для UI, которые делаются кодом. Например, у вас таблица с кастомными ячейками, где есть, например, аватарка пользователя, логин и несколько кнопок в графическим оформлением. И таких ячеек может быть от 1 до N штук в этой таблице.
                                                          Соответственно вы пишете эту ячейку кодом, с добавлением всяких в неё штук через [cell addSubview:view];

                                                        • 0
                                                          Xamarin.com в данном случае впереди. Он позволяет и логику и GUI писать на C# для iOS и Android. Но, к сожалению, API GUI не совпадают. А GUI — это 80% всей апликации. Тем не менее, иметь подобный конвертер — полезная вещь.
                                                          • 0
                                                            Так же на сайте написано, что можно Obj-C код вставлять (так же как это в GWT с JavaScript сделано), так что если работа с UI сводится к вызову naive методов, то не вижу никаких проблем.
                                                            • 0
                                                              Я не писал про то, что будут проблемы, перечитайте комментарий.
                                                          • 0
                                                            Суть в том, чтобы писать общую клиент-серверную логику на Java, а интерфейсы для клиентов нативные.
                                                            В случае наличия этой общей логики — это правильный подход.
                                                            Для меня это значит то что я смогу нормально портировать bombermine на iOS.
                                                            • 0
                                                              Обязательно напишите пост о портировании через J2ObjC. Если, конечно, получится портировать :)
                                                            • +3
                                                              2 года назад писал игрушку для iPhone на Java. Конвертировал с помощью xmlvm. Правда, xmlvm предоставлял платформозависимый UI тулкит, так что интерфейс тоже был написан на Java.
                                                              • +3
                                                                2050-ый год, ios жив, все пишут под него на Бранче, который конвертится в Квазар, который конвертится в Борг, который конвертится в Марч, который соответственно конвертится в Java, которая конвертится в ObjectC. А что, мощности современного 100-ядерного компьютера в 2.4 Терагерц и с 8 Терабайтов озу вполне хватает.
                                                                • +2
                                                                  2050-ый год, apple берёт 3000$ за аккаунт разработчика и ВСЕ возможные приложения пишет сама.
                                                                  • +1
                                                                    что только люди ни делают, чтоб не изучать ObjC да.
                                                                    • +2
                                                                      Почему все в топике так не любят ObjC? Нормальный язык, на мой взгляд, на нем мне нравится писать гораздо больше, чем на Яве.
                                                                      OS X и iOS как платформы недолюбливаю, неудобны для меня, но ObjC вполне себе приятный.
                                                                      • 0
                                                                        Язык а) не типобезопасен и б) nil в нем ведет себя особенно (до поры до времени: если передать его в какой-нибудь stringByAppendingString: — все пропало). Иногда это плюсы, иногда — минусы. Ну это лично мое мнение, конечно.
                                                                  • 0
                                                                    Я правильно понял что конвертироваться будет именно из Java кода, а не из bytecode?
                                                                    • 0
                                                                      Да, это source-to-source compiler
                                                                      • 0
                                                                        Жаль. Ни скалой попользоваться не скомпилироваными библиотеками.
                                                                        • 0
                                                                          Выше уже давали ссылку — xmlvm.org, которая как раз из байткода транслирует.
                                                                          • 0
                                                                            А декомпилировать джаву когда-то было проблемой?
                                                                            • 0
                                                                              Ну у меня часто байткод декомпилируется с ошибками.
                                                                              К тому же это все равно не позволяет работать со scala и другими jvm языками.
                                                                      • +2
                                                                        Так вот почему iOS приложения от гугла такие, хорошие.
                                                                        • 0
                                                                          Вот так, с помощью нехитрых приспособлений буханку белого (или черного) хлеба можно превратить в троллейбус… но зачем?

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