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

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

دارت زبانی برپایه کلاس، وراثت یگانه و شی گرایی است که نحوه پیاده‌سازی یا سینتکس آن شبیه زبان 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 موجود می‌باشد. این پلاگین ویژگی‌های زیادی از جمله هایلایت کردن متن، کامل کردن کد، ریفرکتور کردن، دیباگ کردن و موارد بسیاری را دارا می‌باشد. و اندروید استدویو قابلیت استفاده از دارت را برای پروژه های فلاتر می‌دهد.

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

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

## مثال
برنامه سلام دنیا!

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

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

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

یک کلاس ساده:

```java
// 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 = 0;

  // 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);
}
```


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

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

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

## منابع

## پیوند به بیرون

رده:پروژه‌های نرم‌افزار آزاد
رده:زبان‌های اسکریپت‌نویسی
رده:زبان‌های برنامه‌نویسی
رده:زبان‌های برنامه‌نویسی خانواده سی
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۲۰۱۱ (میلادی)
رده:زبان‌های برنامه‌نویسی شیءگرا
رده:زبان‌های برنامه‌نویسی ماشینی پویا
رده:زبان‌های برنامه‌نویسی هم‌روند
رده:کامپایلرهای کد منبع به کد منبع
رده:گوگل
رده:نرم‌افزارهای گوگل
رده:نرم‌افزارهایی که از پروانه بی‌اس‌دی استفاده می‌کنند
رده:زبان‌های توسعه برنامه‌های موبایل