0

زبان برنامه نویسی پرل

 
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

برنامه‌نویسی شی‌گرا

برنامه‌نویسی شی‌گرا

همانند سایر زبان‌های برنامه‌نویسی شی‌گرا زبان اسمالتاک-۸۰ (نه اسمالتاک-۷۲) دارای مفهوم مرکزی شی است. شی یک نمونه از یک کلاس می‌باشد. کلاس‌ها تعیین کننده نحوه رفتار در نمونه‌های خود هستند. برای مثال کلاس پنجره باید تعیین نماید که ایا دارای برچسب است یا نه و اعمال مورد نیاز برای پنجره‌ها همانند باز کردن، بستن، و حرکت دادن را برای آن تعریف نماید. هر نمونه از کلاس پنجره مقادیر مخصوص به خود را داراست و در صورت نیاز می‌تواند اعمال تعریف شده در کلاس مربوطه را انجام دهد. یک شی در اسمالتاک می‌تواند دقیقا سه عمل انجام دهد:

۱- وضعیت را نگهداری نماید (مرجعی برای سایر اشیا باشد)
۲- پیامی را از خود یا شی دیگری دریافت دارد.
۳- در هنگام پردازش پیامی، پیام دیگری برای خود یا اشیا دیگر بفرستد.

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

چون تمام مقادیر شی هستند کلاس‌ها نیز خود شی هستند. هر کلاس شی متناسب با متاکلاس مربوطه است. متاکلاس‌ها نیز خود کلاس هستد و نمونه‌ای از کلاس متاکلاس هستند. بلاک‌ها کد نیز شی هستند.

پنج شنبه 2 دی 1389  7:26 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

انعکاس

انعکاس

اسمالتاک-۸۰ یک سیستم کاملاً انعکاسی است که در خود اسمالتاک-۸۰ پیاده شد. اسمالتاک-۸۰ هم ساختار و هم محاسبات انعکاسی فراهم می‌سازد. کلاس‌ها و متدها که یک شی را تعریف می‌نمایند خود شی هستند و کاملاً جز خود سیستم هستند. کامپایلر اسمالتاک فایل‌های متنی را به به اشیا متد تبدیل می‌کند که معمولاً نمونه‌هایی از کلاس Compilemethod است. این‌ها از طریق اضافه شدن به دیکشنری کلاس اضافه می‌شوند. سلسله مراتبی که کلاس‌ها را تعریف می‌نماید خود می‌تواند کلاس‌های جدید اضافه نماید. سیستم از طریق کد اسمالتاک-۸۰ که کلاس‌های جدید تعریف می‌کند یا تغییر می‌دهد گسترش می‌یابد. بدین طریق سیستم‌های نوشته شده به اسمالتاک-۸۰ سیستم‌های زنده هستند و می‌توانند در زمان اجرا خود را تغییر دهند و بهبود یابند.

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

اسمالتاک-۸۰ یک سیستم محاسباتی انعکاسی فراهم می‌سازد تا وضعیت محاسباتی سیستم قابل مشاهده باشد. در زبان‌های مشتق شده از اسمالتاک-۸۰ اصلی، فعال‌سازی یک سیستم آن را از طریق کلمه کلیدی thisContext قابل دسترسی است. با فرستادن پیام‌ها به thisContext متد فعال‌شده می‌تواند بپرسد چه کسی مرا فعال کرده است. این امکانات برنامه‌نویس را قادر می‌سازد روتین‌های کمکی و بازگشت همانند پرولوگ پیاده‌سازی نماید بدون آنکه ماشین مجازی را تغییر دهد. یکی از استفاده‌های جالب این ویژگی در سیساید است که این قالب کار برای وب توسط ایوی برایانت نوشته شده و طراحان را با از پیچیدگی‌های دکمه‌های بازگشت رها نموده و حرکات او را ذخیره کرده و امکان حرکت بین آنها را برای او فراهم می‌سازد. پس از ذخیره‌سازی این حرکات می‌توان ظراحی وب را به آسانی به یکی از ویژگی‌های معمول ادامه داد.

