کامپایلر گنو برای جاوا

**کامپایلر گنو برای جاوا** (به انگلیسی: GNU) (**GCJ**) یک کامپایلر رایگان برای زبان برنامه‌نویسی جاوا است. برای بیش از ده سال بخشی از مجموعه کامپایلر گنو بود اما از سال ۲۰۱۷ دیگر حفظ نخواهد شد و بخشی از انتشارات آینده نخواهد بود.

GCJ کد منبع جاوا را به بایت کد ماشین مجازی جاوا یا به کد ماشین برای تعدادی از معماری‌های پردازنده کامپایل می‌کند. همچنین می‌تواند فایل‌های کلاس و JARهای کامل را که حاوی بایت کد هستند به کد ماشین کامپایل کند.

## تاریخچه
منبع اصلی کتابخانه‌های زمان اجرای GCJ از پروژه GNU Classpath است، اما بین کتابخانه‌های `libgcj` تفاوت کدی وجود دارد. GCJ 4.3 از کامپایلر Eclipse برای جاوا به عنوان یک جلو-عقب (به انگلیسی: back-end) استفاده می‌کند.

در سال ۲۰۰۷، برای پیاده‌سازی پشتیبانی برای دو API گرافیکی در جاوا Classpath GNU: AWT و Swing، کارهای زیادی انجام شد. پشتیبانی نرم‌افزاری برای AWT هنوز در حال توسعه است. "زمانی که پشتیبانی از AWT کار بکند، پشتیبانی از Swing می‌تواند مورد توجه قرار گیرد. حداقل یک پیاده سازی نرم افزاری جزئی رایگان از Swing وجود دارد که ممکن است قابل استفاده باشد. ". GNU CLASSPATH حتی به وضعیت جاوا ۱٫۲ هم تکمیل نشد و اکنون به نظر می‌رسد به‌طور کامل رها شده است.

از سال ۲۰۱۵، هیچ پیشرفت جدیدی از GCJ اعلام نشده و محصول در حالت نگهداری بود. GCJ در تاریخ ۳۰ سپتامبر ۲۰۱۶ از تنه GCC حذف شد. اطلاعیه حذف آن همزمان با انتشار GCC 7.1، که شامل آن نیست، داده شد. GCJ به عنوان بخشی از GCC 6 باقی مانده است.

## کارایی
تابع کامپایل در GCJ هنگام کامپایل کد جاوا به کد ماشین باید زمان شروع سریعتری نسبت به بایت کد معادل اجرا شده در JVM داشته باشد

## رابط بومی کامپایل شده (CNI)
**رابط بومی کامپایل شده (به انگلیسی: Compiled Native Interface)** **،** که قبلا "رابط بومی سیگنوس (به انگلیسی: Cygnus Native Interface)" نام گذاری شده بود، یک فریم ورک نرم‌افزاری (به انگلیسی: software framework) برای GCJ است که اجازه می‌دهد تا کد جاوا برنامه‌های بومی و کتابخامه‌های زبان ++C را فراخوانی کند یا توسط آنها فراخوانده شود. برای پاسخ، می‌شود و به نام‌های، برنامه‌های بومی (برنامه‌های خاص به یک پلت فرم سخت‌افزار و سیستم عامل) و کتابخانه‌ها در C ++ نوشته شده است.

CNI بسیار شبیه فریم ورک JNI (رابط بومی جاوا) است که به عنوان یک استاندارد با ماشین‌های مجازی جاوا می‌آید.

### مقایسه استفاده از زبان
نویسندگان CNI مدعی مزایای زیادی نسبت به JNI هستند:

CNI به کلاسهای Java بستگی دارد که به عنوان کلاس‌های C ++ ظاهر می‌شوند. به عنوان مثال، با توجه به کلاس جاوا زیر، 
```java
public class Int
{
   public int i;
   public Int(int i) { this.i = i; }
   public static Int zero = new Int(0);
}
```
 می‌توان از کلاس استفاده کرد: 
```cpp
#include <gcj/cni.h>
#include <Int>

Int *mult(Int *p, int k)
{
  if (k == 0)
    return Int::zero;  // Static member access.
  return new Int(p->i * k);
}
```


## جستارهای وابسته

* مترجم گنو برای جاوا (GIJ)
* Excelsior JET (کامپایلر کد جاوا اسکریپتی Excelsior)
* IcedTea
* کافه
* SableVM
* a M آپاچی هماهنگی
* جیکس
* کامپایلر مجازی ماشین مجازی Java
* پیاده‌سازی جاوا رایگان
* Kotlin - Kotlin / Native یک فن آوری برای کامپایل کردن کوتلین به باینری‌های بومی است که بدون JVM اجرا می‌شوند. این شامل پسزمینه مبتنی بر LLVM برای کامپایلر کوتلین و اجرای بومی کتابخانه زمان اجرا Kotlin است.

## منابع

## پیوند به بیرون
* صفحه اصلی GCJ
* راهنمای GCJ
* درباره CNI بخش راهنمای GCJ
* LWN: GCJ - گذشته، حال و آینده - مقاله برخی از تاریخچه GCJ را مورد بحث قرار می‌دهد
رده:صفحات با ترجمه بازبینی‌نشده
رده:کامپایلرها و مفسرهای آزاد
رده:نرم‌افزارهای پروژه گنو