کاربردهای رایانه

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





CSIR Mk I نیز که نخستین رایانه استرالیایی بود برای ارزیابی میزان بارندگی در کوه‌های اسنوئی (Snowy)این کشور بکاررفت، این محاسبات در چارچوب یک پروژه عظیم تولید برقابی انجام گرفت.

برخی رایانه‌ها نیز برای انجام رمزگشایی بکارگرفته می‌شد، برای مثال Colossus که در جریان جنگ جهانی دوم ساخته شد، جزو اولین کامپیوترهای برنامه‌پذیر بود (البته ماشین تورینگ کامل نبود). هرچند رایانه‌های بعدی می‌توانستند برنامه‌ریزی شوند تا شطرنج بازی کنند یا تصویر نمایش دهند و سایر کاربردها را نشان دهد.

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

کاهش پیوسته قیمت‌های رایانه باعث شد تا سازمان‌های کوچک‌تر نیز بتوانند آن‌ها را در اختیار بگیرند. بازرگانان، سازمان‌ها، و سیاست‌مداران اغلب تعداد زیادی از کامپیوترهای کوچک را برای تکمیل وظایفی که قبلا برای تکمیلشان نیاز به رایانه بزرگ (mainframe) گران‌قیمت و بزرگ بود، به کار بگیرند. مجموعه‌هایی از رایانه‌های کوچک‌تر در یک محل اغلب به‌عنوان خادم سر (server farm) نام برده می‌شود.

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

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

نیز تنها ۴۹۵ دلار قیمت داشت! قیمت آن کامپیوتر نیز ۳٬۰۰۵ دلار بود و IBM در آن زمان توانست ۶۷۱٬۵۳۷ دستگاه از آن را بفروشد.




انواع رایانه

رایانه‌های توکار (جاسازی شده)

رایانه‌هایی هم وجود دارند که تنها برای کاربردهایی ویژه طراحی می‌شوند. در ۲۰ سال گذشته، هرچند برخی ابزارهای خانگی که از نمونه‌های قابل ذکر آن می‌توان جعبه‌های بازی‌های ویدئویی را که بعدها در دستگاه‌های دیگری از جمله تلفن همراه، دوربین‌های ضبط ویدئویی، و PDAها و ده‌ها هزار وسیله خانگی، صنعتی، خودروسازی و تمام ابزاری که در درون آن‌ها مدارهایی که نیازهای ماشین تورینگ را مهیا ساخته‌اند، گسترش یافت، را نام برد (اغلب این لوازم برنامه‌هایی را در خود دارند که بصورت ثابت روی ROM تراشه‌هایی که برای تغییر نیاز به تعویض دارند، نگاشته شده‌اند). این رایانه‌ها که در درون ابزارهای با کاربرد ویژه گنجانیده شده‌اند «ریزکنترل‌گرها» یا رایانه‌های توکار" (Embedded Computers) نامیده می‌شوند. بنا بر این تعریف این رایانه‌ها به عنوان ابزاری که با هدف پردازش اطّلاعات طراحی گردیده محدودیت‌هایی دارد. بیش‌تر می‌توان آن‌ها را به ماشین‌هایی تشبیه کرد که در یک مجموعه بزرگ‌تر به عنوان یک بخش حضور دارند مانند دستگاه‌های تلفن، ماکروفرها و یا هواپیما که این رایانه‌ها بدون تغییری فیزیکی به دست کاربر می‌توانند برای هدف‌های گونه‌گونی به کارگرفته شوند.




رایانه‌های شخصی

اشخاصی که با انواع دیگری از رایانه‌ها ناآشنا هستند از عبارت رایانه برای رجوع به نوع خاصی استفاده می‌کنند که رایانه شخصی (PC) نامیده می‌شوند. رایانه‌ای است که از اجزای الکترونیکی میکرو (ریز) تشکیل شده که جزو کوچک‌ترین و ارزان‌ترین رایانه‌ها به شمار می‌روند و کاربردهای خانگی و اداری دارند. شرکت آی‌بی‌ام رایانه شخصی را در سال ۱۹۸۱ میلادی به جهان معرفی کرد.

نخستین رایانه‌ آی‌بی‌ام از برخی از ماشین حساب‌های امروزی نیز ضعیف‌تر است ولی در آن زمان شگفت انگیز بود. رایانه شخصی سی سال پیش دارای حافظه ROM با ظرفیت 40K و حافظه RAM با ظرفیت 64K بود. البته کاربر می‌توانست حافظه RAM را تا 256K افزایش دهد. قیمت هر ماژول 64K حافظه والانیوز




سرمایه‌گذاری

صنعت رایانه همواره صنعتی رو به رشد بوده است چه در حوزهٔ سخت‌افزار چه در حوزهٔ نرم‌افزار، این صنعت پیوسته مورد توجه سرمایه گذاران بوده است و سرمایه‌ها را به خود جذب کرده است. آیندهٔ روشن این فناوری همواره سرمایه داران را ترغیب می‌کند تا روی این صنعت ‍سرمایه‌گذاری کنند.




پست‌اسکریپت
پست‌اسکریپت (PostScript و به‌طور خلاصه PS) یک زبان برنامه‌نویسی پویا و الحاقی است که توسط John Warnock و Charles Geschke در سال ۱۹۸۲ طراحی شد. پست اسکریپت یک زبان توصیف صفحه است که با یک مفسر اجرا می‌شود تا یک تصویر را ایجاد کند. پست‌اسکریپت بهترین زبان شناخته شده برای توصیف صفحات در زمینه‌های الکترونیک و منتشر کردن دسکتاپ است.




