Ja.NET — Java для .NET

    image Как скрестить ужа с ежом? Эту, казалось бы, анекдотичную задачу довольно неплохо решили разработчики проекта Ja.NET. В результате их кропотливого труда на свет появилось уникальное творение — JVM, работающая под Microsoft .NET Framework. Разработчики заявляют о частичной совместимости с Java SE 1.5.

    На этом месте разработчики со стажем, поморщившись, вспомнят про полумертвенький J#, впоследствии практически заброшенный «родителями». Но Жанетт — в отличие от той поделки — девушка серьезная, и подход демонстрирует более вдумчивый. В ее родителях числятся именитые проекты: Eclipse JDT compiler, Mono's Cecil, и Apache Harmony. В отличие от своих аналогов, Ja.NET представляет из себя полноценную виртуальную ява-машину, работающую на основе .NET. Кроме того, компилятор генерирует родной код MSIL, что положительно сказалось на производительности.



    class HelloWorld {
      public static void saySomethingUsingJava(String message) {
        System.out.println(message);
      }
      public static void saySomethingUsingDotNet(String message) {
        System.Console.WriteLine(message);
      }
    }
    public class MyProgram {
      public static void main(String[] args) {
        HelloWorld.saySomethingUsingJava("A message via Java API's");
        HelloWorld.saySomethingUsingDotNet("A message via .NET framework API's");
      }
    }


    Как видно из примера кода, в программе можно использовать как библиотеку классов Java, так и BCL .NET.

    Подводя итог, можно сказать что проект насколько интересен, настолько же и амбициозен. Хочется надеяться что разработчики смогут выпустить полноценно работоспособный продукт. Может их в этом поддержит одна из «высоких сторон»?
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 55

      +2
      Вот бы написать конвертер .Net-байткода в Java-байткода…

      А то люблю шарп, но джава на большем кол-ве платформ есть…
      В том числе и на андроиде)
        +1
        посмотрите в сторону Grasshopper
          +1
          по-моему, не получится с его помощью писать под андроид на C#
            0
            под андроид вряд-ли, для «А то люблю шарп, но джава на большем кол-ве платформ есть…» вполне может сгодиться.
            хотя я на него смотрел много лет назад, еще когда они из альфы только вылупливались. тогда оно мне не пригодилось и до сих пор жесткой необходимости не возникало, за сим не колупал и не в курсе что оно может а что нет…
          0
          я тоже подумал что надо ждать обратного — .NET CLR, работающего поверх JVM
            0
            не получиться, JVM имеет более скупой набор команд.
              +2
              Возможно в обе стороны.
              1. Если говорить о трансляции байт-кода, то, например &mdash XMLVM.
              2. Если говорить о CLR на JVM, то — Grasshopper.
              3. Если говорить о JVM на CLR, то — IKVM.NET.


              Как раз писал статью про современную трансляцию. Кому-нибудь будет интересно, как оттранслировать из Java в Objective-C, Cocoa приложение под iPhone?
                0
                многим будет интересно, я думаю =)
                  0
                  Могу сказать, что мне точно будет интересно. Пишите!
              0
              Так для JVM есть языки поинтереснее и C# и Java. На ум сразу приходят Groovy и Scala. Правда первый слишком медленный, а второй слишком сложный=)
                0
                  Кстати, сейчас многие из сообщества Java разработчиков смотрят в сторону Clojure.
                А сообщество .NET разработчиков интересуется F#. Но и C# с Java развиваются и эволюционируют.
                  Главная цель, как сказал Эндерс Хэйлсбер (Anders Hejlsber) все нововведения призваны повысить производительность программистов.
              0
              Проет супер интеерсен, но ни Sun ни MS друг друга поддерживать не будут… Не те у них отношения ;) ИМХО
                0
                но хотелось бы помечтать… :-)
                0
                Учёные скрестили слона с ежом, ну так, чисто посмотреть, что из этого выйдет, и как будет происходить.

                Но на самом деле — выдающийся язык среди клонов на CLR. Прикольно.
                  0
                  Но с другой стороны — непонятно зачем. Ведь есть C# с очень похожим си-подобным синтаксисом. А очень многие opensource-библиотеки для Java портированы на .NET.
                    0
                    судя по блогам разработчиков — цель проста. запускать Java приложения (в идеале даже без перекомпиляции) на .NET
                      +2
                      Для запуска Java-приложений есть IKVM, статья о котором в Википедии появилась в 2005 году, а самому продукту уже лет пять, наверное…
                        +1
                        Ja.NET вроде как должна быть заметно быстрее.
                      0
                      > непонятно зачем

                      Есть множество мощных библиотек на Java, их перенос и поддержка под дотнет — сложный и затратный процесс, поэтому многие порты умирают в отсутствие добровольцев.
                      Пример — удачная библиотека FOP и не особенно удачный порт NFop.
                    0
                    всегда считал такие скрещивания опасными для конечной производительности продукта…
                    это разные языки и использовать их нужно там, где ими пользоваться… выгоднее и рациональнее…
                    а подобные эксперименты нужны для интереса, проб, и, возможно, проектирования (даже если это не цель, а только следствие) новых языков…
                      0
                      На самом деле эти две виртуальные машины довольно похожи. Где-то видел даже фразу о том что в них используются одни и те же алгоритмы сборки мусора. Кстати, .NET мог бы основываться на Java, но от этого пришлось уйти, в основном по причинам того что в MS хотели более тесной связи с найтивным кодом и COM.
                      Так что эти две технологии ближе чем кажется…
                        0
                        Кстати, .NET мог бы основываться на Java, но от этого пришлось уйти, в основном по причинам того что в MS хотели более тесной связи с найтивным кодом и COM.
                        Там было перетягивание каната: и Sun и Microsoft хотели иметь контроль над платформой. Боливар не выдержал двоих — и вот теперь мы имеем то, что имеем.
                          0
                          А могли бы и договориться — но тогда бы мы имели однополярный мир, который менее устойчив чем двухполярный :)
                            +2
                            Несмотря на похожие технологии у них сильно разные цели. Microsoft хотел платформу, которая бы «обернула» низкоуровневые технологии Windows, Sun — хотел переносимости. Эти две цели довольно сложно совместить в одном продукте.
                          –4
                          Они достаточно сильно отличаются. .Net использует JIT компиляцию, Java — интерпретацию.
                            +2
                            Ну да, конечно. Есть различные реализации JVM, в том числе с JIT, например, Sun HotSpot (выпущена в 1999 году).
                              +2
                              какую интерпретацию?! вы что, с ума сошли?
                              +1
                                Алгоритмы сборки мусора это не совсем то, что характеризует «схожесть» платформ. Многие алгоритмы реализованы уже для достаточно большого количества сред исполнения.
                                Однако, Вы правы обе платформы используют похожие алгоритмы сборки мусора. Этих самых алгоритмов, на самом деле, не так уж и много, вариаций алгоритмов, гораздо больше. Но есть некоторые «существенные» различия, например, реализация обобщений (generics).
                                Я сравнивал (и участвовал в реализации для Apache Harmony) алгоритмов сборки мусора для OpenJDK, Apache Harmony, Jikes RVM, CLR (по статьям исследователей и разработчиков алгоритмов сборки мусора для платформы) и проект Mono. Если это будет интересно некоторому количеству людей, то можно написать статью об этом.
                                0
                                Конечно интересно — пишите :)
                                  0
                                  Да, я бы с интересом почитал об этом.
                              0
                              Первая мысль после прочтения заголовка была: «На хрена козе баян?»
                              Прочитал и задумался.
                              А потом решил, что вполне можно учить один язык в сравнении с другим (:
                                +5
                                хм… Жаннет… красиво звучит :)
                                • НЛО прилетело и опубликовало эту надпись здесь
                                    +2
                                    для полноты картины, надо еще под этой JVM под .NET запустить, например, портированный на Java Parrot.
                                    +3
                                    > на свет появилось уникальное творение — JVM, работающая под Microsoft .NET Framework

                                    Прям так уж и уникальное. А как же IKVM.NET?
                                    en.wikipedia.org/wiki/IKVM
                                      0
                                      «Ja.NET uses the J# model. For the standard Java libraries, they are recompiling Apache Harmony source code directly into IL assemblies.»
                                        +1
                                        Я конечно не изучал тонкости отличия Ja.Net от IKVM, но вопрос. Разве в IKVM не используется тоже скомпилированный JDK(OpenJDK)? — IKVM.OpenJDK.ClassLibrary.dll.

                                        ЗЫЖ не хочу сказать, что проект Ja.Net ненужен, но просто статья написано, словно они первые. При это на IKVM.NET уже давно запускаются проекты уровня эклипс.
                                          0
                                          Используется. Но авторы Ja.Net, похоже, не любят GPL, потому ухватились за Harmony. Мой прогноз: всё заглохнет. Много желающих попользоваться «халявой», предоставляемой Apache License, мало желающих что-либо разрабатывать. Если бы они делали свою собственную платформу (a-la Android) — был бы шанс, а так… Ну много ли бужет желающих пыжится-пыжится — и всего лишь получить возможности OpenJDK если свободно доступен сам OpenJDK?
                                            0
                                            их основная работа сейчас — компилятор.
                                              0
                                              А это — вообще тупик. Пустая трата времени. Если вы посмотрите на GCJ (до версии 4.3), то обнаружите что компиляция по дорожке .java->.class->.o даёт почти ту же скорость что и прямая компиляция .java->.o. В версии 4.3 от «прямого пути» отказались вообще — вместо этого немного подправили имеющийся компилятор чтобы он сохранял чуть больше информации в .class файле.

                                              В общем: не стоит овчинка выделки. Кроме собственно языка Java над JVM надстроено много чело, так что делать хороший компилятор .class->CRL им всё равно придётся — иначе весь проект Ja.NET окажется мёртворождённым. А на два сложных проекта их вряд ли хватит.
                                                0
                                                но это — проблема разработчиков проекта :)
                                                я сейчас могу им помочь только пожеланием удачи :-)
                                                  –2
                                                  Нет — это проблема идиотов, которые с этим проектом свяжутся.

                                                  С того момента как они смогут запустить, скажем, Eclipse (ну или другой большой и сложный Java-проект) можно будет желать им удачи. До того — это всего лишь очередная амбициозная пустышка у создателей которой больше понтов, чем мозгов.
                                            0
                                            насколько я понял разницу (а я мог и ошибиться, скорее всего даже ошибся), IKVM — это только портированная под .NET ява-машина, интерпретирующая JVM-код. а Ja.NET — предлагает еще и компилятов из Java в MSIL (виртуальную машину для запуска native-Java они как раз еще не достроили). и потому Ja.NET — быстрее, но требует перекомпиляции. со временим они сделают и запуск NativeJava, и взаимодействие JVM — CLR, но со временем.
                                              +3
                                              IKVM — это только портированная под .NET ява-машина, интерпретирующая JVM-код
                                              Нифига подобного. Прямо на главной странице написано: Just-in-time compiles Java Byte Code to CIL.

                                              а Ja.NET — предлагает еще и компилятов из Java в MSIL (виртуальную машину для запуска native-Java они как раз еще не достроили).
                                              Вообще всё это напоминает потуги пары студентов: товарищи из Ja.NET схватились за самую прикольную, самую вкусную, самую опциональную часть проекта в первую очередь. Ну неинтересно им заниматься рутиной. Я бы понял если бы они сделали свой компилятор как дополнение к существующией платформе (тому же IKVM), но когда люди начинают делать торт с создания красивой розочки из крема, то возникает вопрос: а они вообще в своём уме?

                                              и потому Ja.NET — быстрее, но требует перекомпиляции
                                              Бенчмарки есть?

                                              со временим они сделают и запуск NativeJava, и взаимодействие JVM — CLR, но со временем.
                                              Отлично! Гениально! Грандиозно! Отличный способ угробить проект! 99% гарантия. Делать не то, что нужно пользователям вашего проекта, а то, что интересно вам — это типичная ошибка «студенческих проектов» из которых ничего никогда не вырастает. Сначала нужно сделать что-то, чем можно пользоваться, потом заниматься его улучшением. «Прямой» компилятор .java=>CLR вообще не является частью «базового комплекта»: загрузчик .class-файлов вам нужен всё равно (без этого куча вещей не будет работать), так зачем вам «прямой» компилятор до того как ваша платформа может быть реально использована?
                                                +1
                                                ну замечательно. вы высказались. раскритиковали все. кому от этого стало лучше кроме вас?
                                                никому.
                                                то что Ja.NET — явно еще на никакой стадии развития — видно невооруженным взглядом. применимость — тоже под большим вопросом.
                                                но ведь проект от этого не становится менее интересным для того чтобы с ним позанкомиться.

                                                а так — уж простите, складывается впечатление что вас прям щаз заставляют портировать весь Netbeans на Ja.NET, а вы приводите аргументы против. :-)
                                                  0
                                                  ну замечательно. вы высказались. раскритиковали все. кому от этого стало лучше кроме вас?
                                                  Всем кто интересуется запуском Java под .NET, очевидно.
                                                  то что Ja.NET — явно еще на никакой стадии развития — видно невооруженным взглядом. применимость — тоже под большим вопросом.
                                                  Именно. И зачем оно кому-то надо? Когда есть работающая альтернатива (про которую, кстати, авторы Ja.NET даже не упоминают — почему, интересно?).
                                                  но ведь проект от этого не становится менее интересным для того чтобы с ним позанкомиться.
                                                  Смотря для чего. Если вы хотите реально помочь людям у которых есть подобная же потребность — для вас есть IKVM. Для интеллектуальных упражнений лучше haskell или Erlang.
                                                  а так — уж простите, складывается впечатление что вас прям щаз заставляют портировать весь Netbeans на Ja.NET, а вы приводите аргументы против. :-)
                                                  А зачем оно мне есть шансов на то, что я там смогу запустить Eclipse (Netbeans не пользуюсь) в ближайшем будущем примерно нуль? Посмотрите на письмо Linus'а хотя бы. Видите разницу? Вместо Our vision is simple: Establish a community of interest, together with a set of projects, focused on delivering the tools and middleware required to leverage the enormous investments that exist today in Java software on the .NET platform. мы имеем I've currently ported bash(1.08) and gcc(1.40), and things seem to work.. Things seem to work ведёт к Linux'у, vision ведёт к HURD'у — что вы предпочитаете? Если вам уж так нечем заняться — займитесь лучше HURD'ом. Там цели ещё грандиознее, а шансов на успех ещё меньше.
                                        +2
                                        Давайте я помогу.
                                        «разработчики», «кропотливого», «заброшенный», «в отличие», «серьёзная», «именитые », «в отличие», «надеяться».
                                          0
                                          спасибо. просто заметка писалась глубоко ночью в состоянии полудремы. ща подправлю.
                                          +1
                                          Если бы портировали .NET окружение в Java, я бы ещё понял — это даст дотнету кросплатформенность.

                                          А какие могут быть причины для того, чтобы делать обратное действие?
                                            0
                                            «студенты» не любят java. они любят.НЕТ и потому сделали свой «студенческий проект» каким им захотелось
                                              +1
                                              По поводу кроссплатформенности могу порекомендовать Mono. Проект очень интенсивно развивается.
                                                0
                                                Mono всегда будет позади .NET'a, потому что только догоняет его по определению. Как сейчас, так и в будущем это отставание будет на несколько больших шагов. Mono отлично подходит если надо портировать что-то с Windows на Linux, но изначально выбирать обрезок в качестве платформы — абсурд.
                                                  0
                                                    Ваше утверждение не совсем верно. Например одно из нововведений, о которых говорил Anders Hejlsberg — компилятор как сервис (Compiler as Service) уже реализован в Mono и уже реализована REPL (read-eval-print-loop) консоль. Также Mono работает и на BSD и Mac OS X, причем есть Cocoa# для создания оригинальных (для Mac) интерфейсов.</P
                                                    Благодаря Mono есть такие приложения как: Tomboy, Banshee, Incollector. Mono очень активно развивается, и если Вы посмотрите на этот проект изнутри, то увидите, что это по-настоящему серьезный проект.
                                                    0
                                                    Основная суть Mono — это синхронность с .NET, чтобы как в Java «написал однажды, запускаешь везде».
                                                    В Java так и есть и было бы странно, если бы на Linux было одно множество функций, предоставляемых SDK, а на Windows — другое. Java никто не использовал бы в этом случае.

                                                    Будущее Mono мне видится не менее туманным, чем будущее Wine: как костыль при портировании сойдет, а реальных преимуществ при написании нового проекта перед той же Java — нет, даже наоборот.
                                                      0
                                                        Вы правы в том что, Mono следует и скорее всего будет следовать, курсом за CLR и будет догонять основную платформу.
                                                        Я всего лишь хотел сказать, что уже есть проекты написанные для Mono под Linux. Mono уже входит в стандартную поставку Ubuntu Linux, также как и проекты написанные для Mono, например, Tomboy.
                                                        Перспективным, также, на мой взгляд, является Moonlight — Silverlight от Mono team. Я активно слежу за развитием платформы CLR, но также и за развитием Mono. Это очень динамично развивающиеся проекты.
                                                        Будущее Mono стало чуть менее туманным после покупки Novell'ом основных разработчиков Mono — Ximian, затем и ещё чуть менее туманным после заключения договора между Novell и Microsoft.

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

                                            Самое читаемое