|
Article on other languages:
|
در علوم کامپیوتر یک مفسر[۱] به معنای یک برنامهٔ کامپیوتر است که دستورات نوشته شده در یک زبان برنامه نویسی را اجرا میکند. با وجود اینکه تفسیر کردن و ترجمه کردن[۲]، دو وسیلهٔ اصلی هستند که از طریق آنها زبانهای برنامه نویسی اجرا میشوند، دو مقولهٔ کاملاً مجزا نیستند. یکی از دلایل این است که اغلب سیستمهای مفسر برخی از کارهای ترجمه را انجام میدهند. یک مفسر میتواند برنامهای باشد که:
پرل[۵]، پایتون[۶]، روبی[۷] و متلب[۸] همه نمونههایی از نوع ۲ هستند، در حالی که یو سی اس دی پاسکال[۹] و ماشین مجازی جاوا[۱۰] نوع ۳ هستند. برنامههای نوشته شده با جاوا از قبل ترجمه شده و به عنوان کدهای مستقل از ماشین، ذخیره میشوند و بعد در زمان اجرا[۱۱] توسط یک مفسر (ماشین مجازی) اجرا میشوند. برخی سیستمها، مانند اسمال تاک[۱۲] و غیره ممکن است ترکیبی از نوع ۲ و ۳ باشند.لفظهای زبان مفسر و زبان مترجم صرفاً به این معنا هستند که اساس پیاده سازی یک زبان برنامه نویسی یک مفسر است یا یک مترجم؛ یک زبان سطح بالا زبانی است که مستقل از پیاده سازی مشخصی است.
کاراییعیب اصلی مفسرها این است که برنامهای که تفسیر میشود، نسبت به برنامهای که ترجمه شود، دیرتر اجرا میشود. تفاوت سرعت میتواند ناچیز یا زیاد باشد. اغلب در مرتبه[۱۳] بزرگ و شاید بیشتر. غالباً اجرای یک برنامه تحت یک مفسر نسبت به اجرای کد ترجمه شده وقت بیشتری نیاز دارد. امّا مدت زمان تفسیر یک برنامه از مجموع زمان لازم برای ترجمه کردن و اجرا کردن آن، کمتر است. این موضوع هنگام نمونه سازی و تست کردن کد اهمیت ویژهای پیدا میکند. زیرا یک عملیات ویرایش-تفسیر-خطایابی[۱۴] میتواند کوتاهتر از عملیات ویرایش-ترجمه-اجرا-خطایابی[۱۵] باشد. تفسیر یک کد کندتر از اجرای کد ترجمه شدهاست، زیرا مفسر باید هر دفعه که برنامه شروع به اجرا میکند، همهٔ عبارتهای آن را تحلیل[۱۶] کند و سپس عملیات مورد نظر را اجرا کند در حالی که کد ترجمه شده فقط عبارتها را اجرا میکند. این تحلیل زمان اجرا تحت نام «بالاسری تفسیری»[۱۷]نامیده میشود. دسترسی به متغیرها نیز در مفسر کندتر است. زیرا مسیردهی شناسه به محل ذخیره سازی در زمان اجرا نسبت به زمان ترجمه به دفعات بیشتری صورت میگیرد. سازشهای زیادی بین سرعت تولید به هنگام استفاده از مفسر و سرعت اجرا به هنگام استفاده از مترجم وجود دارد. برخی سیستمها (برای مثال، ال آی اس پیها[۱۸]) به کدهای ترجمه شده و تفسیر شده اجازه میدهند تا یکدیگر را فراخوانی کنند و متغیرهایشان را به اشتراک بگذارند. به این معنا که هنگامی که یک روال تحت یک مفسر مورد تست قرار گرفت و اشکالزدایی شد، میتواند ترجمه شود و بنابراین، در حین اینکه روالهای دیگر در حال تولید شدن هستند، اجرای سریعتری داشته باشد. تعداد زیادی از مترجمها کد منبع را همان گونه که هست اجرا نمیکنند بلکه آن را به نوع فشرده تر داخلی تبدیل میکنند. برای مثال، برخی از مفسرهای ابتدایی، کلمات کلیدی را با نشانههای تک بایتی -که میتوانند برای یافتن دستورالعملها در یک میز جامپ[۱۹] استفاده شوند- جایگزین میکنند. یک مفسر ممکن است از همان نوع تحلیل گر واژگانی[۲۰]و تجزیه کننده[۲۱] ای استفاده کند که مترجم از آن استفاده میکند و سپس درخت انتزاعی ترکیب[۲۲] را تفسیر کند. مفسرهای بایت کدطیفی[۲۳] از احتمالات بین تفسیر کردن و ترجمه کردن وجود دارد که به مقدار تحلیل انجام شده قبل از اجرای برنامه بستگی دارد. برای مثال، ایماکس لیسپ[۲۴] به بایت کد -که نمایندهٔ بسیار بهینه شده و فشرده شدهای از منبع لیسپ است، ولی کد ماشین نیست (و در نتیجه وابسته به سخت افزار مشخصی نیست) -ترجمه میشود. این کد «ترجمه شده» بعداً توسط یک مفسر بایت کد[۲۵] -که خود آن توسط زبان سی نوشته شده است- تفسیر میشود. کد ترجمه شده در این حالت، یک کد ماشین برای یک ماشین مجازی است، که در سخت افزار پیاده سازی نشده و در مفسر بایت کد پیاده سازی شدهاست. همین شیوه در کد فورت[۲۶] -که در سیستمهای میان افزار باز[۲۷] استفاده میشود- به کار برده میشود: زبان منبع به «اف کد»[۲۸] (یک بایت کد) ترجمه میشود، که بعداً توسط یک ماشین مجازی تفسیر میشود. مفسرهای درخت انتزاعی ترکیبدر طیف بین تفسیر کردن و ترجمه کردن، روش دیگری نیز وجود دارد. در این روش، کد منبع به یک درخت انتزاعی ترکیب بهینه شده تبدیل میشود و سپس به تبعیت از این ساختار درختی، برای اجرای برنامه اقدام میشود. در این روش هر عبارت فقط باید یک بار تجزیه شود. به عنوان یک مزیت نسبت به بایت کد، این روش ساختار برنامهٔ سراسری و رابطهٔ بین عبارات را (که در بایت کد از بین میرود) حفظ میکند و یک نمایش فشرده تر را فراهم میسازد. بنابراین، درخت انتزاعی ترکیب، به عنوان یک قالب میانی بهتر نسبت به بایت کد برای مترجمهای داخل زمانی پیشنهاد شدهاست. همچنین این روش اجازه میدهد، در زمان اجرا تحلیل بهتری انجام گیرد. ثابت شدهاست که یک مفسر جاوا مبتنی بر درخت انتزاعی ترکیب، از یک مفسر مشابه مبتنی بر بایت کد سریع تر است. این سرعت بیشتر به خاطر بهینه سازی قویتر است که این بهینه سازی به دلیل برخورداری از ساختار کامل برنامهٔ موجود در حین اجرا، به وجود میآید. ترجمه داخل زمانیترجمه داخل زمانی[۲۹] باعث کم شدن فاصله بین مفسرها، مفسرهای بایت کد و مترجمها شدهاست و تکنیکی است که در آن بایت کد در زمان اجرا به شکل کد ماشین بومی[۳۰] ترجمه میشود. این برمی گردد به کارایی اجرای کد بومی در سریع کردن زمان بالا آمدن و افزایش استفاده حافظه، هنگامی که در ابتدا بایت کد ترجمه میشود. بهینه سازی توافقی[۳۱] یک تکنیک ترکیبی ای هست که در آن مفسر، برنامهٔ در حال اجرا را شکل میدهد و قسمتهایی که بیشتر استفاده شدهاند را به کد بومی ترجمه میکند. هر دو تکنیک بیش از چند دهه سن ندارند، بطوریکه نخستین بار در زبانهایی مانند اسمال تاک در ۱۹۸۰ بکار برده شدند. ترجمه داخل زمانی در سالهای اخیر، توجه بسیاری از مهندسان نویسنده زبانهای برنامه نویسی را به خود جلب کردهاست. به طوریکه هم اکنون جاوا، پایتون و چارچوب دات نت[۳۲] از این تکنیک استفاده میکنند. مفسر کارت منگنهکلمه «مفسر» اغلب اشاره دارد به قسمتی از واحد ثبت تجهیزات که میتواند کارت منگنه[۳۳] را بخواند و علامت[۳۴]ها را به صورت فرم قابل خواندن توسط انسان چاپ کند. ای بی ام ۵۵۰[۳۵] مفسر عددی و ای بی ام ۵۵۷[۳۶] مفسر الفبایی، نمونههایی از این نوع هستند که به ترتیب در سالهای ۱۹۳۰ و ۱۹۵۴ ساخته شدهاند. پانوشت ها
منابع |
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net