تاریخچه

مفاهیم زبان پست‌اسکریپت در سال ۱۹۷۶ هنگامی که جان وارناک روی Evans & Sutherland، شرکت مشهور گرافیک کامپیوتری، کار می‌کرد، شکل گرفت. در آن زمان جان وارناک در حال گسترش و توسعهٔ یک مفسر برای پایگاه‌داده گرافیکی سه بعدی بزرگ پناه‌گاه نیویورک بود. وارناک سیستم طراحی زبان را به منظور پردازش گرافیک شکل داد.

در همان زمان محققان Xerox PARC اولین چاپگر لیزری را گسترش دادند و متوجه نیاز برای یک استاندارد تعریف صفحات تصویر شدند. در سال ۱۹۷۵-۷۶ یک تیم به رهبری باب اسپرول قالب پرس را ساختند که در نهایت در سیستم Xerox PARC برای پرینترهای لیزری استفاده شد. اما پرس بیش‌تر به عنوان یک قالب داده، و نه یک زبان، انعطاف‌پذری کافی را نداشت و PARAC تلاش کرد با ایجاد اینترپرس جایگزینی برای آن ایجاد کند.

در سال ۱۹۷۸، Evand & Sutherland از وارناک خواست تا از منطقهٔ خلیج سنفرانسیسکو به دفتر مرکزی آنها در یوتا برود، اما او مشتاق به این کار نبود. او سپس به Xerox PARAC پیوست تا با مارتین نیول همکاری کند. آن‌ها دوباره سیستم طراحی JaM (جان و مارتین) را ساختند که در طراحی VLSI و بدست آوردن اطلاعات مقدماتی برای تایپ و چاپ گرافیکی استفاده شد. این تلاش در نهایت به زبان اینترپرس انجامید.

در سال ۱۹۸۲ وارناک به همراه چاک گشک Adobe Systems را در دسامبر ۱۹۸۲ پایه‌گذاری کردند. آنها یک زبان ساده‌تر، مشابه اینترپرس با نام پست‌اسکریپت طراحی کردند که در سال ۱۹۸۴ به بازار آمد. در همین زمان‌ها، استیو جابز، آنها را ملاقات کرد و آنها را متقاعد کرد تا پست‌اسکریپت را طوری تغییر دهند تا بتواند به عنوان زبانی برای چاپگرهای لیزری مورد استفاده قرار گیرد.

در مارس ۱۹۸۵، Apple LaserWriter، اولین چاپگری بود که از پست‌اسکریپت استفاده کرد و اولین جرقه‌های انقلاب انتشار دسکتاپ در اواسط دههٔ ۱۹۸۰ زده شد. ترکیب ویژگی‌های تکنیکی و در دسترس بودن پست‌اسکریپت، آن را یک زبان مطرح برای خروجی‌های گرافیکی برای کاربردهای چاپ کردن ساخت. برای مدتی مفسر این زبان (پردازش تصویر بیت به بیت یا RIP) یک بخش از همان پرینترهای لیزری بود تا ۱۹۹۰.

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

پست اسکریپت که زمانی استاندارد غیر رسمی پذیرفته شده برای نسخه الکترونیکی نهایی مقالات بود، به تدریج توسط فرمت PDF که نواده آن است، در حال جایگزینی است. در سال ۲۰۰۱ پرینترهای کمتری با پشتیبانی پست اسکریپت نسبت به سال‌های قبل وارد بازار شدند که علت اصلی آن افزایش رقابت با پرینترهای جوهرافشان به مراتب ارزان قیمتتر غیر پست اسکریپتی و همچنین ابداع روش‌های جدید نرم‌افزارمحور برای پردازش عکس‌های پست‌اسکریپت بر روی کامپیوتر (مثل PDF) بوده‌است. اما استفاده از پرینتر لیزری پست‌اسکریپتی هنوز می‌تواند میزان کار لازم توسط CPU برای چاپ نوشته‌ها را از طریق انتقال پردازش تصویر از کامپیوتر به پرینتر به میزان قابل توجهی کاهش دهد. در نتیجه PS هنوز یک گزینهٔ معقول برای مدل‌های گران‌قیمت است.




پست‌اسکریپت سطح ۱

زبان پست‌اسکریپت دو پیشرفت اساسی داشت که اولین آنها پست‌اسکریپت سطح ۱ است که در سال ۱۹۸۴ معرفی شد.




پست‌اکریپت سطح ۲

پست‌اسکریپت سطح ۲ در سال ۱۹۹۱ معرفی شد و چندین برتری مثل سرعت و قابلیت اطمینان آن بیش، پشتیبانی از جداسازی‌های in-RIP و همچنین پشتیبانی از بازسازی تصویر و فونت‌های مرکب را دارا بود.




پست‌اسکریپت ۳

پست‌اسکریپت ۳ (کلمهٔ سطح را به خاطر راحتی برداشتند) در اواخر ۱۹۹۷ آمد وعلاوه بر استفاده از نسخه‌های جدیدتر عملگرهای قدیمی‌تر لغت نامه‌ای، فیلترهای جدید و کار با رنگ را پشتیبانی می‌کرد.