اگر پیام ارسال شده به هر شی توسط آن شی پیاده نشده باشد پیام عدم فهم شی (doesNotUnderstand:) ارسال می‌گردد و پیام آرگومان آن محسوب می‌شود. پیام (شی دیگری از نمونه‌های Message) شامل فرستنده و آرایه‌ای ارگومان‌هایش است. در یک سیستم محاوره‌ای اسمالتاک پیاده‌سازی پیش‌فرض پیام doesNotUnderstand: همان است که پنجره را برای نشان دادن خطا باز خواهد کرد. از این طریق می‌توان دلیل و زمینه خطا را شناخت و این اشکال را در داخل سیستم برطرف نمود و با استفاده از سیستم انعکاسی یه کار ادامه داد.

کاربرد مهم دیگر doesNotUnderstand: میانجی‌گری است. برنامه‌نویس می‌تواند کلاسی پیاده نماید که هیچ متدی نداشته باشد و فقط پیام doesNotUnderstand: را پیاده کرده باشد و از هیچ کلاسی به ارث نرفته باشد. اگر این اشیا بدرستی به کار روند می‌توانند پیام‌ها را به سیستم‌های دیگر هدایت بنمایند و سیستم‌های توزیع‌شده به خوبی عمل نمایند. این چنین سیستمی در CORBA و RMI نیز وجود دارد اما در ابتدا در اسمالتاک-۸۰ پیاده گردید.

پنج شنبه 2 دی 1389  7:27 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

دستور

دستور

دستورات اسمالتاک-۸۰ درصدد کوچک بودن است و تناها از تعدادی کلمات کلیدی و اعلامات استفاده می‌نماید. در حقیقت تنها شش کلمه کلیدی وجود دارد: true، false، nil، self، super، و thisContext. (این‌ها در واقع کلمات کلیدی نیستند تنها شبه کلمات کلیدی است که شی‌هایی به عنوان تنها نمونه کلاس‌های خود هستند. اسمالتاک در حقیقت اصولا کلمه کلیدی را به عنوان یک مفهوم نپذیرفته است.) تنها ساخته‌های داخلی زبان ارسال پیام‌ها، انتصاب، بازگشت مقدار در متد، و ثابت برای بعضی اشیا. باقیمانده زبان، دستورات کنترلی همانند انتخاب شرطی و دستورات تکرارپذیر توسط استاندارد اسمالتاک در کتایخانه کلاس‌ها پیاده می‌شود. بدلیل بهینه‌سازی ممکن است بعضی پیاده‌سازی‌ها به بعضی از پیام‌ها اهمیت زیادی داده ولی باید دقت کرد که این اهمیت دادن در داخل زبان نوشته نشده و تنها یک بهینه‌سازی است.

پنج شنبه 2 دی 1389  7:28 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

ثابت‌ها

ثابت‌ها

مثال پایین نشان‌دهنده تمام ثابت‌های معمول اشیا را در متدهای اسمالتاک-۸۰ است.

اعداد. لیست پایین بعضی اعداد ممکن را نشان می‌دهد.

42
-42
123.45
1.2345e2
2r10010010
16rA000

در دو خط اخر اعداد دودویی و شانزده‌شانزدهی نشان داده شده‌اند. r نشان‌دهنده استفاده از پایه دیگری است البته این منبع می‌تواند ۲ نباشد. به عنوان مثال 36rSMALLTALK یک عدد ممکن است (برای کسانی که کنجکاوند این عدد برابر است با 80738163270632 دهدهی).

کاراکترها با علامت $ نوشته می‌شوند.

$A

رشته‌ها به صورت توالی کاراکترها در بین نوشته می‌شوند.

 

'Hello, world!'

برای شمول یک ' دو علامت را بکار ببرید.

'I said, ''Hello, world!'' to them.'

" نیاز به هیچگونه تغییری ندارد چون در رشته‌ها علامت ' بکار می‌رود.

'I said, "Hello, world!" to them.'

دو رشته برابر (رشته‌ها برابرند در صورتی که شامل تمام کاراکترها باشد) می‌توانند دو شی در دو محل متفاوت از حافظه باشد. علاوه بر رشته‌ها اسمالتاک دارای یک کلاس توالی کاراکترهای دیگر بنام symbol است. symbolها تضمین شده‌اند که منحصر بفرد باشند و هیچ دو symbol برابر دو شی متفاوت نیستند. به دلیل منحصر بفرد بودن آنها را می‌توان براحتی مقایسه نمود و برای انتخاب کننده پیام‌ها و سایر مصنوعات زبان به کار رود.

