Разработчик (и) | Проект GNU |
---|---|
Первоначальный выпуск | 6 сентября 1998 г.; 22 года назад (1998-09-06) |
Окончательный выпуск | 6.5 / 26 октября 2018 г.; 23 месяца назад (26.10.2018) |
Операционная система | Unix-подобная |
Тип | Компилятор |
Лицензия | GNU GPL |
Веб-сайт | gcc. gnu.org |
Компилятор GNU для Java (GCJ ) - это бесплатный компилятор для Язык программирования Java. Он был частью Коллекции компиляторов GNU более десяти лет, но по состоянию на 2017 год он больше не поддерживается и не будет частью будущих выпусков.
GCJ компилирует исходный код Java От до виртуальной машины Java байт-код или до машинного кода для ряда архитектур ЦП. Он также мог скомпилировать файлы классов и целые JAR, содержащие байт-код, в машинный код.
Исходный источник библиотек времени выполнения GCJ взят из GNU Classpath, но есть разница в коде между библиотеками libgcj
. GCJ 4.3 использует Eclipse Compiler for Java в качестве интерфейса.
В 2007 году была проделана большая работа по реализации поддержки двух графических API Java в GNU Classpath : AWT и Swing. Поддержка программного обеспечения для AWT все еще находится в разработке. «Как только поддержка AWT заработает, можно рассмотреть возможность поддержки Swing. Существует по крайней мере одна частичная реализация бесплатного программного обеспечения Swing, которая может быть использована». GNU CLASSPATH так и не был завершен даже до статуса Java 1.2 и теперь, похоже, полностью заброшен.
По состоянию на 2015 год от GCJ не объявлялось о новых разработках, и продукт находился в режиме обслуживания, при этом разработка набора инструментов Java с открытым исходным кодом в основном происходила в рамках OpenJDK. GCJ был удален из GCC trunk 30 сентября 2016 года. Объявление о его удалении было сделано с выпуском GCC 7.1, который его не содержит. GCJ остается частью GCC 6.
Функция компиляции в GCJ должна иметь более быстрое время запуска, чем эквивалентный байт-код, запускаемый в JVM при компиляции кода Java в машинный код.
Скомпилированный собственный интерфейс (CNI ), ранее называвшийся «Собственный интерфейс Cygnus», является программная среда для GCJ, которая позволяет Java-коду вызывать и вызывать собственными приложениями (программами, специфичными для платформы оборудования и операционной системы) и библиотеками, написанными на C ++.
CNI очень похож на структуру JNI (Java Native Interface), которая входит в стандартную комплектацию различных виртуальных машин Java.
Авторы CNI заявляют о различных преимуществах перед JNI:
Мы используем CNI, потому что думаем, что это лучшее решение, особенно для реализации Java, основанной на идее, что Java - это просто еще один язык программирования, который можно использовать. реализован с использованием стандартных методов компиляции. Учитывая это, а также идею о том, что языки, реализованные с использованием Gcc, должны быть совместимы там, где это имеет смысл, из этого следует, что соглашение о вызовах Java должно быть максимально похоже на то, что используется для других языков, особенно C ++, поскольку мы можем рассматривать Java как подмножество C ++. CNI - это просто набор вспомогательных функций и соглашений, построенных на идее, что C ++ и Java имеют * одинаковые * соглашения о вызовах и структуру объекта; они бинарно совместимы. (Это упрощение, но достаточно близкое.)
CNI зависит от классов Java, появляющихся как классы C ++. Например, для Java-класса
public class Int {public int i; общедоступный Int (int я) {this.i = я; } public static Int zero = new Int (0); }
можно использовать класс следующим образом:
#include#include Int * mult (Int * p, int k) {if (k == 0) return Int :: zero; // Доступ к статическому члену. вернуть новый Int (p->i * k); }
.