کامپایلر گنو برای جاوا
کامپایلر گنو برای جاوا (به انگلیسی: GNU) (GCJ) یک کامپایلر رایگان برای زبان برنامهنویسی جاوا است. برای بیش از ده سال بخشی از مجموعه کامپایلر گنو بود اما از سال ۲۰۱۷ دیگر حفظ نخواهد شد و بخشی از انتشارات آینده نخواهد بود.[3][4]
توسعهدهنده(ها) | The GNU Project |
---|---|
انتشار ابتدایی | ۶ سپتامبر ۱۹۹۸[1] |
انتشار نهایی | |
سیستمعامل | Unix-like |
گونه | Compiler |
پروانه | GNU GPL |
وبگاه |
GCJ کد منبع جاوا را به بایت کد ماشین مجازی جاوا یا به کد ماشین برای تعدادی از معماریهای پردازنده کامپایل میکند. همچنین میتواند فایلهای کلاس و JARهای کامل را که حاوی بایت کد هستند به کد ماشین کامپایل کند.[5][6]
تاریخچه
منبع اصلی کتابخانههای زمان اجرای GCJ از پروژه GNU Classpath است، اما بین کتابخانههای libgcj
تفاوت کدی وجود دارد. GCJ 4.3 از کامپایلر Eclipse برای جاوا به عنوان یک جلو-عقب (به انگلیسی: back-end) استفاده میکند.[7]
در سال ۲۰۰۷، برای پیادهسازی پشتیبانی برای دو API گرافیکی در جاوا Classpath GNU: AWT و Swing، کارهای زیادی انجام شد. پشتیبانی نرمافزاری برای AWT هنوز در حال توسعه است. "زمانی که پشتیبانی از AWT کار بکند، پشتیبانی از Swing میتواند مورد توجه قرار گیرد. حداقل یک پیاده سازی نرم افزاری جزئی رایگان از Swing وجود دارد که ممکن است قابل استفاده باشد. ".[8] GNU CLASSPATH حتی به وضعیت جاوا ۱٫۲ هم تکمیل نشد و اکنون به نظر میرسد بهطور کامل رها شدهاست.
از سال ۲۰۱۵، هیچ پیشرفت جدیدی از GCJ اعلام نشده و محصول در حالت نگهداری بود.[9] GCJ در تاریخ ۳۰ سپتامبر ۲۰۱۶ از تنه GCC حذف شد.[10][11] اطلاعیه حذف آن همزمان با انتشار GCC 7.1، که شامل آن نیست، داده شد.[12] GCJ به عنوان بخشی از GCC 6 باقی ماندهاست.
کارایی
تابع کامپایل در GCJ هنگام کامپایل کد جاوا به کد ماشین باید زمان شروع سریعتری نسبت به بایت کد معادل اجرا شده در JVM داشته باشد[13]
رابط بومی کامپایل شده (CNI)
رابط بومی کامپایل شده (به انگلیسی: Compiled Native Interface) ، که قبلا "رابط بومی سیگنوس (به انگلیسی: Cygnus Native Interface)" نام گذاری شده بود، یک فریم ورک نرمافزاری (به انگلیسی: software framework) برای GCJ است که اجازه میدهد تا کد جاوا برنامههای بومی و کتابخامههای زبان ++C را فراخوانی کند یا توسط آنها فراخوانده شود. برای پاسخ، میشود و به نامهای، برنامههای بومی (برنامههای خاص به یک پلت فرم سختافزار و سیستم عامل) و کتابخانهها در C ++ نوشته شدهاست.
CNI بسیار شبیه فریم ورک JNI (رابط بومی جاوا) است که به عنوان یک استاندارد با ماشینهای مجازی جاوا میآید.
مقایسه استفاده از زبان
نویسندگان CNI مدعی مزایای زیادی نسبت به JNI هستند:[14]
" | ما از CNI استفاده میکنیم، زیرا فکر میکنیم راه حل بهتری است، مخصوصا برای یک اجرای جاوا (Java implementation) چرا که جاوا فقط یک زبان برنامهنویسی دیگر است که میتواند با استفاده از تکنیکهای استاندارد کامپایل اجرا شود. با توجه به این مورد و این ایده که زبانهایی که با استفاده از Gcc اجرا میشوند باید در جایی که منطقی است سازگار باشند، نتیجه میشود که قرارداد فراخوانی جاوا (Java calling convention) باید همانند آنچه که برای زبانهای دیگر، به ویژه C ++ استفاده میشود، عملی باشد، زیرا ما میتوانیم جاوا را به عنوان یک زیر مجموعه از C++ در نظر بگیریم. CNI فقط مجموعه ای از توابع کمکی و قراردادها است که بر روی این ایده که C++ و جاوا قرارداد فراخوانی و طرح شی(object layout) * مشابه * دارند ساخته شدهاست؛ آنها به صورت باینری سازگار هستند. (این توضیحات یک سادهسازی است، اما به اندازه کافی نزدیک به اصل موضوع است) | " |
CNI به کلاسهای Java بستگی دارد که به عنوان کلاسهای C ++ ظاهر میشوند. به عنوان مثال،[15] با توجه به کلاس جاوا زیر،
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 است.
منابع
- Anthony Green, Cygnus Solutions. "GCJ announcement".
- "GCC Releases – GNU Project – Free Software Foundation (FSF)".
- "Archived copy". Archived from the original on 2007-05-09. Retrieved 2010-04-22.
- Campbell, Bill (2013). Introduction to Compiler Construction in a Java World. CRC Press Taylor & Francis Group. ISBN 978-1-4398-6088-5. Retrieved 2014-02-06.
- http://www.linuxjournal.com/article/4860
- http://freecode.com/projects/gcj
- "gcj to use Eclipse compiler as a front end". 2007-01-08. Archived from the original on 2007-05-09. Retrieved 2007-05-20.
- پرسش و پاسخ GCJ
- GCC به نظر میرسد برای غیرفعال کردن جاوا، جایگزینی با برو یا ADA
- Andrew Haley (September 30, 2016). "[gcc] Revision 240661".
- Tromey, Tom (October 2, 2016). "The Deletion of gcj". The Cliffs of Inanity. Retrieved October 3, 2016.
- "GCC 7 Release Series: Changes, New Features, and Fixes". Retrieved May 9, 2017.
- «GCJ: کامپایلر جاوا استاتیک جاوا» (PDF). بایگانیشده از اصلی (PDF) در ۷ ژوئن ۲۰۱۱. دریافتشده در ۳۰ ژانویه ۲۰۱۹.
- پرسش و پاسخ GCJ - پروژه گنو - بنیاد نرمافزار آزاد (FSF)
- مثال: از https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects- و- Classes بایگانیشده در ۲۰ اکتبر ۲۰۱۶ توسط Wayback Machine
پیوند به بیرون
- صفحه اصلی GCJ
- راهنمای GCJ
- درباره CNI بخش راهنمای GCJ
- LWN: GCJ - گذشته، حال و آینده - مقاله برخی از تاریخچه GCJ را مورد بحث قرار میدهد