Разработчики) | Проект GNU |
---|---|
Первый выпуск | 6 сентября 1998 г . [1] |
Окончательный релиз | 6.5 [2] / 26 октября 2018 г . |
Операционная система | Unix-подобный |
Тип | Компилятор |
Лицензия | GNU GPL |
Веб-сайт | gcc |
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]
Составитель 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 ); }