پست‌اسکریپت ۳ به دلیل جایگزینی سیستم پردازش الکترونیکی خصوصی موجود، اهمیت زیادی داشت و از آن به خاطر دارا بودن عملگرهای سایه‌دهی هموار تا ۴۰۹۶ سایهٔ خاکستری (در مقایسه با ۲۵۶ تایی که در پست‌اسکریپت ۲ وجود داشت) استفادهٔ وسیعی در تولید مجله‌ها و همچنین DeviceN (که یک فضای رنگی بود که اضافه کردن جوهرهای رنگی اضافی را در صفحات رنگی مرکب را دارا بود) شد.




استفاده در چاپ
قبل از پست‌اسکریپت

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

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

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




چاپ پست‌اسکریپت

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

به تدریج پست‌اسکریپت، به زبانی فراتر از یک زبان کنترلی برای چاپگرها تبدیل شد و به صورت یک زبان کامل برای خودش در آمد. برنامه‌های زیادی برای تبدیل متن به برنامهٔ پست‌اسکریپت به وجود آمدند که کد متن اصلی را تولید می‌کردند. این برنامه می‌توانست به یک مفسر در چاپگر فرستاده شود تا آن را چاپ کند، یا در داخل یک برنامه دیگر مثلا با نشان دادن آن روی صفحه به کار برده شود. چون این فایل مستقل از مقصدش ساخته می‌شود به آن مستقل از دستگاه (Device independent) می‌گویند.

پست‌اسکریپت به دلیل قابلیت پیاده‌سازی تبدیل بیت به بیت به صورت آنی مورد توجه‌است. همه چیز حتی متن در قالب خط‌های صاف و منحنی‌های بزیر (Bézier curves) مکعبی بیان می‌شود. به همین دلیل امکان مقیاس‌دهی دلخواه، چرخاندن و دیگر تبدیلات در آن وجود دارد. وقتی برنامهٔ پست‌اسکریپت تفسیر می‌شود، مفسر دستورها را به نقاطی برای تولید خروجی تبدیل می‌کند. به همین دلیل مفسرهای پست‌اسکریپت گاهی پردازنده‌های تصویر بیت به بیت پست‌اسکریپت یا RIP نامیده می‌شوند.
به کار بردن فونت

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

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

در آن زمان تکنولوژی پیدا کردن و دارا شدن این نکات در فونت به خوبی اجرا و نگه‌داری شد و این نکات فشرده‌سازی و رمزنگاری شدند و به صورت فونت تایپ ۱ که آدوب آن را اینگونه خواند، درآمدند (همچنین با نام فونت پست‌اسکریپت نوع ۱، PS۱، T۱ و تایپ ۱ آدوب از آنها یاد شد). تایپ ۱ یک مدل ساده شده از سیستم PS برای نگه‌داری اطلاعات کلی قالب بود و نگذاشت به یک زبان کامل تبدیل شود. سپس آدوب مجوز تکنولوژی تایپ۱ را به افرادی که می‌خواستند نکات خودشان را اضافه کنند فروخت. آن‌هایی که مجوز این تکنولوژی را نگرفتند در تایپ۳ استفاده شد. فونت تایپ ۳ اجازهٔ تمام پیچیدگی‌های زبان پست‌اسکریپت را داد اما هیچ راهی برای استاندارد کردن نکات نداشت. تفاوت‌های بیش‌تر باعث سردرگمی بیشتر شد.

تایپ ۲ برای استفاده در قالب فونت فشرده طراحی شد و برای نمایش فشرده توابع توصیف علائم به منظور کم کردن سایز فایل، پیاده‌سازی شد. بعدها قالب تایپ۲ پایه‌ای برای تایپ۱ فونتهای تایپ‌باز شد.

فونت کلید CID نیز برای برطرف کردن مشکلات موجود در فونت تایپ OCF طراحی شد. برای آدرس دادن زبان‌های پیچیدهٔ آسیایی و مجموعه‌های کاراکترهای بزرگ. فونت کلید CID به همراه فونت تایپ۱ برای فونتهای کلید CID استاندارد و به همراه تایپ۲ در فونت‌های تایپ باز استفاده می‌شود.

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

در اویل دههٔ ۱۹۹۰ سیستم‌های متعددی برای ذخیره‌سازی فونت‌های شکلی وجود داشت، برای مثال بیتستریم و متافونت، آن را گسترش دادند. اما هیچ یک شامل جوابی برای چاپ همه‌منظوره نبود و در نتیجه به صورت گسترده استفاده نشدند.

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




دیگر پیاده‌سازی‌ها

در دههٔ ۱۹۸۰، آدوب بیش‌تر سود خود را از دادن مجوز برای پیاده‌سازی پست‌اسکریپت برای چاپگرها بدست می‌آورد که به RIP (raster image processor) معروف بود. اما هنگامی که در اواسط دههٔ ۸۰ تعدادی کامپیوتر RISK به بازار آمد، به نظر آمد که پشتیبانی آدوب برای ماشین‌های جدید ناقص است.

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

امروزه مفسرهای شخص ثالث برای پست‌اسکریپت به صورت وسیع در چاپگرها و دیگر دستگاه‌های جانبی چند منظوره (MFP) کاربرد دارد. برای مثال مفسر IPS PS۳ شرکت زوران (Zoran) که به نام PhoenixPage معروف بود در بسیاری از چاپگرها و MFPها به عنوان استاندارد انتخاب شد مانند Jaws و Harlequin.