symbolها توسط علامت # و چند کاراکتر نشان داده می‌شود.

#foo

آرایه‌ها.

#(1 2 3 4)

یک آرایه از ۴ عدد سحیح را تعریف می‌کند.


و آخرین نه کمترین بلوک‌ها (ثابت توابع بی‌نام).

[... Some smalltalk code...]

بلوک‌ها در ادامه توضیح داده شده‌اند.اشتقاق‌های دیگر اسمالتاک دستورات اضافه‌تر را تعریف می‌کند اما موارد توضیح داده شده در بالا مهم‌ترین ثابت‌هاست.

پنج شنبه 2 دی 1389  7:30 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

اعلام متغیرها

اعلام متغیرها

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

اعلام متغیر موقت در اسمالتاک برای متغیرهای درون متد بکار می‌رود. این متغیرها در بالای متد تعریف می‌شوند و با فضای خالی و | جدا می‌گردند. به عنوان مثال:

 

| index |

یک متغیر موقت بنام index تعریف می‌کند. چندین متغیر را می‌توان در یک دستور تعریف نمود.

 

| index vowels |

دو متغیر index و vowels را تعریف می‌کند.

انتصاب

یک متغیر از طریق دستور =: به یک مقدار منتصب می‌گردد.

vowels := 'aeiou'

رشته aeiou را به متغیر از پیش تعیین شده vowels نسبت می‌دهد. رشته یک شی است (توالی کاراکترها در بین نشان‌دهنده ثابت رشته‌ایست) که در زمان کامپایل ایجاد می‌شود.

پنج شنبه 2 دی 1389  7:31 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

پیام‌ها

پیام‌ها

پیام‌ها ساختارهای اساسی در اسمالتاک هستند. حتی دساورات کنترلی نیز به صورت ارسال پیام پیاده می‌گردند. مثال پایین پیام factorial را به عدد 42 می‌فرستد.

 

42 factorial

در این حالت 42 گیرنده پیام است در حالی که factorial انتخاب‌کننده می‌باشد. گیرنده پیام با بازگرداندن مقداری (در اینجا احتمالاً فاکتوریل عدد ۴۲) پاسخ می‌دهد. علاوه بر این مقدار بازگردانده شده را می‌توان به یک متغی نسبت داد:

aRatherBigNumber := 42 factorial

factorial پیامی است که به آن عموماً پیام یگانه گویند چرا که فقط یک شی و آن هم دریافت‌کننده در آن نقش دارد. پیام‌ها می‌توانند چندین شی را به عنوان آرگومان خود حمل کنند:

2 raisedTo: 4

در این عبارت دو شی نقش داشته‌اند: 2 به عنوان گیرنده و 4 به عنوان آرگومان. نتیجه پیام یا در اصطلاح اسمالتاک پاسخ پیام 16 است. یک پیام می‌تواند آرگومان‌های بیشتری هم داشته باشد.

'hello world' indexOf: $o startingAt: 6

مثال بالا اندیس o در رشته داده شده با شروع از اندیس ۶ را بازمی‌گرداند. انتخاب‌کننده این پیام :indexOf:startingAt که از دو کلمه کلیدی یا قسمت تشکیل شده است.

چنین کلمات کلیدی درهمتنیده خوانایی کد را بالا برده و آرگومان‌ها به‌وسیله کلمات کلیدی پیش از خود توصیف می‌گردند. به عنوان مثال یک عبارت برای ساخت یک مستطیل در ++C یا جاوا به شکل زیر است:

 

new Rectangle(100, 200);

در این عبارت مشخص نیس ت کدام آرگومان طول است یا عرض و شما برای فهمیدن این نکته باید به راهنمای زبان مراجعه نمایید اما همین عبارت در اسمالتاک بدون هیچ‌گونه ابهام نوشته می‌شود به شکل زیر:

Rectangle width: 100 height: 200

گیرنده در این حالت Rectangle یک کلاس است و در پاسخ یک نمونه از این کلاس با عرض و طول خواسته شده تولید می‌گردد.

در نهایت بیشتر کاراکترهای غیرالفبایی به عنوان پیام دودویی بکار می‌رود. این به برنامه‌نویس اجازه می‌دهد تا عملگرهای ریاضی را به شکل سنتی بنویسد:

