دارت (زبان برنامه‌نویسی)

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
دارت
پارادایم(ها) شی گرا
تاریخ ظهور 2011
توسعه‌دهنده گوگل
انتشار پایدار 1.0 (۱۴ نوامبر ۲۰۱۳؛ ۲۵۶ روز پیش)
انتشار پیش‌نمایش بتا 1 (۱۹ ژوئن ۲۰۱۳؛ ۴۰۴ روز پیش[۱])
تایپ‌سیستم optional
تأثیرگرفته از جاوااسکریپت, Java, اسمال تاک, Erlang, Strongtalk, C#[۲]
پروانه پروانه بی‌اس‌دی
پسوندهای معمول .dart

دارت (به انگلیسی: Dart) زبان برنامه نویسی است که توسط گوگل توسعه داده می‌شود. هدف دارت جایگزین کردن جاوااسکریپت که زبان داخلی مرورگرهای وب است می‌باشد. دارت راه حلی برای مشکلات موجود در جاوا اسکریپت (به طور مثال مشکل حافظه) می‌باشد که کارایی بهتر، قابلیت استفاده ساده تر برای پروژه‌های بزرگ و امنیت بیشتری را فراهم می‌کند. گوگل همچنین بسیار تلاش دارد تا دارت را پیچیده تر بسازد و ویژگی‌ها و قابلیت‌های فراوانی به آن ببخشد. [۳]

دارت زبانی برپایه کلاس، وراثت یگانه و شی گرایی است که گرامر آن شبیه زبان C بوده و دارای Interface،reified generics کلاسهای Abstract و Optional typing می‌باشد. type annotationهای ایستا تاثیری بر روی سمانتیک کد در زمان اجرا ندارد. در عوض type annotation می‌تواند پرونده‌هایی برای ابزارهایی مانند checkerهای ایستا و checkهای پویای در زمان اجرا را فراهم نماید. این پروژه توسط لارس بک و کسپر لاند پایه گذاری شده‌است.

مدهای زمان‌های اجرا[ویرایش]

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

کامپایل به جاوا اسکریپت[ویرایش]

dartc اولین کامپایلری بود که توانایی تولید جاوا اسکریپت از روی کد دارت را داشت، ولی هم اکنون از رده خارج شده‌است. Frog دومین برنامه از کامپایلر دارت به جاوا اسکریپت بود که به زبان دارت نوشته شده‌است. Frog هرگز نتوانست مفاهیم کلی زبان دارت را پیاده سازی نماید، گرچه کامپایلر جدید به نام dart2js ساخته شده بود. همچنین این برنامه نیز به زبان دارت نوشته شده‌است و هم اکنون کامپایلری است که تمام ویژگی‌ها و مفاهیم این زبان را پشتیبانی می‌نماید.

ویرایشگر[ویرایش]

در ۱۸ نوامبر ۲۰۱۱، شرکت گوگل یک ادیتور دارت را منتشر کرد، که ادیتوری متن باز بر روی کامپوننت‌های اکلیپس بود و روی سیستم‌های Mac OS X، ویندوز و سیستم عامل‌های مبتنی بر لینوکس اجرا می‌شد. این ادیتور قابلیت Syntax highlighting، Code completion، کامپایل کردن Java script، اجرای برنامه‌های دارت بر روی سرور یا تحت وب و debugging را دارد. محیط‌های جت برینز همچنین زبان دارت را پشتیبانی می‌کنند. پلاگین دارت برروی IntelliJ IDEA، PhpStorm و WebStorm موجود می‌باشد. این پلاگین ویژگی‌های زیادی از جمله هایلایت کردن متن، کامل کردن کد، ریفرکتور کردن، دیباگ کردن و موارد بسیاری را دارا می‌باشد.

محیط‌های گسترش[ویرایش]

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

تطبیق مرورگرها[ویرایش]

دارت به حالت نسخهٔ مدرن جاواسکریپت کامپایل می‌شود و اجازه می‌دهد که بر روی مرورگرهای مدرن اجرا شود، گرچه یک نسخهٔ ویژه از کرومیوم وجود دارد که درون آن ماشین مجازی دارت تعبیه شده‌است. این ویژگی این مرورگر را قابل می‌سازد تا برنامه‌های دارت را بدون اینکه به جاواسکریپت کامپایل شوند، اجرا نماید. با نسخهٔ مایلستون یک، جاواسکریپت تولید شده، ۷۸٪ بازدهی جاواسکریپتی که به صورت دستی نوشته شده باشد را دارا می‌باشد، در حالی که کد دارت ۲۱٪ سریعتر از کد مشابه بر روی وی-۸ اجرا می‌شود. در می۲۰۱۲، اینترنت اکسپلورر مایکروسافت، فایرفاکس موزیلا، مرورگر اپرای شرکت اپرا و سافاری شرکت اپل برنامه‌ای جهت تعبیه کردن ماشین مجازی جدای دارت را ندارند.

مثال[ویرایش]

برنامه سلام به همگی

main() {
  print('Hello World!');
}

تابعی جهت محاسبهٔ nامین عدد فیبوناچی:

int fib(int n) => (n> 1) ? (fib(n - 1) + fib(n - 2)): n;
main() {
  print('fib(20) = ${fib(20)}');
}

یک کلاس ساده:

// Create a class for Point.
class Point {
 
  // Final variables cannot be changed once they are assigned.
  // Create two instance variables.
  final num x, y;
 
  // A constructor, with syntactic sugar for setting instance variables.
  Point(this.x, this.y);
 
  // A named constructor with an initializer list.
  Point.origin(): x = 0, y = ۰;
 
  // A method.
  num distanceTo(Point other) {
    var dx = x - other.x;
    var dy = y - other.y;
    return sqrt(dx * dx + dy * dy);
 }
}
 
// All dart programs start with main()
main() {
  // Instantiate point objects.
  var p1 = new Point(10, 10);
  var p2 = new Point.origin();
  var distance = p1.distanceTo(p2);
  print(distance);
}

نقدها[ویرایش]

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

اضافه نمودن یک زبان اضافی وب محور (که استاندارد نشده‌است)، برای پروژه مقرون به صرفه به نظر نمی‌آید، حتی اگر آسیب رسان به نظر بیاید.

[...] اضافه کردن پشتیبانی مستقیم و آشکار برای یک زبان غیر استاندارد، منجر به قربانی کردن وب-باز با نادیده گرفتن تمام فرم‌های توسعه توافقی زبان شده و ما را مجبور به انتخاب هر زبانی بر روی وب نماید.

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

برندان ایچ در موزیلا، کسی که جاواسکریپت را توسعه بخشید، بیان نموده‌است که:

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

داگلاس کراکفورد، هنگامی که از او در مورد دارت، در طی مقالهٔ استایل برنامه نویسی و ذهن شما سوال گردید، پاسخ داد:

من مدت زمان زیادی را فکر کردم... اگر من می‌توانستم یک کاغذ تمیز بردارم و (یک زبان جدید)بنویسم که تمام ویژگی‌های خوب جاواسکریپت را دارا می‌باشد، هرگز به چیزی شبیه دارت نمی‌رسیدم.

منابع[ویرایش]

پیوند به بیرون[ویرایش]