هنوز هم برخی چاپگرهای لیزری ارزان و پایه‌ای از پست‌اسکریپت پشتیبانی نمی‌کنند و هنگامی که به پشتیبانی از آن احتیاج دارند از یک مفسر رایگان سازگار با پست‌اسکریپت با نام گست‌اسکریپت استفاده می‌کنند. پرینترها گست‌اسکریپت یک فایل غیرپست‌اسکریپت را گرفته و با استفاده از CPU کامپیوتر میزبان عمل تبدیل تصویر به نقشهٔ بیت به بیت (rasterization) و فرستادن آن به چاپگر را انجام می‌دهند. گست‌اسکریپت همچنان می‌تواند جهت نمایش یک فایل روی صفحهٔ مانیتور و تبدیل صفحات پست‌اسکریپت به به نقشهٔ بیت به بیت (bitmap) مانند TIFF، PNG و PDF استفاده شود.

دستگاه‌های با وضوح بالا مانند imagesetter یا CTP platesetter که در آنها وضوح بیش از ۲۵۰۰ dpi رایج بود، همچنان به RIPهای خارجی با حجم زیادی حافظه نرم و سخت نیاز داشت. چاپگرهای لیزری گرانقیمت (معروف به چاپ دیجیتال) نیز از یک RIP خارجی به منظور جداسازی کامپیوترهای قابل ارتقا از دستگاه‌های سخت‌افزاری چاپ استفاده می‌کردند. شرکت‌هایی مانند EFI و Xitron در زمینهٔ نرم‌افزار RIP تخصص داشتند.




استفاده به عنوان سیستم نمایش

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

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

با این حال پست‌اسکریپت با چاپ ضمنی نوشته شده بود و تعدادی خصیصه داشت که آن را برای سیستم‌های نمایش تعاملی نامناسب می‌ساخت. به ویژه PS بر مبنای این ایده بود که تمامی دستورات را جمع می‌کرد و هنگامی که به دستور showpage می‌رسید، تمامی دستورات جمع شده، تفسیر شده و خروجی حاصل می‌شد. که به وضوح برای سیستم‌های تعاملی مناسب نبود.

هنگامی که استیو جابز شرکت اپل را ترک کرد و NeXT را شروع کرد. او با آدوب روی ایدهٔ استفاده از PS به عنوان سیستم نمایش در ایستگاه کار (workstation) کامپیوترها همکاری کرد. نتیجهٔ این کار به پست‌اسکریپت نمایشی یا DPS انجامید. DPS برای بهبود کارایی از تعدادی کاربرد پایه استفاده کرد. این کار را با تغییر خیلی از جستارهای رشته‌ها به اعداد ۳۲ بیتی، اضافه کردن پشتیبانی از خروجی‌های مستقیم با هر دستور و اضافه کردن توابعی برای اجازه دادن به GUI برای رسیدگی کردن به نمودار انجام داد. به علاوه تعدادی وابسته‌سازی نیز فراهم شد تا کد PS بتواند به طور مستقیم از زبان C فراخوانی شود. NeXT از این وابسته‌سازی‌ها برای سیستم NeXTStep استفاده کرد تا یک سیستم گرافیکی شئ‌گرا فراهم کند. با اینکه DPS به همراه NeXT نوشته شد، آدوب آن را به صورت تجاری فروخت که از خصیصه‌های رایج بیشتر ایستگاه‌های کار یونیکس در دههٔ ۱۹۹۰ شد.

ریزسیستم‌های شرکت سان (Sun)، با ساختن NeWS روش دیگری را اتخاذ کردند. به جای این مفهوم که DPS می‌توانست با برنامه‌های C تعامل برقرار کند، NeWS، توانست PS را به زبانی مناسب برای اجرای کامل GUI یک کامپیوتر گسترش دهد. سان تعدادی دستور برای زمان، کنترل ماوس، منقطع‌سازی و سیستم‌های دیگری که برای تعامل لازم بود اضافه کرد. همچنین تعدادی داده‌ساختار و عنصر زبان نیز برای شئ‌گرا کردن داخلی کامل آن اضافه کرد. در آن زمان روی ایستگاه‌های کار آن‌ها یک (در واقع سه) GUI کامل به زبان NeWS فراهم شد. با این حال تلاش‌های در حال انجام برای استاندارد کردن سیستم X۱۱ باعث معرفی شدن و استفادهٔ وسیع آن در سیستم سان شد و NeWS هیچ وقت به صورت وسیع کاربرد پیدا نکرد.




زبان

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

پست‌اسکریپت یک زبان تفسیرشده و بر مبنای پشته‌است که به Forth شبیه‌است اما با سیستم تایپ قوی، الهام گرفته از داده‌ساختارهای موجود در زبان لیسپ و حافظهٔ حوزه‌ای است که بعد از پست‌اسکریپت سطح۲، آشغال‌جمع‌کن نیز به آن اضافه شد. نحو زبان از نمادگذاری معکوس لهستانی (reverse Polish notation) استفاده می‌کند که ترتیب عملیات را نامبهم می‌کند. اما خواندن یک برنامه به مقداری تمرین نیاز دارد چون فرد باید طرح پشته را در نظر داشته باشد. بیشتر عملگرها (یا به زبانی توابع) عملوندهای خود را از پشته می‌گیرد و نتیجهٔ خود را نیز در پشته می‌گذارند. الفاظ (literal) مانند اعداد، این تاثیر را دارند که یک کپی از خودشان را روی پشته بگذارند. داده‌ساختارهای پیشرفته روی آرایه‌ها و تایپ‌های لغت‌نامه‌ای، قابل ساخت بوده اما نمی‌توانستند به سیستم تایپ اعلان شوند چون سیستم تایپ همهٔ آن‌ها را را به صورت آرایه و لغت‌نامه می‌بیند.