3 + 4

که پیام + را به گیرنده 3 به همراه آرگومان 4 می‌فرستد (که پاسخ برابر با ۷) است. به طور مشابه:

3 > 4

پیام < را به 3 به همراه آرگومان 4 را می‌فرستد (پاسخ false است).

توجه کنید که در اسمالتاک-۸۰ خود این عملگرها پیاده نشده‌اند. خروجی تنها بستگی به نحوه پاسخ‌دهی گیرنده (در این جا نمونه Number) در برابر پیام < و + پاسخ می‌دهد.

اثر جانبی این مکانیزم گرانبارسازی عملگر است. یک پیام < را بقیه اشیا هم می‌توانند بفهمند که این امکان را می‌دهد تا از عبارت a>b برای مقایسه آنها بکار می‌رود.

پنج شنبه 2 دی 1389  7:32 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

عبارات

عبارات

یک عبارت می‌تواند چندین ارسال پیام داشته باشد. در این مثال پیام‌ها به ترتیب ساده پردازش می‌شود. پیام‌های یگانه اولویت بیشتری داشته و پس از آن پیام‌های دوگانه و پیام‌های کلمات کلیدی قرار دارند. به عنوان مثال

3 factorial + 4 factorial between: 10 and: 100

که بصورت زیر ارزیابی می‌شود:

  1. 3 پیام factorial را درپافت می‌کند که پاسخ 6 است.
  2. 4 پیام factorial را درپافت می‌کند که پاسخ 24 است.
  3. 6 پیام + را به همراه 24 به عنوان آرگومان دریافت کرده که پاسخ 30 است.
  4. 30 گیرنده پیام :between:and را به همراه 10 و 100 به عنوان آرگومان درسافت کرده که پاسخ true است.

پاسخ آخرین پیام به عنوان نتیجه نهایی عبارت ارسال می‌گردد.

پارانتزها می‌توانند ترتیب ارزیابی را تغییر دهند.

(3 factorial + 4) factorial between: 10 and: 100

که معنای عبارت را تغییر داده و عبارت میان پارانتز در ابتدا ارزیابی گردیده و نتیجه ۱۰ می‌شود. ۱۰ پیام factorial را دریافت می‌کند که نتیجه ۳۶۲۸۸۰۰ است. و قسمت آخر در نهایت false تولید می‌کند.

بدلیل این که پیام‌های دوگانه در اسمالتاک-۸۰ درون‌ساخت نیستند اولویت برابر با یکدیگر داشته و بسادگی از چپ به راست ارزیابی می‌گردند. به همین دلیل عبارات مشابه در اسمالتاک ممکن است معنای متفاوت از آنچه که به صورت سنتی است داشته باشند.

3 + 4 * 5

پس از ارزیابی نتیجه ۳۵ است.

پیام‌های یگانه را می‌توان با نوشتن پشت سر هم به هم زنجیر نمود. به صورت زیر:

3 factorial factorial log

که فاکتوریل را به ۳ فرستاده و نتیجه را که ۶ است دوباره فاکتوریل ارسال می‌کند و از نتیجه ۷۲۰ لگاریتم می‌گیرد که نتیجه ۲.۸۵۷۳۳ است.

چند عبارت را می‌توان پشت هم نوشت که هر کدام با یک . پایان می‌یابد. مثال پایین یک نمونه از window ایجاد کرده و آن را در یک متغیر ذخیره می‌نماید و به آن دو پیام می‌فرستد.

 | window |
  window := Window new.
  window label: 'Hello'.
  window open.

اگر چندین پیام به یک گیرنده ارسال شود می‌توان آنها را بصورت یک زنجیره جدا شده با ; نوشت.

  (Window new)
    label: 'Hello';
    open

با این تغییر نیاز به استفاده از یک متغیر موقت برطرف خواهد شد.

پنج شنبه 2 دی 1389  7:33 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

بلوک کد

بلوک کد

یک بلوک از کد (تابع بدون نام) را می‌توان بصورت یک ثابت بیان داشت (که یک شی است چرا که هر مقدار شی می‌باشد) که این هدف با استفاده از [] ممکن است.

[ :params | <message-expressions> ]

که params: نشان‌دهنده پارامترهای دریافتی است. این بدان معنی است که کد زیر:

