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

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

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

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

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

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

### برنامه‌نویسی تعاملی
در الگوی برنامه‌نویسی تعاملی، به عنوان مثال در ادبیات مربوط به 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

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