مفاهیم موجود در زبان به این صورت است:

• کاراکتر ‘٪’ برای تعریف توضیح (comment) در زبان استفاده می‌شود. به عنوان یک قرارداد کلی هر برنامه پست‌اسکریپت باید با “٪!” شروع شود که تمام دستگاه‌ها آن را به عنوان یک برنامهٔ پست‌اسکریپت بفهمند.

• تعدادی پشته در این زبان وجود دارد اما دو پشتهٔ مهم آن شامل پشتهٔ عملوندها که برای اعمال عملگرها و فراخوانی توابع به کار می‌آید و پشتهٔ لغت‌نامه که شامل متغیرها و مقادیر آن‌هاست.

• لغتنامه که شامل دوتایی‌هایی از متغیرها و مقادیر آن هاست. همچنین عملگرها و کد مربوط به آنها نیز در آن ذخیره می‌شوند.

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

• اعداد شامل اعداد صحیح و حقیقی هستند و به دو نوع قابل نمایشند. یکی به صورت دادن مبنا و مقدار و دیگری با همان نمایش مانتیس و نما.

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

• آرایه‌ها نیز مانند سایر زبان‌ها هستند و می‌توانند شئ‌های از انواع مختلف را همزمان داشته باشند. یک تابع در این زبان مانند یک آرایه قابل اجرا است.

• مفاهیم گرافیکی موجود در این زبان نیز شامل فضای دستگاه، فضای کاربر، ماتریس تبدیل جاری، مسیر، مسیر فعلی، مسیر برش و حالت گرافیکی هستند.





شبکه رایانه‌ای
یک شبکه رایانه‌ای (به انگلیسی: Computer Network)، که اغلب به طور خلاصه به آن شبکه گفته می‌شود، گروهی از رایانه‌ها و دستگاه‌هایی می‌باشد که توسط کانال‌های ارتباطی به هم متصل شده‌اند. شبکه رایانه‌ای باعث تسهیل ارتباطات میان کاربران شده و اجازه می‌دهد کاربران منابع خود را به اشتراک بگذارند.




معرفی

یک شبکه رایانه‌ای اجازه به اشتراک گذاری منابع و اطلاعات را میان دستگاه‌های متصل شده به هم، می‌دهد. در دهه ۶۰ میلادی، آژانس پروژه‌های تحقیقاتی پیشرفته (ARPA)، بودجه‌ای را به منظور طراحی شبکه آژانس پروژه‌های تحقیقاتی پیشرفته (ARPANET) برای وزارت دفاع ایالات متحده آمریکا اختصاص داد. این اولین شبکه رایانه‌ای در جهان بود. توسعه شبکه از سال ۱۹۶۹ و براساس طرح‌های توسعه یافته دهه ۶۰ آغاز شد.




هدف

شبکه‌های رایانه‌ای را می‌توان برای اهداف مختلف استفاده کرد:

تسهیل ارتباطات: با استفاده از شبکه، افراد می‌توانند به آسانی از طریق رایانامه (E-mail)، پیام‌رسانی فوری، اتاق گفتگو (Chat room)، تلفن، تلفن تصویری و ویدئو کنفرانس، ارتباط برقرار کنند.
اشتراک گذاری سخت افزارها: در یک محیط شبکه‌ای، هر کامپیوتر در شبکه می‌تواند به منابع سخت افزاری در شبکه دسترسی پیدا کرده و از آن‌ها استفاده کند؛ مانند چاپ یک سند به وسیله چاپگری که در شبکه به اشتراک گذاشته شده‌است.
اشتراک گذاری پرونده‌ها، داده‌ها و اطلاعات: در یک محیط شبکه‌ای، هر کاربر مجاز می‌تواند به داده‌ها و اطلاعاتی که بر روی رایانه‌های دیگر موجود در شبکه، ذخیره شده‌است دسترسی پیدا کند. قابلیت دسترسی به داده‌ها و اطلاعات در دستگاه‌های ذخیره سازی اشتراکی، از ویژگی‌های مهم بسیاری از شبکه‌های است.
اشتراک گذاری نرم‌افزارها: کاربرانی که به یک شبکه متصل اند، می‌توانند برنامه‌های کاربردی موجود روی کامپیوترهای راه دور را اجرا کنند.



تعریف

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

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




دسته بندی شبکه‌های رایانه‌ای

فهرست زیر، دسته‌های شبکه‌های رایانه‌ای را نشان می‌دهد.




بر اساس نوع اتصال

شبکه‌های رایانه‌ای را می‌توان با توجه به تکنولوژی سخت افزاری و یا نرم‌افزاری که برای اتصال دستگاه‌های افراد در شبکه استفاده می‌شود، دسته بندی کرد؛ مانند فیبر نوری، اترنت، شبکه محلی بی‌سیم، HomePNA، ارتباط خط نیرو یا G.hn.

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

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

فناوری ITU-T G.hn از سیم کشی موجود در منازل (کابل هم‌محور، خطوط تلفن و خطوط برق) برای ایجاد یک شبکه محلی پر سرعت (تا۱ گیگا بیت در ثانیه) استفاده می‌کند.




بر اساس تکنولوژی سیم کشی

زوج به‌هم‌تابیده: زوج به‌هم‌تابیده یکی از بهترین رسانه‌های مورد استفاده برای ارتباطات راه دور می‌باشد. سیم‌های زوج به‌هم‌تابیده، سیم تلفن معمولی هستند که از دو سیم مسی عایق که دو به دو به هم پیچ خورده‌اند درست شده‌اند. از زوج به‌هم‌تابیده برای انتقال صدا و داده‌ها استفاده می‌شود. استفاده از دو سیم به‌هم‌تابیده به کاهش تداخل و القای الکترومغناطیسی کمک می‌کند. سرعت انتقال داده، دامنه‌ای از ۲ میلیون بیت درهر ثانیه تا ۱۰۰ میلیون بیت در هر ثانیه، دارد.
کابل هم‌محور: کابل هم‌محور به طور گسترده‌ای در سیستم‌های تلویزیون کابلی، ساختمان‌های اداری، و دیگر سایت‌های کاری برای شبکه‌های محلی، استفاده می‌شود. کابل‌ها یک رسانای داخلی دارند که توسط یک عایق منعطف محصور شده‌اند، که روی این لایهٔ منعطف نیز توسط یک رسانای نازک برای انعطاف کابل، به هم بافته شده‌است. همهٔ این اجزا، در داخل عایق دیگری جاسازی شده‌اند. لایه عایق به حداقل رساندن تداخل و اعوجاج کمک می‌کند. سرعت انتقال داده، دامنه‌ای از ۲۰۰ میلیون تا بیش از ۵۰۰ میلیون بیت در هر ثانیه دارد.
فیبر نوری: کابل فیبر نوری شامل یک یا چند رشته از الیاف شیشه‌ای پیچیده شده در لایه‌های محافظ می‌باشد. این کابل می‌تواند نور را تا مسافت‌های طولانی انتقال دهد. کابل‌های فیبر نوری تحت تاثیر تابش‌های الکترومغناطیسی قرار نمی‌گیرند. سرعت انتقال ممکن است به چند تریلیون بیت در ثانیه برسد.




بر اساس تکنولوژی بی سیم

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

ماهواره‌ها در فضا مستقر هستند؛ به طور معمول ۲۲۰۰۰ مایل (برای ماهواره‌های geosynchronous) بالاتر از خط استوا. این سیستم‌های در حال چرخش به دور زمین، قادر به دریافت و رله صدا، داده‌ها و سیگنال‌های تلویزیونی هستند.

تلفن همراه و سیستم‌های پی سی اس: تلفن همراه و سیستم‌های پی سی اس از چندین فناوری ارتباطات رادیویی استفاده می‌کنند. این سیستم‌ها به مناطق مختلف جغرافیایی تقسیم شده‌اند. هر منطقه دارای فرستنده‌های کم قدرت و یا دستگاه‌های رله رادیویی آنتن برای تقویت تماس‌ها از یک منطقه به منطقه بعدی است.
شبکه‌های محلی بی سیم: شبکه محلی بی سیم از یک تکنولوژی رادیویی فرکانس بالا (مشابه سلول دیجیتالی) و یک تکنولوژی رادیویی فرکانس پایین استفاده می‌کند. شبکه‌های محلی بی سیم از تکنولوژِی طیف گسترده، برای برقراری ارتباط میان دستگاه‌های متعدد در یک منطقه محدود، استفاده می‌کنند. نمونه‌ای از استاندارد تکنولوژی بی سیم موج رادیویی، IEEE است.
ارتباطات فروسرخ: ارتباط فروسرخ، سیگنال‌های بین دستگاه‌ها را در فواصل کوچک (کمتراز ۱۰ متر) به صورت همتا به همتا (رو در رو) انتقال می‌دهد؛ در خط انتقال نباید هیچ گونه شی ای قرار داشته باشد.




بر اساس اندازه

ممکن است شبکه‌های رایانه‌ای بر اساس اندازه یا گستردگی ناحیه‌ای که شبکه پوشش می‌دهد طبقه‌بندی شوند. برای نمونه «شبکه شخصی» (PAN)، «شبکه محلی» (LAN)، «شبکه دانشگاهی» (CAN)، «شبکه کلان‌شهری» (MAN) یا «شبکه گسترده» (WAN).



بر اساس لایه شبکه

ممکن است شبکه‌های رایانه‌ای مطابق مدلهای مرجع پایه‌ای که در صنعت به عنوان استاندارد شناخته می‌شوند مانند «مدل مرجع ۷ لایه OSI» و «مدل ۴ لایه TCP/IP»، بر اساس نوع «لایه شبکه»ای که در آن عمل می‌کنند طبقه‌بندی شوند.




بر اساس معماری کاربری

ممکن است شبکه‌های رایانه‌ای بر اساس معماری کاربری که بین اعضای شبکه وجود دارد طبقه‌بندی شود، برای نمونه معماری‌های Active Networking، «مشتری-خدمتگذار» (Client-Server) و «همتا به همتا» Peer-to-Peer (گروه کاری).



