کامپایلر گلاسگو هاسکل
کامپایلر گلاسکو هاسکل ، [۴] که کمتر به عنوان سیستم تلفیقی Gl Glasgow Haskell [۵] یا به سادگی GHC شناخته می شود، کامپایلر کد منبع بومی منبع باز برای زبان برنامه نویسی کاربردی هاسکل است . این محیط همزمان برای نوشتن و آزمایش کدهای هاسکل را فراهم می کند و از برنامه های افزودنی ، کتابخانه ها و بهینه سازی های متعدد پشتیبانی می کند که روند تولید و اجرای کد را ساده می کند. GHC رایج ترین کامپایلر هاسکل است. [۶] توسعه دهندگان اصلی سیمون پیتون جونز و سیمون مارلو هستند .
تاریخچه[ویرایش]
GHC در ابتدا در سال 1989 به عنوان نمونه اولیه ، نوشته شده توسط LML (Lazy ML) توسط کوین هموند در دانشگاه گلاسکو آغاز به کار کرد. بعداً در همان سال ، نمونه اولیه کاملاً در هاسکل بازنویسی شد ، به جز تجزیه آن که توسط کوردلیا هال ، ویل پارتن ، و سیمون پیتون جونز بازنویسی شد. اولین نسخه بتا آن در تاریخ 1 آوریل 1991 منش=تشو انتشارهای بعدی آنالایزر سخت افزاری و همچنین افزونه های زبان مانند monadic I / O ، آرایه های قابل تغییر ، انواع داده های بدون جعبه ، مدل های برنامه نویسی همزمان و موازی (مانند حافظه کاربردی نرم افزار و موازی داده ها ) و یک پروفایل را اضافه کرد.
پیتون جونز و همچنین مارلو ، بعداً به تحقیقات مایکروسافت در کمبریج ، انگلیس نقل مکان کردند ، جایی که آنها همچنان مسئولیت توسعه GHC را بر عهده داشتند. GHC همچنین حاوی کد بیش از سیصد همکار دیگر است. [۱] از سال 2009 ، کمک های شخص ثالث به GHC توسط گروه صنعتی هاسکل تأمین شده است. [۷]
معماری[ویرایش]
GHC خود در Haskell نوشته شده است ، [۸] اما سیستم زمان اجرا برای هاسکل که برای اجرای برنامه ها ضروری است، در نوشته شده C و C-- .
فرانت اند GHC با همکاری lexer، تجزیه کننده و typechecker طراحی شده تا آیا به عنوان اطلاعات زیادی در مورد زبان مبدأ که ممکن است تا بعد از حفظ نوع استنتاج کامل است، به سمت هدف ارائه پیام های خطا روشن به کاربران است. پس از بررسی نوع، کد هاسکل دریافتی به یک تایپ زبان متوسط شناخته شده به عنوان "هسته ای" (بر اساس سیستم F ، تمدید با let
و case
عبارت). اخیراً ، هسته برای پشتیبانی از داده های عمومی جبری عمومی در سیستم نوع خود گسترش یافته است ، و اکنون مبتنی بر برنامه افزودنی به سیستم F معروف به سیستم F C است.
در تدوین نوع کارگردانی ، ساده سازنده GHC یا "انتهای میانی" ، که بیشتر بهینه سازی های اجرا شده در GHC انجام می دهد، به عنوان یک سری از تحولات منبع به منبع بر روی کد هسته ساخته شده است. تجزیه و تحلیل و تحولات انجام شده در این مرحله کامپایلر شامل تجزیه و تحلیل تقاضا (تعمیم تجزیه و تحلیل سخت گیری ) ، استفاده از قوانین بازنویسی تعریف شده توسط کاربر (شامل مجموعه ای از قوانین مندرج در کتابخانه های استاندارد GHC است که فیوژن پوشه / ساخت را انجام می دهد) ، پرده برداری می کند (" inlining "در کامپایلرهای سنتی تر) ، let-floating ، تحلیلی که تعیین می کند کدام آرگومان های عملکردی می توانند بدون جعبه باشند ، تجزیه و تحلیل نتیجه حاصل از محصول ، تخصص در توابع بارگذاری شده و همچنین مجموعه ای از تحولات محلی ساده تر مانند تاشو ثابت و کاهش بتا .
قسمت انتهایی کامپایلر با استفاده از یک STG زبان متوسط (کد کوتاه "ماشین Spineless Tagless G") کد هسته را به یک نمایش داخلی از C-- تبدیل می کند. [۹] کد C-- سپس می تواند یکی از سه مسیر زیر را طی کند: یا به عنوان کد C برای کامپایل با GCC چاپ می شود،یا به طور مستقیم به کد دستگاه بومی تبدیل می شود (مرحله " تولید " کد سنتی) یا تبدیل به کد ماشین مجازی LLVM برای گردآوری می شود. با LLVM در هر سه مورد ، کد بومی حاصل سرانجام در برابر سیستم زمان اجرای GHC برای تولید اجرایی مرتبط است.
زبان[ویرایش]
GHC مطابق با استانداردهای زبان ، هاسکل 98 [۱۰] و هاسکل 2010 است . [۱۱] همچنین از بسیاری از برنامه های افزودنی اختیاری استاندارد Haskell پشتیبانی می کند: به عنوان مثال ، کتابخانه حافظه کاربردی نرم افزار (STM) ، که امکان انجام معاملات حافظه کامپوزیت را فراهم می آورد.
برنامه های افزودنی به هاسکل[ویرایش]
تعدادی پسوند به هاسل پیشنهاد شده است. این پسوندها ویژگی هایی را ارائه می دهند که یا در مشخصات زبان توضیح داده نشده است ، یا آنها ساختارهای موجود را دوباره تعریف می کنند. به این ترتیب ، هر برنامه افزودنی ممکن است توسط همه پیاده سازی های هاسکل پشتیبانی نشود. برای توصیف برنامه های افزودنی و انتخاب مواردی که در نسخه های بعدی مشخصات زبان گنجانده خواهد شد و برای آنها تلاش مداوم وجود دارد [۱۲] .
برنامه های افزودنی [۱۳] پشتیبانی شده توسط کامپایلر گلاسکو هاسکل شامل:
- انواع و عملیات های گشوده نشده. اینها نمایانگر داده های اولیه سخت افزار زیربنایی است ، بدون اینكه indirection یك اشاره گرغیرمستقیم به پشته یا احتمال ارزیابی معوق اشاره کرده باشد. با استفاده از این انواع ، کد عددی فشرده می تواند بسیار سریعتر باشد.
- امکان مشخص کردن ارزیابی دقیق برای یک مقدار ، الگوی اتصال یا زمینه داده ها.
- نحو مناسب تر برای کار با ماژول ها ، الگوهای ، درک لیست ، اپراتورها ، سوابق و تاپل ها.
- قند نحوی برای محاسبه با فلش و مقادیر monadic به صورت بازگشتی تعریف شده است. هر دو این مفاهیم نوتیفیکیشن monadic را ارائه می دهند که در استاندارد هاسکل ارائه شده است.
- سیستم قابل توجهی قدرتمند تر از انواع و پرده های مختلف ، که در زیر شرح داده شده است
- الگو Haskell ، سیستمی برای برنامه نویسی زمان کامپایل. یک برنامه نویس می تواند عباراتی را بنویسد که کد هاسکل را به شکل یک درخت انتزاعی تولید می کند . این عبارات تایپ شده و در زمان کامپایل ارزیابی می شوند. سپس کد تولید شده گویا مستقیماً توسط برنامه نویس نوشته شده است. این نرم افزار به همراه امکان تأمل در تعریف ها ، ابزاری قدرتمند برای گسترش های بیشتر زبان است.
- شبه نقل قول ، که به کاربر اجازه می دهد نحو جدید بتن را برای عبارات و الگوهای تعریف کند. شبه نقل قول زمانی مفید است که یک متاگرام نوشته شده در هاسکل ، کدی را که به زبانی غیر از هاسکل نوشته شده است دستکاری کند.
- هاسکل عمومی می باشد، توابع مشخص صرفا بر حسب ساختار جبری از انواع آنها در به کار گیرند.
- ارزیابی موازی عبارات با استفاده از چند هسته پردازنده. این موضوعات به صراحت تخم ریزی نیاز ندارد. توزیع کار به طور ضمنی بر اساس یادداشت های ارائه شده توسط برنامه نویس اتفاق می افتد .
- عملگرهای کامپایلر را برای کارگردانی بهینه سازی هایی مانند گسترش درون خطی و کارکردهای تخصصی در انواع خاص می توان استفاده نمود.
- قوانین بازنویسی قابل تنظیم برنامه نویس می تواند قواعدی را برای توصیف چگونگی جایگزینی یک عبارت با یک عبارت معادل اما کارآمدتر ارزیابی کند. اینها در کتابخانه های پایگاه داده اصلی برای ارائه کارایی بهتر در سراسر کد سطح برنامه کاربرد دارند.
برنامه های افزودنی سیستم را تایپ کنید[ویرایش]
سیستم نوع استاتیک بیانگر یکی از مهمترین ویژگیهای تعیین کننده هاسکل است. بر این اساس، بسیاری از کار ها در گسترش زبان به سمت کارگردانی شده انواع و طبقات نوع می باشد .
کامپایلر گلاسکو هاسکل از یک سیستم نوع توسعه یافته مبتنی بر سیستم نظری F C پشتیبانی می کند. افزونه های اصلی سیستم نوع عبارتند از:
- چند شکلی درجه خودسرانه و غیرقابل تصور . در اصل ، یک تابع چند شکل یا یک سازنده داده می تواند نیاز داشته باشد که یکی از آرگومان های خود ، خود چند شکل باشد.
- انواع داده های جبری عمومی . هر سازنده از داده های چند شکل می تواند اطلاعات را در نوع حاصل رمزگذاری کند. تابعی که الگوی مطابقت با این نوع دارد می تواند از اطلاعات مربوط به هر سازنده برای انجام عملیات خاص تر روی داده ها استفاده کند.
- انواع موجود . اینها می توانند برای "بسته بندی" برخی از داده ها به همراه عملیات روی آن داده ها استفاده شوند ، به گونه ای که عملیات بدون افشای نوع خاص داده های زمینه ای قابل استفاده است. چنین مقداری بسیار شبیه به یک شیء است که در زبانهای برنامه نویسی شی گرا مشاهده می شود.
- انواع داده هایی که در واقع هیچ مقداری ندارند. اینها می توانند برای نمایش داده ها در استعاره سطح نوع مفید باشند.
- خانواده ها را تایپ کنید : توابع تعریف شده توسط کاربر از انواع مختلف می باشند. در حالی که پلی مورفیسم پارامتری ساختار مشابهی را برای هر نوع فوریت فراهم می کند ، خانواده های نوع چندشکلی موقت را با پیاده سازی هایی که می تواند بین لحظه های مختلف متفاوت باشد ، فراهم می کنند. موارد استفاده شامل ظروف بهینه سازی شده آگاهی از محتوا و برنامه نویسی سطح نوع است.
- پارامترهای عملکرد ضمنی که دامنه دینامیکی دارند. اینها در انواع کاملاً مشابه با محدودیتهای کلاس نوع نمایش داده می شوند.
برنامه های افزودنی مربوط به کلاس نوع عبارتند از:
- کلاس نوع ممکن است در بیش از یک نوع پارامتر شود. بنابراین یک کلاس نوع می تواند نه تنها مجموعه ای از انواع ، بلکه یک رابطه n- ari بر روی انواع را توصیف کند.
- وابستگی های عملکردی ، که بخش هایی از آن رابطه را محدود می کند تا یک عملکرد ریاضی در انواع باشد. بدین معنا که محدودیت مشخص می کند که برخی از پارامترهای کلاس نوع پس از ثابت کردن سایر مجموعه های پارامتر کاملاً مشخص می شوند. این روند استنباط نوع را در موقعیت هایی راهنمایی می کند که در غیر این صورت ابهام وجود دارد.
- قوانین قابل توجهی آرام در مورد شکل مجاز نمونه های کلاس نوع. وقتی اینها به طور کامل فعال شوند ، سیستم کلاس نوع به یک زبان کاملاً تورینگ برای برنامه نویسی منطقی در زمان کامپایل تبدیل می شود.
- خانواده های نوع ، همانطور که در بالا توضیح داده شد ، ممکن است با یک کلاس نوع نیز در ارتباط باشند.
- تولید خودکار نمونه های کلاس خاص از چند روش گسترش می یابد. کلاسهای نوع جدید برای برنامه نویسی عمومی و الگوهای بازگشتی رایج پشتیبانی می شوند. علاوه بر این ، هنگامی که یک نوع جدید به عنوان یک نوع موجود به عنوان isomorphic اعلام می شود ، ممکن است هر نوع کلاس کلاس که برای نوع زیر اعلام می شود ، به نوع جدید "به صورت رایگان" منتقل شود.
قابلیت حمل[ویرایش]
نسخه های GHC برای سیستم عامل های مختلفی از جمله ویندوز و بیشتر انواع یونیکس (مانند ورژن های بیشمار GNU / Linux ، FreeBSD و Mac OS X ) در دسترس است. [۱۴] GHC همچنین به چندین معماری پردازنده مختلف منتقل شده است .
همچنین ببینید[ویرایش]
- آغوش
- بله
- بسترهای نرم افزاری هاسکل
منابع[ویرایش]
- ↑ ۱٫۰ ۱٫۱ "The GHC Team". Haskell.org. Retrieved 1 September 2016.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ خطای یادکرد: برچسب
<ref>
نامعتبر؛ متنی برای ارجاعهای با نامhistory
وارد نشده است - ↑ "The Glasgow Haskell Compiler". Haskell.org. 5 March 2019. Retrieved 25 March 2019.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "The Glorious Glasgow Haskell Compilation System User's Guide". Haskell.org. Retrieved 27 July 2014.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ ghc --version
- ↑ "2017 state of Haskell survey results". taylor.fausak.me. 15 November 2017. Retrieved 11 December 2017.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Industrial Haskell Group". Haskell.org. 2014. Retrieved 1 September 2016.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "GHC Commentary: The Compiler". Haskell.org. 23 March 2016. Archived from the original on 23 March 2016. Retrieved 26 May 2016.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ خطای لوآ در پودمان:Citation/CS1/en/Identifiers در خط 47: attempt to index field 'wikibase' (a nil value).
- ↑ "Haskell 98 Language and Libraries: The Revised Report". Haskell.org. Retrieved 28 January 2007.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Haskell 2010 Language Report". Haskell.org. Retrieved 30 August 2012.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Welcome to Haskell' (Haskell Prime)". Haskell.org. Retrieved 26 May 2016.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "GHC Language Features". Haskell.org. Retrieved 25 May 2016.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ Platforms at gitlab.haskell.org
لینک های خارجی[ویرایش]
This article "کامپایلر گلاسگو هاسکل" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:کامپایلر گلاسگو هاسکل. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.