کامپایلر افزایشی

کامپایلر افزایشی نوعی محاسبات افزایشی در کامپایلرهاست. واضح است، کامپایلرهای معمولی بعد از هر تغییر، دوباره همه ماژول‌های برنامه را می‌سازند درحالی که کامپایلر افزایشی فقط آن بخش از برنامه را که تغییر کرده‌است را دوباره کامپایل می‌کند.

تعریف

برنامه‌نویسی دستوری 
در برنامه‌نویسی دستوری و توسعه نرم‌افزار، زمانی که یک کامپایلر افزایشی فراخوانده می‌شود، فقط تغییرات یک مجموعه از فایلهای منبع شناخته شده را می‌گیرد و هر پرونده خروجی مربوطه که ممکن است از کامپایل‌های قبلی به دست آمده باشد را به روز رسانی می‌کند (به زبان مقصد کامپایلر، اغلب بایت کد). کامپایلر افزاینده به‌طور مؤثر با تغییر بر روی پرونده‌های خروجی که قبلاً کامپایل شده بود، از محاسبهٔ دوباره و بیهوده کل فایل‌های منبع که اکثر کدهای آن بدون تغییر باقی مانده‌است، جلوگیری می‌کند. برای بیشتر کامپایلرهای افزایشی، کامپایل برنامه با تغییرات اندک در کد منبع آن، تقریباً در یک لحظه است. می‌توان گفت که یک کامپایلر افزایشی ضمن حفظ معنای زبان، باعث می‌شود که دانه بندی واحدهای کامپایلرهای قدیمی کاهش یابد، به گونه ای که کامپایلر بتواند قطعات کوچکتر را اضافه و جایگزین کند.

بسیاری از ابزارهای برنامه‌نویسی از مزایای کامپایلرهای افزایشی استفاده می‌کنند تا محیط برنامه‌نویسی بسیار تعاملی تری را در اختیار توسعه دهندگان قرار دهند. این غیر معمول نیست که یک کامپایلر افزایشی برای هر تغییر کد منبع فراخوانده شود، به گونه ای که توسعه دهنده تقریباً بلافاصله در مورد هرگونه خطای کامپایلرکه در نتیجه تغییر او در کد بوجود آمده، مطلع شود.

این طرح برخلاف کامپایلرهای قدیمی، چرخه توسعه یک برنامه‌نویس را به‌طور قابل توجهی کوتاه می‌کند. زیرا دیگر نیازی نیست مدت طولانی برای فرایند کامپایل قبل از اطلاع از خطاها منتظر ماند.

نکته منفی این نوع کامپایلرهای افزایشی این است که به دلیل موقعیت مکانی و محدود بودن حوزهٔ تغییرات، نمی‌تواند به راحتی کدی را که تهیه می‌کند بهینه کند. این موضوع معمولاً مشکلی ندارد، زیرا اغلب بهینه‌سازی فقط در حالت آزادسازی انجام می‌شود. از یک کامپایلر افزایشی در طول توسعه استفاده می‌شود، و از یک کامپایلر دسته ای استاندار در آازدسازی استفاده می‌شود.

برنامه‌نویسی تعاملی 
در الگوی برنامه‌نویسی تعاملی، به عنوان مثال در ادبیات مربوط به Poplog، یک کامپایلر تعاملی به کامپایلری گفته می‌شود که در واقع بخشی از سیستم زمان اجرای زبان مبدأ است.

این کامپایلر را می‌توان در زمان اجرا بر روی برخی از کدهای منبع یا ساختمان داده‌هایی که توسط برنامه مدیریت شده‌است فراخوانی کرد. سپس یک قطعه جدید کامپایل شده تولید می‌کند که حاوی کد ماشینی است که بلافاصله برای استفادهٔ سیستم در زمان اجرا در دسترس است.

اگر این قطعه جایگزین روند قبلی شود، زباله‌های قدیمی جمع‌آوری می‌شوند. این طرح اجازهٔ درجه ای از خود اصلاحی کد را می‌دهد که به ویژگی‌های زبان فرابرنامه نویسی نیاز دارد.

قابلیت اضافه کردن، برداشتن و حذف کد هنگام اجرا به عنوان اتصال گرم شناخته می‌شود. برخی ازپلت فرم‌های برنامه‌نویسی‌های تعاملی از ترکیب کد تفسیر شده و کد کامپایل شده استفاده می‌کنند تا به این فرض که هرگونه تغییر در کد بلافاصله توسط برنامه قابل دسترسی است، برسند.

لیست کامپایلرهای افزایشی

کامپایلرهای افزایشی برای کامپایل زبان دستوری 

 The PECAN Programming Environment Generator was an incremental compiler, developed by Steven P. Reiss in the early 1980s.
 GNU Compiler Collection has branched off its development with the IncrementalCompiler project, concentrating in providing C/C++ with a fast incremental compiler
 The Eclipse platform has a Java incremental compiler included as a part of the Java Development Tools project
 The IBM VisualAge C++ compiler 4.0 is an incremental compiler for C++
 Embarcadero Delphi, previously Borland Delphi
 The .NET Compiler Platform (codename Roslyn) is an open source incremental compiler for C# and Visual Basic .NET, and is the default compiler from Visual Studio 2015 onwards

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

 Poplog (its core language POP-11 and its predecessor POP-2)
 Some versions of Lisp:
 Steel Bank Common Lisp
 Carnegie Mellon University Common Lisp
 Scieneer Common Lisp
 GNU CLISP
 Franz Allegro Common Lisp
 Some versions of Scheme:
 Ikarus
 Chez Scheme
 Most versions of Prolog:
 SWI-Prolog, Yap Prolog, XSB, Ciao
 Versions of ML:
 Standard ML of New Jersey (Bell Labs' headquarters resides in New Jersey)
 Poplog ML
 Forth
 Kerridge KCML
 Ceylon of Red-Hat

کامپایلرهای افزایشی برای زبان‌های تابعی 

 OCaml

 The Gradle build tool has had incremental Java compilation since version 2.1.

منابع 

incremental computer

رایانش فزاینده
کامپایلرها
مقاله‌های ایجاد شده توسط ایجادگر