Pony یک زبان برنامهنویسی شیئگرا، با پرفورمنس و امنیت بالا، اپنسورس و به اصطلاح Actor Model است (این اصطلاح یک مدل مفهومی به منظور محاسبات کامپیوتری کانکارنت است و یکسری قوانین را برای سیستم تعریف میکند تا کامپوننتهای مختلف بر اساس آن با یکدیگر تعامل درستی داشته باشند.)
آشنایی با بارزترین ویژگیهای Pony
از جمله ویژگیهای شاخص زبان برنامهنویسی پونی میتوان به موارد زیر اشاره کرد:
- این زبان برنامهنویسی از بروز تایپ ارورها جلوگیری میکند (برای مثال عدد صحیح یا int را به عنوان یک عدد اعشاری یا float پردازش نمیکند.)
- در این زبان برنامهنویسی باگهای منجر به دسترسی نادرست به حافظه وجود ندارد و در اجرای برنامهها، موارد ارجاع به یک آبجکت ناموجود یا نادرست و بافر اورفلو اتفاق نخواهد افتاد. همچنین در این زبان مفهوم null تعریف نشده است؛ بنابراین برنامه هیچ وقت مقدار null برنمیگرداند.
- اجرای برنامههای نوشته شده با این زبان منجر به اِکسپشن غیرقابل کنترلی نخواهد شد و همهٔ اِکسپشنها سِمنتیک بوده و به راحتی رفع میشوند.
- رقابت برای دسترسی به دیتا زمانی اتفاق میافتد که دو یا چند به اصطلاح Thread در یک فرآیند واحدِ همزمان درخواست دسترسی به بخش یکسانی از حافظه را داشته باشند و حداقل یکی از ریکوئستها مرتبط با به اصطلاح پروسهٔ Write در حافظه باشد. با این وجود، در زبان برنامهنویسی پونی هیچگونه رقابتی برای دسترسی به دیتا بین ماژولهای مختلف برنامه وجود نخواهد داشت به طوری که برای ترِدها نیز هیچ قانون کنترلی به منظور دسترسی به حافظه تعریف نخواهد شد.
- در زبان Pony هیچ فرآیند کنترل یا عملیات به اصطلاح Atomic به منظور جلوگیری از ایجاد وقفه در فرآیندهای کانکارنت تعریف نشده است. در عوض، تایپ سیستم بهگونهای طراحی شده تا در زمان کامپایل، برنامههای همزمان هرگز دچار اصطلاحاً DataRace (رقابت برای دسترسی به دیتا) نشوند؛ بنابراین این امکان برای دولوپرها فراهم شده تا کدهای کانکارنتی نوشته و آنها را بدون هیچگونه مشکلی اجرا کنند.
- در این زبان وقوع Deadlock به حداقل رسیده است. در واقع، از آنجایی که اساساً در این زبان هیچ فرآیند کنترلی به منظور جلوگیری از دسترسی همزمان ترِدها به حافظه تعریف نشده است، هیچ عملیاتی دچار Deadlock (بنبست) نخواهد شد.
- Pony یک زبان سطح بالای کامپایل شده یا AOT است و از هیچ مفسر یا ماشین مجازی برای اجرای آن استفاده نمیشود (AoT مخفف واژگان Ahead of Time است.)
- برنامههای نوشته شده با این زبان سازگار با زبان برنامهنویسی C هستند. در واقع، برنامههای نوشته شده با زبان Pony میتوانند به صورت نِیتیو لایبرریهای زبان C را فراخوانی کنند. کامپایلر این زبان قادر به تولید فایلهای هِدِر C برای لایبرریهای Pony است؛ در نتیجه، برنامههای نوشته شده با زبانهای C و همچنین ++C میتوانند برنامههای Pony را بهصورت نِیتیو فراخوانی کنند.
به طور کلی، امکان نوشتن برنامههایی با سرعت بالا، ایمن، کارآمد و کانکارنت با این زبان امکانپذیر است؛ اما چگونه میتوان با این زبان برنامهای با چنین قابلیتهایی نوشت؟ تایپ سیستم زبان برنامهنویسی Pony یک مفهوم جدید تحت عنوان Reference Capabilities (قابلیت ارجاع) ارائه میدهد که موجب میشود دیتا در سیستم به صورت ایمن تعریف شود. به عبارت دیگر، نوع هر متغیر در این زبان شامل اطلاعاتی در مورد چگونگی اشتراک دیتا بین یکسری اصطلاحاً Actor تعریف میشود و کامپایلر پونی از این اطلاعات استفاده خواهد کرد تا تأیید کند که سورسکد برنامه در زمان کامپایل دچار DeadLock و DataRace نشده باشد. روی هم رفته، این مفهوم به همراه قابلیت Actor Model، موجب قدرتمند شدن این زبان شدهاند (اگر به دنبال آشنایی و شروع کار با این زبان هستید، میتوانید آن را از طریق مرورگر خود و در Pony Playground تست نمایید.)