بر اساس همبندی (توپولوژی)

ممکن است شبکه‌های رایانه‌ای بر اساس نوع همبندی شبکه طبقه‌بندی شوند مانند: «شبکه باس» (Bus)، «شبکه ستاره» ((Star، «شبکه حلقه‌ای» (Ring)، «شبکه توری» (Mesh)، «شبکه ستاره-باس» (Star-Bus)، «شبکه درختی» (Tree) یا «شبکه سلسله مراتبی» (Hierarchical) و ترکیبی و غیره.

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




بر اساس قرارداد

ممکن است شبکه‌های رایانه‌ای بر اساس «قرارداد» ارتباطی طبقه‌بندی شوند. برای اطلاعات بیشتر لیست پشته‌های قرارداد شبکه و لیست قراردادهای شبکه را ببینید.
3:47 pm
کاربرد برنامه نویسی

زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف داده‌ها، و عملیات یا تبدیل‌هایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم می‌کند. یک برنامه نویس از انتزاعات آماده در زبان استفاده می‌کند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از ساده‌ترین عناصر موجود بیان می‌شوند(مفاهیم ابتدایی نامیده می‌شوند).





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

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

یک سیر رایج در گسترش زبان‌های برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبان‌های برنامه نویسی اولیه به سخت‌افزار رایانه گره خورده بودند. همانطور که زبان‌های برنامه نویسی جدید گسترش پیدا کرده‌اند، ویژگی‌هایی به برنامه‌ها افزوده شده که به برنامه نویس اجازه دهد که ایده‌هایی که از ترجمه ساده به دستورات سخت‌افزار دورتر هستند نیز استفاده کند. چون برنامه نویس‌ها کمتر به پیچیدگی رایانه محدود شده‌اند، برنامه‌های آنها می‌تواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را می‌دهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازنده‌های زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبان‌های اختصاصی برنامه نویسی پیشنهاد شده‌اند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.



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

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

دستور زبان برنامه نویسی معمولاً بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف می‌شوند. متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list atom ::= number | symbol number ::= [+-]?['۰'-'۹']+ symbol ::= ['A'-'Za'-'z'].* list ::= '(' expression* ')' این گرامر موارد ذیل را مشخص می‌کند:

یک عبارت یا atom است و یا یک لیست
یک atom یا یک عدد است و یا یک سمبل
یک عدد دنباله ناشکسته‌ای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت و یا منفی می‌تواند پیش از آن بیاید.
یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) می‌آید.
یک لیست تعدادی پرانتز است که می‌تواند صفر یا چند عبارت در خود داشته باشد.

"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثال‌هایی هستند از دنباله‌های خوش فرم در این گرامر.

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

به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اطلاق کرد و یا ممکن است جمله نادرست باشد:

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

این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام می‌دهد که از نظرمعنایی تعریف نشده است(چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد.) complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im);

گرامر مورد نیاز برای مشخص کردن یک زبان برنامه نویسی می‌تواند با جایگاهش در "سلسله مراتب چامسکی" طبقه بندی شود. دستور اغلب زبان‌های برنامه نویسی می‌تواند بوسیله یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.




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


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

یک زبان نوع گذاری شده‌است اگر مشخصات هر عملیات، نوع داده‌های قابل اجرا توسط آن را با نشان دادن نوع‌هایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشته‌است. در غالب زبان‌های برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبان‌های برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامه‌ها رد کنند. در برخی زبان‌ها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامه‌ها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبان‌های نوع دار زبان‌های تک نوعند. این زبان‌ها غالباً اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالباً رشته‌های کاراکتری که هم برای داده‌های عددی و هم برای داده‌های سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبان‌های اسمبلی، این امکان را می‌دهد که هر عملیاتی روی هر داده‌ای انجام شود، که معمولاً دنباله‌ای از بیت‌ها با طول‌های متفاوت در نظر گرفته می‌شوند. زبان‌های سطح بالا که بی نوع هستند شامل زبان‌های ساده رایانه‌ای و برخی از انواع زبان‌های نسل چهارم.

در عمل، در حالیکه تعداد بسیار کمی از دیدگاه نظریه نوع، نوع گذاری شده تلقی می‌شوند(چک کردن یا رد کردن تمام عملیات‌ها)، غالب زبان‌های امروزی درجه‌ای از نوع گذاری را فراهم می‌کنند. بسیاری از زبان‌های تولیدکننده راهی را برای گذشتن یا موقوف کردن سیستم نوع فراهم می‌کنند.



نوع گذاری ایستا و متحرک

