مادولا (زبان برنامه نویسی). زبان برنامه نویسی مادولا(به انگلیسی: Modula) یکی از نسل های زبان برنامه نویسی پاسکال است. طزاحی آن به زمانی بر می گردد که دکتر نیکلاس ورث (Niklaus Wirth) عضو کمیته ای بود که وظیفه آن طراحی زبانی بود که جانشین زبان الگول-60 شود. حاصل کار این کمیته زبان الگول-68 بود. عدم وجود متودی منسجم در طراحی الگول-68 باعث شد که این زبان به مجموعه ای از امکانات بی نظم و آشفته تبدیل شود و مانند زبان PL/I سقوط زود هنگامی را تجربه کند. در این زمان دکتر ورث کمیته را رها کرد و تصمیم به طراحی زبانی متأثر از تئوری های دایسترا (Dijkstra)، هور (Hoare) و دال (Dahl) گرفت و سرانجام تلاش او زبان پاسکال بود که به گفته خودش هدف از طراحی زبان پاسکال بر دو مبنا بود: طراحی زبانی اصولی برای آموزش برنامه نویسی و گسترش زبانی که قابلیت اطمینان و کارایی بالایی برای کامپیوترهای موجود دارد.
en:Modula
en:Modula-2
en:Modula-2+
en:Modula 3
Modula-2 By John Bogan
http://www.engin.umd.umich.edu/CIS//course.des/cis400/modula2/modula2.html
Modula-3: Language definition
The ModulaTor Oberon-2 and Modula-2 Technical Publication
یک پروژه برای به انجام رسیدن به دو چیز نیاز دارد. اول لیستی از مسائل مرتبط با پروژه و دیگر راه حل هر یک از این مسائل که به راهکاری برای پروژه منجر می شوند. شرایط مشابهی در برنامه نویسی برای به انجام رساندن یک پروژه وجود دارد. چیزی که مرکز تحقیقات پالو آلتو (PARC)، جایی که ورث مشغول به کار بود، به آن نیاز داشتند نوعی زبان برنامه نویسی بود که به کمک آن بتوان سیستم های بزرگ و پیچیده را پیاده کرد یا به عبارتی امکانی برای پیاده سازی واحدهایی مرتبط با سیستم که به طور جداگانه قابل ترجمه باشند. این واحدها اکنون مادول گفته می شود. زیانی که ورث در صدد طراحی آن برای رفع نیازهای PARC بود، برگرفته از زبان پاسکال با تأکید بیشتری بر واحدهای برنامه نویسی یا همان مادول ها بودند و به همین علت مادولا نام گرفت.امکاناتی کامپیوترهای سال 1977 مهیا می کردند پردازنده های مرکزی بودند که سیستم های پیچیده time-sharing را مدیریت می کردند و با ترمینال ها قابل دسترسی بودند. انقلاب بزرگ پدیدار شدن سیستم های شخصی آلتو که در PARC توسعه یافته بودند ورث را متقاعد کرد که در آینده، توسعه نرم افزار بر اساس این سیستم های شخصی خواهد بود. در حالی که این سیستم ها در آن زمان در بازارها موجود نبودند یک راه برای PARC وجود داشت و آن این بود که خود این امکانات را فراهم آورد. محصول این پروژه ساخت ایستگاه کاری لیلیت (Lilith) بود. ساخت سخت افزارهای جدید ملزم به فراهم کردن سیستم عامل، نرم افزارهای کاربردی و به همینطور زبان و کامپایلر مناسب برای آن است. در واقع محرک اصلی طراحی زبان Modula-2 ایجاد زبانی ساده بود که بتواند ساخت نرم افزارهای مورد نیاز لیلیت را تحت پوشش قرار دهد تا به سیستمی قدرتمند برای توسعه نرم افزار تبدیل شود. اسناد و اهداف ساخت این زبان جدید در سال 1977 تدوین شدند و طراحی زبان به سال های 1978-79 موکول شد و هم زمان با آن پروژه پیاده سازی یک مترجم برای زبان شروع شد. اولین کامپایلر مادولا-2 که توسط K. Van Lee (1979) نوشته شد شامل هفت مرحله بود که هر یک خروجی میانی را تولید می کردند (Intermediate Code Generation). این مراحل در طراحی دوم توسط U. Ammann به پنج مرحله تقلیل یافت. مرحله اول، اسکنر، رشته ای از نشانه ها (Tokens) و جدول شناسه های و اسامی را تولید می کرد، در مرحله دوم، آنالیز گرامر (Syntax analysis) توسط پارسر صورت می گرفت و مرحله سوم چک کردن تایپ (Type Checking) بود. مراحل چهارم و پنجم به تولید کد نهایی (Code Generation)اختصاص داده شده بود. نسخه نهایی کامپایلر در سال 1979 به اتمام رسید. Modula-2 در سال 1982 به صورت تجاری توسط کمپانی تازه تأسیس DISER با نام کامپایلرهای MC1 و MC2 عرضه شد. Modula-2 به عنوان زبانی که ادامه دهنده زاه پاسکال بود و از زبان برنامه نویسی Mesa نیز تأثیر فراوانی پذیرفته بود شناخته شد. Mesa زبانی بود که در دهه 70 از آن در PARC برای پروژه های سطح پایین و پیاده سازی های تیمی استفاده می شد. Modula-2 و ایستگاه کاری آن لیلیت، همواره کنار یکدیگر شناخته شده اند و اولین سیستمی را تشکیل می دادند که امکانات کامپیوتر شخصی به همراه محیط گرافیکی با تفکیک بالا و پنجره ای، موشواره، ویراشگرهای متن با فونت های مختلف و چاپگر لیزری مدت ها قبل از مکینتاش ارائه کردند. زبان Modula-2+ یکی از فرزندان زبان Modula-2 بود که در SCR DEC [Systems Research Center of Digital Equipment Corporation) در پالو آلتو کالیفرنیا گسترش یافت. این زبان ماهیتاً همان زبان Modula-2 بود که امکانات مدیریت استثناء و امکان تعریف وظیفهٔ هم زمان (Threads) به آن اضافه شد. گروه سازنده این زبان توسط P. Rovner در سال 1984 سرپرستی می شدند. از قابلیت های دیگر Modula-2+ وجود Garbage Collection برای مدیریت حافظه پویا بود. زبان Modula-3 در اواخر دهه 80 توسط Luca Cardelli، Jim Donahue، Mick Jordan، Bill Kalsow و Greg Nelson در DEC SRC ساخته شد. این زبان در طراحی زبان هایی همچون JAVA، C# و Python تأثیرگذار بود ولی در تجارت هرگز به طور گسترده بکار گرفته نشد. طراحی این زبان از طراحی Modula-2 بسیار تأثیر پذیرفته بود. خصوصیتهای مهم Modula-3 سادگی و امنیت بالای این زبان است. در طراحی Modula-3 تلاش شد که امنیت تایپ داده های پاسکال دنبال شود و در عین حال ساختارهای جدید برای کاربردهای واقعی اضافه شود. در Modula-3 امکان برنامه نویسی generic (مانند template ها ) ساختارهای چند وظیفه ای، مدیریت استثناء، Garbage Collection، برنامه نویسی شیئ گرا، Partial Revelation و کپسوله سازی اضافه شد. هدف از طراحی Modula-3 ساخت زبانی بود که از مهم ترین امکانات زبان های برنامه نویسی مدرن امروزی به فرم ساده استفاده کند و از امکاناتی مانند وراثت چندگانه و اشتقاق عملگرها که باعث پیچیدگی و ناامنی زبان می شدند جلوگیری شود. در دهه 90 Modula-3 جایگاه قابل توجهی در آموزش برنامه نویسی کسب کرد ولی همچنان در کابردهای تجاری چندان به کار گرفته نشد. در آن زمان کامپایلر CM3 و محیط کاری Reactor به صورت یکپارچه برای کربرد تجاری توسط Critical Mass Inc. ارائه شد ولی فعالیت شرکت در سال 2000 در رابطه با Modula-3 متوقف شد. در حال حاضر Modula-3 در دانشگاه ها عموماً در درس هایی که به مقایسه زبان های برنامه نویسی می پردازند تدریس می شود و کتاب های مربوط به Modula-3 دیگر چاپ می شوند. ادامه کار Modula-3 از سال 2000 با خرید کامل Modula-3 از Critical Mass Inc. توسط elego Software Solutions GmbH و تولید نسخه هایی از CM3 محدود شد. Reactor IDE به صورت open source با نام CM3-IDE عرضه شد و در سال 2002 فعالیت elego در رابطه با Modula-3 با آخرین نسخه آن، PM3 به پایان رسید.
تمام نسخه های مختلف و فرزندان زبان مادولا از نوع زبان های امری و از خانواده زبان های بلوکی الگول 60 هستند. زبان های خانواده مادولا اکثر ساختارهای کنترلی معمول در زبان های بلوکی را دارا می باشند مانند: For، Loop، Repeat، Loop، While، If، Case، With. در Modula و Modula-2 مفاهیم شیئ گرایی به مادول ها و مفهوم ضمنی Interface که مادول ها فراهم می آورند و رکوردها محدود می شود. در Modula-2+ و Modula-3 پایه هایی از مفاهیم شیئ گرایی مانند وراثت و Generics اضافه شدند.
مانند زبان الگول 60 زبان مادولا و تمام زبان های مشتق شده از این زبان، سیستم تایپ قوی دارند (Strongly Typed) . در زبان های مادولا تایپ تمام عبارتها و متغیرها در زمان کامپایل مشخص می شوند و تایپ یک عبارت با استفاده از زیر عبارتهای آن عبارت مشخص می شوند. همچنین در زبان های مادولا تبدیل خودکار تایپ وجود ندارد و تبدیل تایپ باید به طور صریح انجام شود. در زبان Modula-2 تطابق تایپ داده به صورت اسمی بود (Name Equivalence)و در زبان Modula-3 به تطابق ساختاری (Structural Equivalence) تغییر یافت. در Modula-3 تایپ داده به انواع زیر تقسیم می شوند:
en:Modula
en:Modula-2
en:Modula-2+
en:Modula 3
Modula-2 By John Bogan
http://www.engin.umd.umich.edu/CIS//course.des/cis400/modula2/modula2.html
Modula-3: Language definition
The ModulaTor Oberon-2 and Modula-2 Technical Publication
یک پروژه برای به انجام رسیدن به دو چیز نیاز دارد. اول لیستی از مسائل مرتبط با پروژه و دیگر راه حل هر یک از این مسائل که به راهکاری برای پروژه منجر می شوند. شرایط مشابهی در برنامه نویسی برای به انجام رساندن یک پروژه وجود دارد. چیزی که مرکز تحقیقات پالو آلتو (PARC)، جایی که ورث مشغول به کار بود، به آن نیاز داشتند نوعی زبان برنامه نویسی بود که به کمک آن بتوان سیستم های بزرگ و پیچیده را پیاده کرد یا به عبارتی امکانی برای پیاده سازی واحدهایی مرتبط با سیستم که به طور جداگانه قابل ترجمه باشند. این واحدها اکنون مادول گفته می شود. زیانی که ورث در صدد طراحی آن برای رفع نیازهای PARC بود، برگرفته از زبان پاسکال با تأکید بیشتری بر واحدهای برنامه نویسی یا همان مادول ها بودند و به همین علت مادولا نام گرفت.امکاناتی کامپیوترهای سال 1977 مهیا می کردند پردازنده های مرکزی بودند که سیستم های پیچیده time-sharing را مدیریت می کردند و با ترمینال ها قابل دسترسی بودند. انقلاب بزرگ پدیدار شدن سیستم های شخصی آلتو که در PARC توسعه یافته بودند ورث را متقاعد کرد که در آینده، توسعه نرم افزار بر اساس این سیستم های شخصی خواهد بود. در حالی که این سیستم ها در آن زمان در بازارها موجود نبودند یک راه برای PARC وجود داشت و آن این بود که خود این امکانات را فراهم آورد. محصول این پروژه ساخت ایستگاه کاری لیلیت (Lilith) بود. ساخت سخت افزارهای جدید ملزم به فراهم کردن سیستم عامل، نرم افزارهای کاربردی و به همینطور زبان و کامپایلر مناسب برای آن است. در واقع محرک اصلی طراحی زبان Modula-2 ایجاد زبانی ساده بود که بتواند ساخت نرم افزارهای مورد نیاز لیلیت را تحت پوشش قرار دهد تا به سیستمی قدرتمند برای توسعه نرم افزار تبدیل شود. اسناد و اهداف ساخت این زبان جدید در سال 1977 تدوین شدند و طراحی زبان به سال های 1978-79 موکول شد و هم زمان با آن پروژه پیاده سازی یک مترجم برای زبان شروع شد. اولین کامپایلر مادولا-2 که توسط K. Van Lee (1979) نوشته شد شامل هفت مرحله بود که هر یک خروجی میانی را تولید می کردند (Intermediate Code Generation). این مراحل در طراحی دوم توسط U. Ammann به پنج مرحله تقلیل یافت. مرحله اول، اسکنر، رشته ای از نشانه ها (Tokens) و جدول شناسه های و اسامی را تولید می کرد، در مرحله دوم، آنالیز گرامر (Syntax analysis) توسط پارسر صورت می گرفت و مرحله سوم چک کردن تایپ (Type Checking) بود. مراحل چهارم و پنجم به تولید کد نهایی (Code Generation)اختصاص داده شده بود. نسخه نهایی کامپایلر در سال 1979 به اتمام رسید. Modula-2 در سال 1982 به صورت تجاری توسط کمپانی تازه تأسیس DISER با نام کامپایلرهای MC1 و MC2 عرضه شد. Modula-2 به عنوان زبانی که ادامه دهنده زاه پاسکال بود و از زبان برنامه نویسی Mesa نیز تأثیر فراوانی پذیرفته بود شناخته شد. Mesa زبانی بود که در دهه 70 از آن در PARC برای پروژه های سطح پایین و پیاده سازی های تیمی استفاده می شد. Modula-2 و ایستگاه کاری آن لیلیت، همواره کنار یکدیگر شناخته شده اند و اولین سیستمی را تشکیل می دادند که امکانات کامپیوتر شخصی به همراه محیط گرافیکی با تفکیک بالا و پنجره ای، موشواره، ویراشگرهای متن با فونت های مختلف و چاپگر لیزری مدت ها قبل از مکینتاش ارائه کردند. زبان Modula-2+ یکی از فرزندان زبان Modula-2 بود که در SCR DEC [Systems Research Center of Digital Equipment Corporation) در پالو آلتو کالیفرنیا گسترش یافت. این زبان ماهیتاً همان زبان Modula-2 بود که امکانات مدیریت استثناء و امکان تعریف وظیفهٔ هم زمان (Threads) به آن اضافه شد. گروه سازنده این زبان توسط P. Rovner در سال 1984 سرپرستی می شدند. از قابلیت های دیگر Modula-2+ وجود Garbage Collection برای مدیریت حافظه پویا بود. زبان Modula-3 در اواخر دهه 80 توسط Luca Cardelli، Jim Donahue، Mick Jordan، Bill Kalsow و Greg Nelson در DEC SRC ساخته شد. این زبان در طراحی زبان هایی همچون JAVA، C# و Python تأثیرگذار بود ولی در تجارت هرگز به طور گسترده بکار گرفته نشد. طراحی این زبان از طراحی Modula-2 بسیار تأثیر پذیرفته بود. خصوصیتهای مهم Modula-3 سادگی و امنیت بالای این زبان است. در طراحی Modula-3 تلاش شد که امنیت تایپ داده های پاسکال دنبال شود و در عین حال ساختارهای جدید برای کاربردهای واقعی اضافه شود. در Modula-3 امکان برنامه نویسی generic (مانند template ها ) ساختارهای چند وظیفه ای، مدیریت استثناء، Garbage Collection، برنامه نویسی شیئ گرا، Partial Revelation و کپسوله سازی اضافه شد. هدف از طراحی Modula-3 ساخت زبانی بود که از مهم ترین امکانات زبان های برنامه نویسی مدرن امروزی به فرم ساده استفاده کند و از امکاناتی مانند وراثت چندگانه و اشتقاق عملگرها که باعث پیچیدگی و ناامنی زبان می شدند جلوگیری شود. در دهه 90 Modula-3 جایگاه قابل توجهی در آموزش برنامه نویسی کسب کرد ولی همچنان در کابردهای تجاری چندان به کار گرفته نشد. در آن زمان کامپایلر CM3 و محیط کاری Reactor به صورت یکپارچه برای کربرد تجاری توسط Critical Mass Inc. ارائه شد ولی فعالیت شرکت در سال 2000 در رابطه با Modula-3 متوقف شد. در حال حاضر Modula-3 در دانشگاه ها عموماً در درس هایی که به مقایسه زبان های برنامه نویسی می پردازند تدریس می شود و کتاب های مربوط به Modula-3 دیگر چاپ می شوند. ادامه کار Modula-3 از سال 2000 با خرید کامل Modula-3 از Critical Mass Inc. توسط elego Software Solutions GmbH و تولید نسخه هایی از CM3 محدود شد. Reactor IDE به صورت open source با نام CM3-IDE عرضه شد و در سال 2002 فعالیت elego در رابطه با Modula-3 با آخرین نسخه آن، PM3 به پایان رسید.
تمام نسخه های مختلف و فرزندان زبان مادولا از نوع زبان های امری و از خانواده زبان های بلوکی الگول 60 هستند. زبان های خانواده مادولا اکثر ساختارهای کنترلی معمول در زبان های بلوکی را دارا می باشند مانند: For، Loop، Repeat، Loop، While، If، Case، With. در Modula و Modula-2 مفاهیم شیئ گرایی به مادول ها و مفهوم ضمنی Interface که مادول ها فراهم می آورند و رکوردها محدود می شود. در Modula-2+ و Modula-3 پایه هایی از مفاهیم شیئ گرایی مانند وراثت و Generics اضافه شدند.
مانند زبان الگول 60 زبان مادولا و تمام زبان های مشتق شده از این زبان، سیستم تایپ قوی دارند (Strongly Typed) . در زبان های مادولا تایپ تمام عبارتها و متغیرها در زمان کامپایل مشخص می شوند و تایپ یک عبارت با استفاده از زیر عبارتهای آن عبارت مشخص می شوند. همچنین در زبان های مادولا تبدیل خودکار تایپ وجود ندارد و تبدیل تایپ باید به طور صریح انجام شود. در زبان Modula-2 تطابق تایپ داده به صورت اسمی بود (Name Equivalence)و در زبان Modula-3 به تطابق ساختاری (Structural Equivalence) تغییر یافت. در Modula-3 تایپ داده به انواع زیر تقسیم می شوند: