GNU Compiler для Java ( GCJ ) является свободным компилятор для языка программирования Java . Он был частью коллекции компиляторов GNU более десяти лет, но по состоянию на 2017 год он больше не поддерживается и не будет частью будущих выпусков. [3] [4]
Разработчики) | Проект GNU |
---|---|
Первый выпуск | 6 сентября 1998 г . [1] |
Окончательный релиз | 6.5 [2] / 26 октября 2018 г . |
Операционная система | Unix-подобный |
Тип | Компилятор |
Лицензия | GNU GPL |
Веб-сайт | gcc |
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 я ) { это . я = я ; } public static Int zero = new Int ( 0 ); }
можно использовать класс таким образом:
#include #include Int * mult ( Int * p , int k ) { если ( k == 0 ) return Int :: zero ; // Доступ к статическому члену. вернуть новый Int ( p -> i * k ); }
Смотрите также
- Excelsior JET (компилятор собственного кода Java Excelsior)
- Чай со льдом
- Каффе
- SableVM
- JamVM
- Гармония Апачей
- Jikes
- GraalVM - функциональность собственного образа GraalVM - это передовая технология компиляции, которая создает исполняемые двоичные файлы файлов классов.
- Компиляторы виртуальных машин C в Java
- Бесплатные реализации Java
- Kotlin - Kotlin / Native - это технология компиляции Kotlin в собственные двоичные файлы, которые работают без какой-либо JVM. Он включает бэкэнд на основе LLVM для компилятора Kotlin и встроенную реализацию библиотеки времени выполнения Kotlin.
Рекомендации
- ^ Энтони Грин, Cygnus Solutions. «Объявление GCJ» .
- ^ «Выпуски GCC - Проект GNU - Фонд свободного программного обеспечения (FSF)» .
- ^ «Архивная копия» . Архивировано из оригинала на 2007-05-09 . Проверено 22 апреля 2010 .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ Кэмпбелл, Билл (2013). Введение в построение компиляторов в мире Java . CRC Press Taylor & Francis Group. ISBN 978-1-4398-6088-5. Проверено 6 февраля 2014 .
- ^ https://www.linuxjournal.com/article/4860
- ^ http://freecode.com/projects/gcj
- ^ «gcj для использования компилятора Eclipse в качестве интерфейса» . 2007-01-08. Архивировано из оригинала на 2007-05-09 . Проверено 20 мая 2007 .
- ^ Часто задаваемые вопросы GCJ
- ^ GCC пытается отключить Java, заменить Go или ADA
- ^ Эндрю Хейли (30 сентября 2016 г.). «[gcc] Revision 240661» .
- ^ Тромей, Том (2 октября 2016 г.). «Удаление gcj» . Скалы безумия . Проверено 3 октября 2016 года .
- ^ «Серия выпусков GCC 7: изменения, новые функции и исправления» . Проверено 9 мая 2017 года .
- ^ «GCJ: Статический компилятор Java GNU» (PDF) . Архивировано из оригинального (PDF) 07.06.2011 . Проверено 2 августа 2009 .
- ^ Часто задаваемые вопросы GCJ - Проект GNU - Фонд свободного программного обеспечения (FSF)
- ^ Пример взят из: 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 года.