در نوع گذاری ایستا تمام عبارات نوع‌های خود را قبل از اجرای برنامه تعیین می‌کنند(معمولاً در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمی‌توانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.


زبان‌های نوع گذاری شده ایستا می‌توانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحاً نوع‌ها را در جایگاه‌های منتنی مشخص می‌نویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریف‌ها را بر اساس متن استنباط می‌کند. غالب زبان‌های مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری می‌شوند



نوع گذاری قوی و ضعیف

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

نوع گذاری قوی مانع رخ دادن مشکل فوق می‌شود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا می‌شود. زبان‌هایی که نوع گذاری قوی دارند غالباً با نام "نوع-امن" و یا امن شناخته می‌شوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبان‌ها اشاره می‌کند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را می‌دهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل می‌کند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشته‌ای از حروف باشد. چنین تبدیلات ضمنی غالباً مفیدند، اما خطاهای برنامه نویسی را پنهان می‌کنند.

قوی و ایستا در حال حاضر عموماً دو مفهوم متعامد فرض می‌شوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار می‌برند و منظورشان قوی، ایستایی نوع گذاری شده‌است، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شده‌است. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده می‌شود.



معناشناسی اجرا

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

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


کتابخانه هسته
اغلب زبان‌های برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده می‌شوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازی‌های زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتم‌ها، داده ساختارها و مکانیزم‌های ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالباً با کتابخانه هسته به عنوان قسمتی از آن رفتار می‌کنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هسته‌ای را مشخص می‌کنند که باید در تمام پیاده سازی‌ها موجود باشند، و در زبان‌های استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبان‌ها به گونه‌ای تعریف شده‌اند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونه‌ای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونه‌ای از کلاس BlockContext کتابخانه می‌سازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان می‌باشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمی‌کنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.


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



خصوصیات

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

تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص می‌شود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
پیاده سازی منبع یا مدل. گاهی اوقات در زبان‌های مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحاً در رفتار پیاده سازی مدل موجودند.


پیاده سازی

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

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

برنامه‌هایی که مستقیماً روی سخت‌افزار اجرا می‌شوند چندین برابر سریعتر از برنامه‌هایی که با کمک نرم‌افزار اجرا می‌شوند، انجام می‌شوند.

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



تاریخچه
پیشرفت‌های اولیه

اولین زبان برنامه نویسی به قبل از رایانه‌های مدرن باز می‌گردد. قرن ۱۹ دستگاه‌های نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثال‌هایی از زبان‌های برنامه نویسی با حوزه مشخص شناخته می‌شوند. با شروع قرن بیستم، پانچ کارت‌ها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتم‌ها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.

در دهه ۴۰، اولین رایانه‌های دیجیتال که توسط برق تغذیه می‌شدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سال‌های ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.

کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامه‌های زبان ماشین استفاده می‌کردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده می‌شوند جایگزین شد. در سال‌های بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخه‌های به روز شده این برنامه‌ها همچنان مورد استفاده قرار می‌گیرند، و هر کدام قویا توسعه زبان‌های بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبان‌های برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبان‌های برنامه نویسی به شدت متاثر از محدودیت‌های رابط بودند.



پالایش

دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثال‌های عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبه‌های آن بهینه سازی ایده‌های اولیه نسل سوم زبان برنامه نویسی بود:

APL برنامه نویسی آرایه‌ای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایده‌های خوب فورترن و کوبول را بهم پیوند دهد.
در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی می‌کرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به

عنوان اولین زبان کاملاً شئ گرا معرفی شد.

C بین سال‌های ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبان‌های برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.

هر یک از این زبان‌ها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبان‌ها از تبار حداقل یکی از زبان‌های فوق به شمار می‌آیند.

دهه‌های ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبان‌های برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.

"ادسگر دیکسترا" در نامه‌ای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبان‌های سطح بالا حذف شود.

در دهه‌های ۶۰ و ۷۰ توسعهٔ تکنیک‌هایی صورت گرفت که اثر یک برنامه را کاهش می‌داد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.




یکپارچگی و رشد

دهه ۸۰ سال‌های یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینه‌های گزافی صرف تحقیق در مورد زبان نسل پنجم می‌شد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثال‌های جدید، تمام این تلاش‌ها ایده‌هایی که در دهه‌های قبل حلق شده بودند را بهتر کرد.

یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستم‌های بزرگ از طریق مدول‌ها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستم‌های مدولی برجسته‌ای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبان‌های دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستم‌های مدولی غالباً با ساختارهای برنامه نویسی عام همراه شده‌اند.

رشد سریع اینترنت در میانه دهه ۹۰ فرصت‌های ایجاد زبان‌های جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وب‌گاه‌های دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعه‌ها اساساً نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثال‌های موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا می‌کند، هم در تحقیقات و هم در صنعت. جهت‌های فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونه‌های جدید مدولی(mixin، نماینده‌ها، جنبه‌ها) و تجمع پایگاه داده.

۴GLها نمونه‌ای از زبان‌هایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه داده‌های اسکالر را برگردانند، مجموعه‌هایی را تغییر داده و بر می‌گردانند که برای اکثر زبان‌ها متعارفند. Perl برای مثال، با "مدرک اینجا" خود می‌تواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.




سنجش استفاده از زبان

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

شمارش تعداد تبلیغات شغلی که از آن زبان نام می‌برند.
تعداد کتاب‌های آموزشی و شرح دهندهٔ آن زبان که فروش رفته‌است.
تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبان‌هایی را که در جستجوها کمتر پیدا می‌شوند دست کم گرفته شوند.
شمارش ارجاع‌های زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.

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

این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر می‌کند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق می‌کند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.

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

یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثال‌های برنامه نویسی دسته بندی شود. برای مثال، غالب زبان‌های برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده می‌کنند، در حالیکه تعداد کمی این کار را نمی‌کنند. سایر زبان‌ها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
ساعت : 3:47 pm | نویسنده : admin | گرافیکسولوژی | مطلب قبلی
گرافیکسولوژی | next page | next page