[:x | x + 1]

می‌تواند به صورت زیر باشد:

f(x) = x + 1

(یا با استفاده از حساب دیفرانسیل لامدا):

λx.(x+1)

و

f(3) = 3 + 1

ارزیابی خواهد شد:

[:x | x + 1] value: 3

پنج شنبه 2 دی 1389  7:35 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

ساختار کنترل

ساختار کنترل

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

result := a > b
    ifTrue:[ 'greater' ]
    ifFalse:[ 'less' ]

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

| aString vowels |
aString := 'This is a string'.
vowels := aString select: [:aCharacter | aCharacter isVowel].

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

پنج شنبه 2 دی 1389  7:35 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

توابع

توابع

زمانی که یک شی یک پیغامی را دریافت می‌کند تابع پیغام دریافتی را با اسم تابع تطبیق می دهد. مثال زیر یک تابع "Publish" را تعریف می‌کند و پس از آن انچه را که اتفاق خواهد افتاد را در خود تعریف می کند. این زمانی اجرا می‌شود که یک پیغامی حاوی "Publish"را دریافت نماید.

publish
    Transcript show: 'Hello, World!'

در زیر تابعی تعریف می‌شود که چند آرگومان را می گیرد و مقداری را بر می گرداند.

quadMultiply: i1 and: i2 
    "This method multiplies the given numbers by each other and the result by 4."
    | mul |
    mul := i1 * i2.
    ^mul * 4

توجه کنید که شی برای تعیین اینکه در زمان اجرا بطور داینامیکی شروع به پاسخ دهی به پیغام نماید و یا بطور استاتیکی در زمان کامپایل این کار را انجام دهد مسئول می باشد.

پنج شنبه 2 دی 1389  7:38 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

ساختن نمونه ای از کلاس‌ها

ساختن نمونه ای از کلاس‌ها

به قطعه کد زیر توجه کنید که یک شی از کلاس می سازد:

MessagePublisher new

دستور بعدی یک شی از کلاس می سازد و مقداری را برمی گرداند و آن را مقدار دهی می نماید.

publisher := MessagePublisher new

در زبان اسمالتک ممکن است که به یک کلاس موقتی و بی نام پیغامی بزنیم مانند کد خط بعد.

MessagePublisher new publish

توجه کنیدکه برنامه نویس با توجه به شرایط از یکی از حالات بالا برای ساختن نمونه از شی استفاده می کند.

پنج شنبه 2 دی 1389  7:38 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

مثال معروف "!Hello World"

مثال معروف "!Hello World"

Transcript show: 'Hello, world!'.

دستور "show" به شی "Transcript" پیغامی با یک آرگومان ثابت "!Hello World" می فرستد. دستور "show" باعث نمایش "!Hello World" در قسمت "Transcript" ویندوز می شود. توجه کنیدکه "Transcript" احتیاج به باز کردن دارد تا بتواند دستور را نمایش دهد.

تصویر براساس اصرار

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

پنج شنبه 2 دی 1389  7:41 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

سطح دسترسی

سطح دسترسی

هرچیزی در اسمالتک 80 قابلیت تغییر را در زمان اجرا دارد. برای مثال : دستگاههای کنترل درایو الکترونیکی یکپارچه می توانند بدون راه اندازی مجدد در زمانی که سیستم در حال اجرا است تغییر کنند. دستورات نحوی زبان یا اجرای داده‌های نا خواسته می توانند همچنین در جنبش تغییر یابند. برای مثال دستور true become: falseبا ارزش هست ولی اجرای آن توصیه نمی شود.

کامپایل کردن اسمالتک

اسمالتک بصورت بایت کد برنامه را کامپایل می‌کند که توسط ماشین دیداری یا بطور داینامیکی به زبان ماشین ترجمه می شود.

پنج شنبه 2 دی 1389  7:41 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

روبی

روبی (به انگلیسی: Ruby) یک زبان برنامه‌نویسی انعطافپذیر، پویا و شی‌گرا است. روبی ویژگی‌های نگارشی پرل و شی‌گرایی اسمال‌تاک را با هم در خود دارد. زبان روبی در سال‌های میانی دهه ۱۹۹۰ توسط یوکیهیرو ماتسوموتو در ژاپن اختراع شد. ویژگی‌های گوناگون زبان‌های پرل، لیسپ، اسمال‌تاک و آیفل الهام‌بخش ماتسوموتو در ساخت روبی بودند.

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

