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

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

GCJ کد منبع جاوا را به بایت کد ماشین مجازی جاوا یا به کد ماشین برای تعدادی از معماری‌های پردازنده کامپایل می‌کند. همچنین می‌تواند فایل‌های کلاس و JARهای کامل را که حاوی بایت کد هستند به کد ماشین کامپایل کند.http://www.linuxjournal.com/article/4860http://freecode.com/projects/gcj

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

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

از سال ۲۰۱۵، هیچ پیشرفت جدیدی از GCJ اعلام نشده و محصول در حالت نگهداری بود.GCC به نظر می‌رسد برای غیرفعال کردن جاوا، جایگزینی با برو یا ADA 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 هستند:پرسش و پاسخ GCJ - پروژه گنو - بنیاد نرمافزار آزاد (FSF)
 " ما از CNI استفاده می‌کنیم، زیرا فکر می‌کنیم راه حل بهتری است، مخصوصا برای یک اجرای جاوا (Java implementation) چرا که جاوا فقط یک زبان برنامه‌نویسی دیگر است که می‌تواند با استفاده از تکنیکهای استاندارد کامپایل اجرا شود. با توجه به این مورد و این ایده که زبان‌هایی که با استفاده از Gcc اجرا می‌شوند باید در جایی که منطقی است سازگار باشند، نتیجه می‌شود که قرارداد فراخوانی جاوا (Java calling convention) باید همانند آنچه که برای زبان‌های دیگر، به ویژه C ++ استفاده می‌شود، عملی باشد، زیرا ما می‌توانیم جاوا را به عنوان یک زیر مجموعه از C++ در نظر بگیریم. CNI فقط مجموعه ای از توابع کمکی و قراردادها است که بر روی این ایده که C++ و جاوا قرارداد فراخوانی و طرح شی(object layout) * مشابه * دارند ساخته شده است؛ آنها به صورت باینری سازگار هستند. (این توضیحات یک ساده‌سازی است، اما به اندازه کافی نزدیک به اصل موضوع است) "
CNI به کلاسهای Java بستگی دارد که به عنوان کلاس‌های C ++ ظاهر می‌شوند. به عنوان مثال،مثال: از https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects- و- Classes  با توجه به کلاس جاوا زیر، public class Int
{
   public int i;
   public Int(int i) { this.i = i; }
   public static Int zero = new Int(0);
} می‌توان از کلاس استفاده کرد: #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 را مورد بحث قرار می‌دهد
رده:صفحات با ترجمه بازبینی‌نشده
رده:کامپایلرها و مفسرهای آزاد
رده:نرم‌افزارهای پروژه گنو