موضوع مقاله: پست‌اسکریپت | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # پست‌اسکریپت | مقدمه: پست اسکریپت یک زبان توصیف صفحه است که با یک مفسر اجرا می‌شود تا یک تصویر را ایجاد کند. | ## بخش 1: پست‌اسکریپت | پست‌اسکریپت بهترین زبان شناخته شده برای توصیف صفحات در زمینه‌های الکترونیک و منتشر کردن دسکتاپ است. در آن زمان جان وارناک در حال گسترش و توسعهٔ یک مفسر برای پایگاه‌داده گرافیکی سه بعدی بزرگ پناه‌گاه نیویورک بود. در همان زمان محققان Xerox PARC اولین چاپگر لیزری را گسترش دادند و متوجه نیاز برای یک استاندارد تعریف صفحات تصویر شدند. در سال ۱۹۷۵–۷۶ یک تیم به رهبری باب اسپرول قالب پرس را ساختند که در نهایت در سیستم Xerox PARC برای پرینترهای لیزری استفاده شد. اما پرس بیش‌تر به عنوان یک قالب داده، و نه یک زبان، انعطاف‌پذیری کافی را نداشت و PARAC تلاش کرد با ایجاد اینترپرس جایگزینی برای آن ایجاد کند. آن‌ها دوباره سیستم طراحی JaM (جان و مارتین) را ساختند که در طراحی VLSI و به‌دست آوردن اطلاعات مقدماتی برای تایپ و چاپ گرافیکی استفاده شد. آن‌ها یک زبان ساده‌تر، مشابه اینترپرس با نام پست‌اسکریپت طراحی کردند که در سال ۱۹۸۴ به بازار آمد. در همین زمان‌ها، استیو جابز، آن‌ها را ملاقات کرد و آن‌ها را متقاعد کرد تا پست‌اسکریپت را طوری تغییر دهند تا بتواند به عنوان زبانی برای چاپگرهای لیزری مورد استفاده قرار گیرد. ترکیب ویژگی‌های تکنیکی و در دسترس بودن پست‌اسکریپت، آن را یک زبان مطرح برای خروجی‌های گرافیکی برای کاربردهای چاپ کردن ساخت. برای مدتی مفسر این زبان (پردازش تصویر بیت به بیت یا RIP) یک بخش از همان پرینترهای لیزری بود تا ۱۹۹۰. هرچند که هزینهٔ پیاده‌سازی بالا بود، با این حال کامپیوترها کد PS را به چاپگرها می‌دادند و چاپگرها آن را به صورت تصویر درمی‌آوردند؛ که این به حافظهٔ وسیع و ریزپردازنده‌هایی با کارایی بالا احتیاج داشت. در زمانی که موتور چاپگرهای لیزری خودشان بیش از هزار میلیارد دلار هزینه داشتند، اضافه شدن قیمت PS ارزش داشت، اما با کاهش قیمت چاپگرها، هزینهٔ پیاده‌سازی PS به شدت گران شد. پست اسکریپت که زمانی استاندارد غیررسمی پذیرفته شده برای نسخه الکترونیکی نهایی مقالات بود، به تدریج توسط فرمت PDF که نواده آن است، در حال جایگزینی است. در سال ۲۰۰۱ پرینترهای کمتری با پشتیبانی پست اسکریپت نسبت به سال‌های قبل وارد بازار شدند که علت اصلی آن افزایش رقابت با پرینترهای جوهرافشان به مراتب ارزان قیمت‌تر غیر پست اسکریپتی و همچنین ابداع روش‌های جدید نرم‌افزار محور برای پردازش عکس‌های پست‌اسکریپت بر روی کامپیوتر (مثل PDF) بوده‌است. اما استفاده از پرینتر لیزری پست‌اسکریپتی هنوز می‌تواند میزان کار لازم توسط CPU برای چاپ نوشته‌ها را از طریق انتقال پردازش تصویر از کامپیوتر به پرینتر به میزان قابل توجهی کاهش دهد. پست‌اسکریپت سطح ۱ زبان پست‌اسکریپت دو پیشرفت اساسی داشت که اولین آن‌ها پست‌اسکریپت سطح ۱ است که در سال ۱۹۸۴ معرفی شد. پست‌اسکریپت سطح ۲ پست‌اسکریپت سطح ۲ در سال ۱۹۹۱ معرفی شد و چندین برتری مثل سرعت و قابلیت اطمینان آن بیش، پشتیبانی از جداسازی‌های in-RIP و همچنین پشتیبانی از بازسازی تصویر و فونت‌های مرکب را دارا بود. پست‌اسکریپت ۳ پست‌اسکریپت ۳ (کلمهٔ سطح را به خاطر راحتی برداشتند) در اواخر ۱۹۹۷ آمد و علاوه بر استفاده از نسخه‌های جدیدتر عملگرهای قدیمی‌تر لغت نامه‌ای، فیلترهای جدید و کار با رنگ را پشتیبانی می‌کرد. پست‌اسکریپت ۳ به دلیل جایگزینی سیستم پردازش الکترونیکی خصوصی موجود، اهمیت زیادی داشت و از آن به خاطر دارا بودن عملگرهای سایه‌دهی هموار تا ۴۰۹۶ سایهٔ خاکستری (در مقایسه با ۲۵۶ تایی که در پست‌اسکریپت ۲ وجود داشت) استفادهٔ وسیعی در تولید مجله‌ها و همچنین DeviceN (که یک فضای رنگی بود که اضافه کردن جوهرهای رنگی اضافی را در صفحات رنگی مرکب را دارا بود) شد. استفاده در چاپ قبل از پست‌اسکریپت قبل از به وجود آمدن زبان پست‌اسکریپت، پرینترها با گرفتن ورودی به صورت کد اسکی کاراکترهای خروجی را چاپ می‌کردند. تعدادی تکنولوژی برای انجام این عملیات وجود داشت اما بیش‌ترشان اینگونه بودند که نشانه‌ها به صورت فیزیکی طراحی شده بودند و تغییر دادن آن‌ها سخت بود. در این سیستم کاراکترها به صورت تعدادی از نقطه‌ها نشان داده شده و مانند یک فونت در داخل پرینتر عمل می‌کردند. با پیچیده شدن این سیستم، پرینترهای نقطه‌ای شروع به استفاده از فونت‌های مختلف کردند که کاربر امکان انتخاب آن‌ها را داشت و حتی برخی از مدل‌ها به کاربر اجازهٔ استفاده از فونت‌های خودشان را می‌دادند. پرینترهای نقطه‌ای این قابلیت را نیز داشتند که که تصویرهای گرافیکی را نیز چاپ کنند. تصاویر توسط کامپیوتر تفسیر شده و به صورت یک سری از نقطه‌ها به چاپگر فرستاده می‌شدند. سیستم‌های کنترلی چاپگرها متفاوت بود و برنامه نویسان نیاز به ساختن درایورهای متعدد داشتند. مانند پلاترها، چاپگرهای لیزری توانایی چاپ خط‌هایی با کیفیت بالا و مانند چاپگرهای نقطه‌ای توانایی تولید صفحات متن و تصویر را داشتند. اما برخلاف هر دوی چاپگرهای نقطه‌ای و پلاترها، چاپگرهای لیزری می‌توانستند همزمان تصویر و متن را در یک صفحه قرار دهند. پست‌اسکریپت با استفاده از زبان کنترلی خود که می‌توانست روی انواع مارک‌های چاپگرها استفاده شود، این امکان را فراهم ساخت تا این ویژگی‌ها به خوبی به کار گرفته شوند. به تدریج پست‌اسکریپت، به زبانی فراتر از یک زبان کنترلی برای چاپگرها تبدیل شد و به صورت یک زبان کامل برای خودش درآمد. | ## بخش 2: پست‌اسکریپت | برنامه‌های زیادی برای تبدیل متن به برنامهٔ پست‌اسکریپت به وجود آمدند که کد متن اصلی را تولید می‌کردند. این برنامه می‌توانست به یک مفسر در چاپگر فرستاده شود تا آن را چاپ کند، یا در داخل یک برنامه دیگر مثلاً با نشان دادن آن روی صفحه به کار برده شود. پست‌اسکریپت به دلیل قابلیت پیاده‌سازی تبدیل بیت به بیت به صورت آنی مورد توجه‌است. وقتی برنامهٔ پست‌اسکریپت تفسیر می‌شود، مفسر دستورها را به نقاطی برای تولید خروجی تبدیل می‌کند. به همین دلیل مفسرهای پست‌اسکریپت گاهی پردازنده‌های تصویر بیت به بیت پست‌اسکریپت یا RIP نامیده می‌شوند. به کار بردن فونت برطرف کردن مشکلات فونت نیز، تقریباً به اندازهٔ خود پست‌اسکریپت پیچیده بود. سیستم فونت از PS برای کشیدن کاراکترها و علائم به عنوان خطوط استفاده می‌کرد و می‌توانست آن‌ها را با هر وضوحی نمایش دهد. با وجود اینکه این موضوع بدیهی به نظر می‌رسید، تعدادی موضوع تایپی بودند که باید در نظر گرفته می‌شدند. پست‌اسکریپت با نگهداری نکات کلیدی آن‌ها مانند خطوط افقی و عمودی (که در تشخیص یک حرف کمک زیادی می‌کردند) از این خطا جلوگیری می‌کرد که. نتیجهٔ حاصل از این کار، نمایش هرچه بهتر این فونت حتی در وضوح‌های پایین شد در حالی که قبلاً تصور می‌شد این کار تنها با استفاده از فونت‌های دست ساز بیت به بیتی ممکن است. در آن زمان تکنولوژی پیدا کردن و دارا شدن این نکات در فونت به خوبی اجرا و نگه‌داری شد و این نکات فشرده‌سازی و رمزنگاری شدند و به صورت فونت تایپ ۱ که ادوبی آن را اینگونه خواند، درآمدند (همچنین با نام فونت پست‌اسکریپت نوع ۱، PS1, T۱ و تایپ ۱ ادوبی از آن‌ها یاد شد). تایپ ۱ یک مدل ساده شده از سیستم PS برای نگه‌داری اطلاعات کلی قالب بود و نگذاشت به یک زبان کامل تبدیل شود. سپس ادوبی مجوز تکنولوژی تایپ۱ را به افرادی که می‌خواستند نکات خودشان را اضافه کنند فروخت. فونت تایپ ۳ اجازهٔ تمام پیچیدگی‌های زبان پست‌اسکریپت را داد اما هیچ راهی برای استاندارد کردن نکات نداشت. تایپ ۲ برای استفاده در قالب فونت فشرده طراحی شد و برای نمایش فشرده توابع توصیف علائم به منظور کم کردن سایز فایل، پیاده‌سازی شد. فونت کلید CID به همراه فونت تایپ۱ برای فونتهای کلید CID استاندارد و به همراه تایپ۲ در فونت‌های تایپ باز استفاده می‌شود. به نظر می‌آمد که رتبهٔ ادوبی به صورت وسیع و غیرقابل پیش‌گیری زیاد بود و این موضوع بود که باعث شد تا Apple سیستم خود را یعنی تروتایپ در حدود سال ۱۹۹۱ طراحی کند. در اویل دههٔ ۱۹۹۰ سیستم‌های متعددی برای ذخیره‌سازی فونت‌های شکلی وجود داشت، برای مثال بیتستریم و متافونت، آن را گسترش دادند. اما هیچ‌یک شامل جوابی برای چاپ همه‌منظوره نبود و در نتیجه به صورت گسترده استفاده نشدند. در اواخر دههٔ ۱۹۹۰ ادوبی برای گسترش تایپ باز که یک ابردسته قالب‌های تایپ۱ و تروتایپ بود به مایکروسافت پیوست. هنگامی که به یک دستگاه خروجی پست‌اسکریپت متصل می‌شد، قسمت‌های اضافی فونت آن حذف شده و قسمت‌های فرستاده شده به دستگاه همانند تایپ۱ و تروتایپ ولی بسته به نوع شکل و طرح آن در فون موجود در تایپ باز بود. اما هنگامی که در اواسط دههٔ ۸۰ تعدادی کامپیوتر RISK به بازار آمد، به نظر آمد که پشتیبانی ادوبی برای ماشین‌های جدید ناقص است. این مسئله و مسائل مربوط به هزینه باعث به وجود آمدن پیاده‌سازی‌های شخص ثالث برای پست‌اسکریپت به خصوص برای چاپگرهای ارزان قیمت یا چاپگرهایی با تجهزات حروفچینی گرانقیمت و لوکس شد (که باعث افزایش سرعت نسبت به ادوبی شد). در این زمان مایکروسافت و اپل به هم پیوستند تا امتیاز انحصاری چاپگرهای لیزری را از ادوبی بگیرند. مایکروسافت به شرکت اپل مجوز استفاده از مفسری برای پست‌اسکریپت به نام تروایمیج را که خریده بود داد و اپل نیز مجوز قالب فونت جدید مایکروسافت با نام تروتایپ را داد (البته اپل با ادوبی به نفاهم رسیده و مجوز اصلی پست‌اسکریپت را به چاپگرهای آن داد اما تروتایپ به عنوان فونت استاندارد برای ویندوز و مکینتاش انتخاب شد). امروزه مفسرهای شخص ثالث برای پست‌اسکریپت به صورت وسیع در چاپگرها و دیگر دستگاه‌های جانبی چند منظوره (MFP) کاربرد دارد. هنوز هم برخی چاپگرهای لیزری ارزان و پایه‌ای از پست‌اسکریپت پشتیبانی نمی‌کنند و هنگامی که به پشتیبانی از آن احتیاج دارند از یک مفسر رایگان سازگار با پست‌اسکریپت با نام گست‌اسکریپت استفاده می‌کنند. چاپگرهای لیزری گرانقیمت (معروف به چاپ دیجیتال) نیز از یک RIP خارجی به منظور جداسازی کامپیوترهای قابل ارتقا از دستگاه‌های سخت‌افزاری چاپ استفاده می‌کردند. استفاده به عنوان سیستم نمایش پست‌اسکریپت به خاطر معرفی واسط گرافیکی کاربر (GUI) از نظر تجاری موفق بود. چون به کاربرها اجازهٔ انتخاب ساختار نهایی صفحات خروجی روی پرینترهای لیزری را می‌داد. | ## بخش 3: پست‌اسکریپت | برای استفادهٔ بهینه و کامل از چاپ کردن توسط پست‌اسکریپت، برنامه‌ها روی کامپیوتر مجبور به اجرای مجدد آن خصیصه‌ها روی سیستم گرافیکی دستگاه میزبان داشتند. این منجر به موضوعاتی در زمینهٔ ناهماهنگی طرح‌بندی روی صفحه و طرح‌بندی چاپ شده داشت که به دلیل پیاده‌سازی‌های مختلف آن‌ها بود. با رشد توان کامپیوترها، این امکان به وجود آمد که سیستم PS به جای چاپگرها، روی کامپیوترهای میزبان اجرا شود. این باعث شد تا سیر تکامل طبیعی PS از یک زبان برای چاپگرها به یک زبان گرافیکی برای کامپیوترهای میزبان تبدیل شود. نه تنها باعث حذف خروجی‌های ناهماهنگ شد بلکه سیستم گرافیکی قدرتمندی برای کامپیوترها به وجود آمد و به چاپگرها اجازه داد تا هیچ پردازشی انجام ندهند در زمانی که قیمت موتورهای لیزری در حال کاهش بود. در روند تولید، استفاده از پست‌اسکریپت به عنوان سیستم نمایش به این معنی بود که کامپیوتر میزبان توانایی درآوردن وضوح پایین در روی صفحه، وضوح بالاتر روی چاپگر یا فرستادن کد PS به چاپگرهای هوشمند را دارد. با این حال پست‌اسکریپت با چاپ ضمنی نوشته شده بود و تعدادی خصیصه داشت که آن را برای سیستم‌های نمایش تعاملی نامناسب می‌ساخت. به ویژه PS بر مبنای این ایده بود که تمامی دستورها را جمع می‌کرد و هنگامی که به دستور showpage می‌رسید، تمامی دستورها جمع شده، تفسیر شده و خروجی حاصل می‌شد؛ که به وضوح برای سیستم‌های تعاملی مناسب نبود. این کار را با تغییر خیلی از جستارهای رشته‌ها به اعداد ۳۲ بیتی، اضافه کردن پشتیبانی از خروجی‌های مستقیم با هر دستور و اضافه کردن توابعی برای اجازه دادن به GUI برای رسیدگی کردن به نمودار انجام داد. به علاوه تعدادی وابسته‌سازی نیز فراهم شد تا کد PS بتواند به‌طور مستقیم از زبان C فراخوانی شود. با اینکه DPS به همراه NeXT نوشته شد، ادوبی آن را به صورت تجاری فروخت که از خصیصه‌های رایج بیشتر ایستگاه‌های کار یونیکس در دههٔ ۱۹۹۰ شد. سان تعدادی دستور برای زمان، کنترل ماوس، منقطع‌سازی و سیستم‌های دیگری که برای تعامل لازم بود اضافه کرد. همچنین تعدادی داده‌ساختار و عنصر زبان نیز برای شئ‌گرا کردن داخلی کامل آن اضافه کرد. با این حال تلاش‌های در حال انجام برای استاندارد کردن سیستم X۱۱ باعث معرفی شدن و استفادهٔ وسیع آن در سیستم سان شد و NeWS هیچ وقت به صورت وسیع کاربرد پیدا نکرد. برنامه‌های پست‌اسکریپت به صورت معمول توسط افراد نوشته نشده بلکه توسط برنامه‌های دیگر نوشته می‌شوند. با این حال این امکان وجود دارد که برنامه‌های پست‌اسکریپت نیز همانند برنامه‌های دیگر در رایانه نوشته شود. پست‌اسکریپت یک زبان تفسیر شده و بر مبنای پشته‌ است که به Forth شبیه‌است اما با سیستم تایپ قوی، الهام گرفته از داده‌ساختارهای موجود در زبان لیسپ و حافظهٔ حوزه‌ای است که بعد از پست‌اسکریپت سطح۲، زباله روبی نیز به آن اضافه شد. اما خواندن یک برنامه به مقداری تمرین نیاز دارد چون فرد باید طرح پشته را در نظر داشته باشد. بیشتر عملگرها (یا به زبانی توابع) عملوندهای خود را از پشته می‌گیرد و نتیجهٔ خود را نیز در پشته می‌گذارند. الفاظ (literal) مانند اعداد، این تأثیر را دارند که یک کپی از خودشان را روی پشته بگذارند. داده‌ساختارهای پیشرفته روی آرایه‌ها و تایپ‌های لغت‌نامه‌ای، قابل ساخت بوده اما نمی‌توانستند به سیستم تایپ اعلان شوند چون سیستم تایپ همهٔ آن‌ها را را به صورت آرایه و لغت‌نامه می‌بیند. مفاهیم موجود در زبان به این صورت است: کاراکتر ‘٪’ برای تعریف توضیح (comment) در زبان استفاده می‌شود. به عنوان یک قرارداد کلی هر برنامه پست‌اسکریپت باید با “٪!” شروع شود که تمام دستگاه‌ها آن را به عنوان یک برنامهٔ پست‌اسکریپت بفهمند. تعدادی پشته در این زبان وجود دارد اما دو پشتهٔ مهم آن شامل پشتهٔ عملوندها که برای اعمال عملگرها و فراخوانی توابع به کار می‌آید و پشتهٔ لغت‌نامه که شامل متغیرها و مقادیر آن‌هاست. آرایه‌ها نیز مانند سایر زبان‌ها هستند و می‌توانند شئ‌های از انواع مختلف را همزمان داشته باشند. مفاهیم گرافیکی موجود در این زبان نیز شامل فضای دستگاه، فضای کاربر، ماتریس تبدیل جاری، مسیر، مسیر فعلی، مسیر برش و حالت گرافیکی هستند. برای مثال داریم: /x 5 def که معنی / در آن این است که مقدار x به پشته اضافه می‌شود و تا به حال مقداری در پشتهٔ لغت‌نامه ندارد. کد زیر یک عملگر foo تعریف می‌کند که دو عنصر بالای پشته را با هم جمع کرده و حاصل را در عنصر سوم ضرب می‌کند و نتیجه را به پشته اضافه می‌کند: /foo {add mul} def در زیر نیز یک مثال می‌بینیم که چگونه یک متن را به یک جعبه متصل می‌کنیم: ٪! | ## جمع‌بندی | با این حال برخلاف بقیهٔ نسخه‌های نقطه‌ای، پست‌اسکریپت، دقیقاً ۷۲ نقطه برای یک اینچ استفاده می‌کند.