نسخه فعلی این زبان Ruby 1.9.1 است که به زبان سی و بصورت زبانی با مفسر تک‌گذره پیاده‌سازی شده است.[۱] تا سال ۲۰۱۰، گونه‌های مختلفی از زبان روبی توسعه یافته‌اند که از میان آنها می‌توان به جی‌روبی، روبینوس، مک‌روبی، آیرن‌روبی و هات‌روبی اشاره کرد.

پنج شنبه 2 دی 1389  7:42 AM
تشکرات از این پست
golami1223
golami1223
کاربر برنزی
تاریخ عضویت : آبان 1389 
تعداد پست ها : 683
محل سکونت : بوشهر

تاریخچه

تاریخچه

زبان روبی رسما در روز ۲۴ فوریه ۱۹۹۳ (۵ اسفند ۱۳۷۱) توسط یوکیهیرو ماتسوموتو معرفی شد. او دنبال ساخت زبانی بود که امکانات متعادلی برای برنامه‌نویسی تابعی و برنامه‌نویسی دستوری برای برنامه‌نویس فراهم آورد. ماتسوموتو درباره انگیزه‌اش برای ساخت روبی می‌گوید: «در جستجوی زبانی بودم که از پایتون شیء‌گراتر و از پرل قدرتمندتر باشد. برای همین تصمیم گرفتم خودم آن را بسازم».

[ویرایش] نام «روبی»

یوکیهیرو ماتسوموتو و همکارش دو نام «روبی» و «کورال» را برای این زبان جدید برگزیده بودند. از آنجاییکه نام کورال پیش از آن برای یکی از زبان‌های برنامه‌نویسی بریتانیایی انتخاب شده بود، نام «روبی» به عنوان نام نهایی برگزیده شد. ماتسوموتو گفته که یکی از دلایل انتخاب نام «روبی» این بود که یاقوت (به انگلیسی: Ruby) نشان ماه تولد یکی از همکاران وی بوده است.

[ویرایش] اولین انتشار

نخستین ویرایش روبی با عنوان روبی 0.95 در ۲۱ دسامبر ۱۹۹۵ (میلادی) (۳۰ آذر ۱۳۷۴) روی یکی از شبکه‌های تخصصی اینترنتی در ژاپن منتشر شد. پس از آن، سه ویرایش دیگر رویی در ظرف دو روز انتشار یافتند. در همین دوره نخستین لیست پست الکترونیک برای روبی در ژاپن براه افتاد.

[ویرایش] روبی ۱.۰

نخستین نسخه اصلی روبی با عنوان روبی 1.0 در ۲۵ دسامبر ۱۹۹۶ (۵ دی ۱۳۷۵) منتشر شد. پس از انتشار روبی 1.3 در سال ۱۹۹۹، نخستین لیست پست الکترونیک به زبان انگلیسی آغاز بکار کرد. در سپتامبر سال ۲۰۰۰ نخستین کتاب راهنمای برنامه‌نویسی به زبان روبی به انگلیسی به چاپ رسید که به افزایش محبوبیت این زبان در کشورهای مختلف کمک کرد.

روبی آن ریلز

در سال ۲۰۰۵ با معرفی چارچوب جدیدی برای برنامه‌نویسی وب موسوم به روبی آن ریلز، محبوبیت زبان روبی به مراتب افزایش پیدا کرد. نام‌های «روبی» و «روبی آن ریلز» آنقدر با هم استفاده شده‌اند که برای بسیاری شاید تفاوت این دو روشن نباشد.

روبی ۱.۹.۱

جدیدترین نسخه پایدار روبی، نسخهٔ ۱.۹.۱ است که نسبت به نسخهٔ پیشین (۱.۸.۶) چند تغییر عمده در خود دارد. از جمله تغییرات مهم می‌توان به افزودن متغیرهای محلی در «بلوک»های روبی، و امکان تنظیم کدگذاری رشته‌ها بصورت مستقل از هم اشاره کرد.

پنج شنبه 2 دی 1389  7:44 AM
تشکرات از این پست
دسترسی سریع به انجمن ها