Компилятор GNU для Java


Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

GNU Compiler для Java ( GCJ ) является свободным компилятор для языка программирования Java . Он был частью коллекции компиляторов GNU более десяти лет, но по состоянию на 2017 год он больше не поддерживается и не будет частью будущих выпусков. [3] [4]

GCJ компилирует Java исходный код на Java Virtual Machine байткод или машинный код для ряда процессорных архитектур . Он также может компилировать файлы классов и целые JAR- файлы , содержащие байт-код, в машинный код. [5] [6]

История

Исходный источник библиотек времени выполнения GCJ взят из проекта GNU Classpath , но между libgcjбиблиотеками есть разница в коде . GCJ 4.3 использует компилятор Eclipse для Java в качестве интерфейса. [7]

В 2007 году была проделана большая работа по реализации поддержки двух графических API Java в GNU Classpath : AWT и Swing . Программная поддержка AWT все еще находится в разработке. «Как только поддержка AWT заработает, можно будет рассмотреть возможность поддержки Swing. Существует по крайней мере одна частичная реализация Swing в свободном ПО, которая может быть использована». [8] GNU CLASSPATH так и не был завершен даже до статуса Java 1.2 и теперь, похоже, полностью заброшен.

По состоянию на 2015 год от GCJ не объявлялось о новых разработках, и продукт находился в режиме обслуживания , при этом разработка набора инструментов Java с открытым исходным кодом в основном происходила в OpenJDK . [9] GCJ был удален из магистрали GCC 30 сентября 2016 года. [10] [11] Объявление о его удалении было сделано с выпуском GCC 7.1, который его не содержит. [12] GCJ остается частью GCC 6.

Представление

Функция компиляции в GCJ должна иметь более быстрое время запуска, чем эквивалентный байт-код, запускаемый в JVM при компиляции кода Java в машинный код. [13]

Скомпилированный собственный интерфейс (CNI)

Составитель Native Interface ( CNI ), которая ранее назывался «Cygnus Native Interface», является основой программного обеспечения для GCJ , что позволяет Java - код для вызова , и будет называется по, нативными приложениями (специальные программы для аппаратной и операционной системы , платформы) и библиотеки, написанные на C ++ .

CNI очень похож на фреймворк JNI (Java Native Interface), который входит в стандартную комплектацию различных виртуальных машин Java .

Сравнение использования языка

Авторы CNI заявляют о различных преимуществах перед JNI: [14]

Мы используем CNI, потому что считаем, что это лучшее решение, особенно для реализации Java, основанной на идее, что Java - это просто еще один язык программирования, который может быть реализован с использованием стандартных методов компиляции. Учитывая это, а также идею о том, что языки, реализованные с использованием Gcc, должны быть совместимы там, где это имеет смысл, из этого следует, что соглашение о вызовах Java должно быть максимально похоже на то, что используется для других языков, особенно C ++, поскольку мы можем рассматривать Java как подмножество C ++. CNI - это просто набор вспомогательных функций и соглашений, основанных на идее, что C ++ и Java имеют * одинаковые * соглашения о вызовах и структуру объекта; они бинарно совместимы. (Это упрощение, но достаточно близкое.)

CNI зависит от классов Java, представленных как классы C ++. Например, [15] для класса Java,

публичный  класс  Int {  публичный  int  i ;  public  Int ( int  я )  {  это . я  =  я ;  }  общедоступный  статический  Int  ноль  =  новый  Int ( 0 ); }

можно использовать класс таким образом:

#include  <gcj / cni.h>#include  <Int>Int  * mult ( Int  * p ,  int  k ) {  если  ( k  ==  0 )  return  Int :: zero ;  // Доступ к статическому члену.  вернуть  новый  Int ( p -> i  *  k ); }

Смотрите также

  • Excelsior JET (компилятор собственного кода Java Excelsior)
  • Чай со льдом
  • Каффе
  • SableVM
  • JamVM
  • Гармония Апачей
  • Jikes
  • GraalVM - функция Native Image в GraalVM - это передовая технология компиляции, которая создает исполняемые двоичные файлы файлов классов.
  • Компиляторы виртуальных машин C в Java
  • Бесплатные реализации Java
  • Kotlin - Kotlin / Native - это технология для компиляции Kotlin в собственные двоичные файлы, которые работают без какой-либо JVM. Он включает бэкэнд на основе LLVM для компилятора Kotlin и встроенную реализацию библиотеки времени выполнения Kotlin.

использованная литература

  1. ^ Энтони Грин, Cygnus Solutions. «Объявление GCJ» .
  2. ^ «Выпуски GCC - Проект GNU - Фонд свободного программного обеспечения (FSF)» .
  3. ^ "Архивная копия" . Архивировано из оригинала на 2007-05-09 . Проверено 22 апреля 2010 .CS1 maint: заархивированная копия как заголовок ( ссылка )
  4. ^ Кэмпбелл, Билл (2013). Введение в построение компиляторов в мире Java . CRC Press Taylor & Francis Group. ISBN 978-1-4398-6088-5. Проверено 6 февраля 2014 .
  5. ^ https://www.linuxjournal.com/article/4860
  6. ^ http://freecode.com/projects/gcj
  7. ^ "gcj для использования компилятора Eclipse в качестве интерфейса" . 2007-01-08. Архивировано из оригинала на 2007-05-09 . Проверено 20 мая 2007 .
  8. ^ Часто задаваемые вопросы GCJ
  9. ^ GCC пытается отключить Java, заменить Go или ADA
  10. Эндрю Хейли (30 сентября 2016 г.). «[gcc] Revision 240661» .
  11. ^ Tromey, Том (2 октября 2016). «Удаление gcj» . Скалы безумия . Проверено 3 октября 2016 года .
  12. ^ «Серия выпусков GCC 7: изменения, новые функции и исправления» . Проверено 9 мая 2017 года .
  13. ^ «GCJ: Статический компилятор Java GNU» (PDF) . Архивировано из оригинального (PDF) 07.06.2011 . Проверено 2 августа 2009 .
  14. ^ Часто задаваемые вопросы GCJ - Проект GNU - Фонд свободного программного обеспечения (FSF)
  15. ^ Пример взят из: https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects-and-Classes. Архивировано 20 октября 2016 г. на Wayback Machine.

внешние ссылки

  • «Официальный сайт» . GCC . GNU. 30 мар 2007 Архивировано из оригинала 9 мая 2007 года.
  • "GCJ Maual" . Архивировано из оригинального 22 августа 2016 года.
  • «О ЦНИ» . Руководство GCJ . Архивировано из оригинального 28 июля 2016 года.
  • Вилаард, Марк (6 апреля 2005 г.). «GCJ - прошлое, настоящее и будущее» . LWN. Архивировано 2 августа 2019 года.
Получено с https://en.wikipedia.org/w/index.php?title=GNU_Compiler_for_Java&oldid=1006109774#Compiled_Native_Interface_(CNI) "