موضوع مقاله: سلف (زبان برنامه‌نویسی) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # سلف (زبان برنامه‌نویسی) | مقدمه: این زبان عمدتاً به عنوان یک سیستم آزمون تجربی برای طراحی زبان در سال‌های ۱۹۹۰–۱۹۸۰مورد استفاده قرار گرفت. | ## بخش 1: سلف (زبان برنامه‌نویسی) | در سال۲۰۰۶سلف هنوز به عنوان بخشی از پروژهٔ klein، که یک ماشین مجازی سلف که کاملاً به زبان سلف نوشته شده بود، در حال توسعه بود. هدف آن‌ها این بود که حالتی از هنر را در پروژهٔ برنامه‌نویسی وارد کنند، یکبار smalltalk۸۰توسط آزمایشگاه‌ها عرضه شد و به‌طور جدی در صنعت به کار گرفته شد. آن‌ها به دانشگاه استنفورد رفتند و کار روی زبان را ادامه داد، ساختن اولین کامپایلر سلف در سال ۱۹۸۷ صورت گرفت. در آن موقع تلاش برای رشد دادن یک سیستم کامل برای سلف بر خلاف صرفاً یک زبان بودن متمرکز شد. زبان‌های برنامه‌نویسی مبتنی برنمونه اولیه(prototype) زبان‌های برنامه‌نویسی شی گرا مبتنی بر کلاس سنتی، بر مبنای یک دوگانگی دیرینه هستند: کلاس‌ها خصوصیات پایه و رفتار اشیا را تعریف می‌کنند. یک مدل سودمندتر استفاده از زیر کلاس‌ها برای ساختن ویژگی‌هایی از vehicle است؛ برای مثال ماشین مسابقه و تراکتور. فقط اشیا کلاس تراکتور نیازمند یک سازوکار برای تحویل مصالح ساختمانی اند؛ ماشین‌های مسابقه که برای آن کار نامناسبند، فقط باید سریع بروند. با این حال این مدل نیازمند بینش عمیق‌تری است، که فقط ممکن است به عنوان مسائل به وجود بیایند. مگر در مواردی که می‌توان با اطمینان پیش‌بینی کرد چه ویژگی هایی؛ مجموعه‌ای از اشیا و کلاس‌ها در آینده‌ای دور خواهند داشت، یک فرد نمی‌تواند یک کلاس را به صورت سلسله مراتبی درست طراحی کند. اغلب اوقات برنامه در نهایت رفتارهای اضافی نیاز دارد، و بخش‌های سیستم نیاز به طراحی دوباره دارند (یا refactored) تا اشیاء به شیوه‌ای متفاوت بشکنند. سیتم‌ها تمایل دارند که به یک نقطه برسند و سپس سفت و سخت شوند همانطریکه در کلاس‌های اولیه هنگامی کد برنامه‌نویس بزرگ می‌شود، به سادگی موجب اشتباه می‌شود. زبان‌های دینامیک از قبیل smalltalk برای این نوع از تغییر از طریق متدهای شناخته شده در کلاس‌ها استفاده کردند؛ با تغییر کلاس، اشیاء بر اساس آن رفتار خود را تغییر می‌دهند. | ## بخش 2: سلف (زبان برنامه‌نویسی) | با این حال، چنین تغییراتی باید با دقت بسیار انجام شود، زیرا به عنوان اشیاء دیگر مبتنی بر همان کلاس ممکن است یک رفتار غلط باشد: «اشتباه» اغلب وابسته به چهار چوب است. علاوه بر این، در زبان‌های مثل c++ که در آن کلاس‌های مشتق شده را می‌توان به‌طور جداگانه از کلاس‌های ما فوق کامپایل کرد، یک تغییر در کلاس ما فوق می‌تواند متدهای از پیش کامپایل شده کلاس مشتق شده را بشکند. (این شکل دیگری از مشکل کلاس پایه شکننده‌است، و همچنین یک فرم از مشکل واسط دوتایی شکننده). اشیا اولیه‌ای برای ساختن کپی استفاده شده‌اند به عنوان نمونه اولیه شناخته شده‌اند. اگر یک شی موجود (یا مجموعه‌ای از اشیاء) یک مدل ناکافی باشد، برنامه‌نویس به سادگی می‌تواند یک شی اصلاح شده با رفتار صحیح ایجاد کند و بدون آنکه کد آن شی تغییر کرده باشد از آن استفاده کند. اسلات‌ها متدهای دسترسی که مقادیری را برمی‌گردانند و با قراردادن یک دو نقطه بعد از نام اسلات می‌توان به آن مقدار داد. متدها اشیایی هستند که علاوه بر اسلات‌ها، کدها را نیز شامل می‌شوند (از آن‌ها برای آرگمان‌ها و مقادیر موقتی استفاده می‌کنند) و می‌توانند در یک اسلات سلف مانند هر شی دیگری قرار بگیرد، برای مثال یک عدد. باید توجه شود که در سلف هیچ تفاوتی بین فیلدها و متدها وجود ندارد، هر چیزی یک اسلات است. از آنجا که دسترسی به اسلات‌ها از طریق پیغام‌ها بخش اعظمی از نحو را در سلف شکل می‌دهد، بنابراین پیغام‌های زیادی به سلف فرستاده شده و سلف می‌تواند قطع شود. در غیاب گروه‌بندی صریح، پیغام‌های یگانی بیشترین اولویت را نسبت به دوگانی دارند (گروه‌بندی از چپ به راست) و پیغام‌های keyword کمترین اولویت را دارند. تغییرات روی یک شی روی اشیا دیگر تأثیر نمی‌گذارد، با اینکه در بعضی از مواقع این کار مطلوب تر است. به‌طور معمول یک شی تنها پیغام مربوط به اسلات محلی خود را متوجه می‌شود، ولی با داشتن یک یا چند اسلات که اشیا پدر را نشان می‌دهند، یک شی می‌تواند هر پیامی را که خودش متوجه نمی‌شود به شی پدر محول کند. | ## بخش 3: سلف (زبان برنامه‌نویسی) | هر اسلات می‌تواند یک اشاره گر به پدر با اضافه کردن یک ستاره به صورت پسوند بسازد. ویژگی نمایندگی نیز برای اجرا کردن ویژگی‌هایی چون فضای نام و حوزهٔ لغوی به کار می‌رود. اضافه کردن اسلات‌ها اشیا در سلف می‌توانند به گونه‌ای تغییر یابند که چند اسلات اضافی را شامل شوند. به موجب این ویژگی برنامه‌ها بر خلاف زبان‌هایی چون C واحدهای مستقلی نیستند ولی از تمام محیط حافظه برای فعال‌سازی استفاده می‌کنند. برای مثال یک فرد می‌تواند در حین دیباگ ایست دهد و مقادیری را تغییر دهد و دوباره به دیباگ ادامه دهد. همچنین برخلاف سیستم‌های قدیمی، در سلف فقط قسمتی از کد که تغییر کرده را بازسازی(rebuild) می‌کند. این تکنیک موجب افزایش کارایی می‌شود اگر چه موجب گرفتن وقت زیادی از سیستم می‌شود. زبان سل سل یک زبان شی گرا بر اساس نمونهٔ اولیه که بر پایه زبان سلف که خود آن تحت تأثیر اسمال‌تاک است. هدف از طراحی این زبان طراحی نسخه‌ای از زبان برنامه‌نویسی سلف بود که بودن وابستگی زیاد به Self GUI اجرا شود. برای مثال، ما بدون سر بار زیاد سیستم Self می‌توانیم برنامه‌ای تحت خط فرمان ایجاد کنیم. | ## جمع‌بندی | از سال ۲۰۰۲ به بعد دیگر از این زبان حمایت به عمل نیامد و توسعهٔ آن متوقف شد اما کدهای این زبان در دسترس و کارا هستند.