**دارت** (به انگلیسی: 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 = 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);
}

```

نقدها
-----

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

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

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

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

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

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

منابع
-----

1. ↑
2. ↑  "Web Languages and VMs: Fast Code is Always in Fashion. (V8, Dart) - Google I/O 2013".
3. ↑  ویکی‌پدیای انگلیسی

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

| * ن
* ب
* و
گوگل |
| --- |
| مرور کلی | 
* آلفابت
* تاریخچه گوگل
* List of mergers and acquisitions
* فهرست محصولات گوگل
* نقد گوگل
	+ Privacy concerns
	+ گوگل‌زدایی
* Censorship
* فهرست دامنه‌های اینترنتی گوگل
* Easter eggs
* شرور نباش

 |  |
| تبلیغات | 
* ادموب
* Adscape
* گوگل ادسنس
* ادوردز
* گوگل آنالیتیکس
* Contributor
* ادوردز
* دابل‌کلیک
* DoubleClick for Publishers
* گوگل والت

 |
| ارتباطات | 
* گوگل الو
* گوگل الرتس
* Apps Script
* گوگل دوو
* گاه‌شمار گوگل
* مخاطبین
* جی‌میل
	+ تاریخچه
	+ رابط کاربری
* گوگل پلاس
* گروه‌های گوگل
* گوگل هنگ‌آوتس
* گوگل اینباکس
* سینک
* متن به گفتار
* ترجمه‌گر گوگل
* ترجمه‌گر
* گوگل ویس

 |
| نرم‌افزار | 
* دستیار
* گوگل کروم
	+ نسخه اندروید
	+ گوگل کروم
	+ کروم وب استور
	+ برنامه‌های کاربردی
	+ افزایه‌ها
* Cloud Print
* گوگل ارت
	+ گوگل اسکای
	+ گوگل مون
	+ گوگل مارس
* ابزار
* جی‌بورد
* گوگل گاگلز
* IME
	+ پینیین
	+ ژاپنی
* گوگل فوتوز
* گوگل کیپ
* اخبار و آب و هوا
* گوگل نو
* OpenRefine
* جستجوگر گوگل
* نوار ابزار گوگل

 |
| سکوها | 
* حساب کاربری گوگل
* اندروید
	+ تاریخچه نسخه‌های اندروید
	+ توسعه نرم‌افزار اندروید
	+ اندروید اوتو
	+ Android Pay
	+ اندروید تی‌وی
	+ اندروید پوشیدنی
* رمزساز گوگل
* Body
* گوگل بوکس
	+ گوگل بوکس
* Caja
* Cardboard
* Cast
* کروم کست
* سیستم‌عامل گوگل کروم
	+ Chromebit
	+ کروم‌بوک
	+ Chromebox
	+ Chrome Zone
* Cloud Platform
	+ گوگل اپ انجین
	+ BigQuery
	+ بیگ تیبل
	+ Compute Engine
	+ Storage
* Contact Lens
* Custom Search
* دارت
* گوگل دی‌دریم
* گوگل ارت
* Fit
* GFS
* گوگل گلس
* گو
* G Suite
	+ Classroom
* Home
* Jamboard
* Marketplace
* Native Client
* گوگل نکسوس
* OnHub
* OpenSocial
* گوگل پیکسل
* گوگل پلی
	+ کتاب
	+ بازی
	+ Movies & TV
	+ موسیقی
	+ دکه مطبوعاتی
* سامانه نام دامنه همگانی گوگل
* گوگل والت
* وای فای

 |
| ابزارهای توسعه | 
* AJAX APIs
* App Inventor
* بسته ابزارهای گوگل
* گوگل دولوپرز
* GData
* Googlebot
* Guava
* Guice
* GWS
* KML
* Kythe
* نگاشت‌کاهش
* Mediabot
* Sitemaps
* تابستان کد گوگل
* ابزار وب گوگل
* ابزار وبمستری گوگل
* Website Optimizer
* گوگل سوییفی

 |
| انتشارات | 
* بلاگر
* فهرست محصولات گوگل
* گوگل درایو
	+ گوگل داکس
	+ Drawings
	+ Fusion Tables
* Domains
* فیدبرنر
* گوگل مپ میکر
* پانورامیو
* گوگل سایتس
* یوتیوب
* گوگل پادکستز
* YouTube Instant
* YouTube Red
* ویوو
* Zagat

 |
| جستجوگر گوگل(جدول زمانی) | 
* Appliance
* Blog Search
* گوگل بوکس
	+ Ngram Viewer
* Custom Search
* Finance
* Flights
* جستجوی تصاویر گوگل
* گوگل مپس
	+ گوگل مپس
	+ گوگل مارس
	+ گوگل مون
	+ گوگل اسکای
	+ گوگل استریت ویو
		- Coverage
		- Competition
		- Privacy concerns
* گوگل نیوز
	+ Archive
* Patents
* Public Data
* گوگل اسکالر
* گوگل شاپینگ
* گروه‌های گوگل
* جستجوی ویدئوی گوگل

|  |  |
| --- | --- |
| الگوریتم | 
* پیج‌رنک
* گوگل پاندا
* گوگل پنگوئن
* Hummingbird

 |
| امکانات | 
* حساب کاربری گوگل
* Personalized
* جستجوگر گوگل
* جستجوگر گوگل
* جستجوی امن
* Voice Search

 |
| آنالیز | 
* Insights for Search
* گوگل ترندز
* گراف دانش
* گراف دانش

 |

 |
| فهرست محصولات گوگل | 
* Aardvark
* Answers
* Browser Sync
* گوگل بیس
* گوگل باز
* Checkout
* Chrome Frame
* ادوردز
* Cloud Connect
* Code Search
* Currents
* گوگل دسکتاپ
* Dictionary
* Directory
* Dodgeball
* Fast Flip
* Friend Connect
* Gears
* GOOG-411
* گوگل تی‌وی
* جایکو
* نال
* Health
* آی‌گوگل
* Image Labeler
* آزمایشگاه گوگل
* Latitude
* Lively
* Mashup Editor
* Notebook
* Offers
* اورکات
* بسته گوگل
* Page Creator
* پیکاسا
* Picasa Web Albums
* پیک‌نیک
* PowerMeter
* Q & A
* گوگل ریدر
* Script Converter
* SearchWiki
* Sidewiki
* Slide
* Squared
* گوگل تاک
* بسته گوگل
* Urchin
* جستجوی ویدئوی گوگل
* آپاچی ویو
* شتاب‌دهنده وب گوگل

 |
| دست‌اندرکاران | 
* ال گور
* آلن یوستس
* آلن مولالی
* Amit Singhal
* ان متر
* David Drummond
* اریک اشمیت
* Jeff Dean
* جان دوئر
* جان هنسی
* Krishna Bharat
* مت کاتس
* Patrick Pichette
* پاول اوتلینی
* امید کردستانی
* Rachel Whetstone
* Rajen Sheth
* رام شریرام
* ری کرزویل
* مکس ترنر
* روث پورت
* سالار کمانگر
* شرلی تیلمن
* ساندار پیچای
* سوزان وویچیتسکی
* Urs Hölzle
* وینتون سرف

|  |  |
| --- | --- |
| بنیان‌گذاران | 
* لری پیج
* سرگئی برین

 |

 |
| رده:گوگل | 
* Art Project
* کالیکو
* Current
* Chrome Experiments
* Code-in
* گوگل کد جم
* Developer Day
* Google Business Groups
* Made with Code
* Data Liberation
	+ Takeout
* Google Developer Expert
* Google for Work
* خودروی خودران گوگل
* گوگل ارت
* گوگل فایبر
* GV
* "Google"
* Google China
* Google Express
* Googlization
* ادوردز
* بنیاد گوگل
* Lunar X Prize
* گوگل فای
* طراحی متریال
* موتورولا موبیلیتی
* WiFi
* گوگل ایکس

|  |  |
| --- | --- |
| Events | 
* Science Fair
* گوگل
* گوگل آی/او
* Developer Day
* AtGoogleTalks
* گوگل کد جم
* Highly Open Participation Contest
* Code-in

 |
| پروژه‌ها | 
* Ara
* پروژه لون
* Tango
* Sunroof

 |
| Real estate | 
* 111 Eighth Avenue
* گوگل‌پلکس

 |
| نشان گوگل | 
* Doodle4Google
* گوگل دودل

 |

 |
| وابسته | 
* AI Challenge
* بمباران گوگلی
* Goojje
* Monopoly City Streets
* Unity

 |
| 
* رده:گوگل
* درگاه:گوگل

 |

| * ن
* ب
* و
جاوااسکریپت |
| --- |
| تحلیل کد | 
* ای‌اس‌لینت
* JSHint
* جی‌اس‌لینت

 |
| مترجم | 
* کافی‌اسکریپت
* بسته ابزارهای گوگل
* ابزار وب گوگل
* Morfik
* تایپ‌اسکریپت

 |
| مفاهیم | 
* ای‌جکس
* جاوااسکریپت
* اچ‌تی‌ام‌ال پویا
* کتابخانه جاوا اسکریپت
* قواعد جاوااسکریپت
* جاوااسکریپت محجوب

 |
| اشکال‌یاب‌ها | 
* فایرباگ
* Microsoft Script Debugger
* Microsoft Script Editor
* مایکروسافت ویژوال استودیو
* Opera Dragonfly
* Microsoft Visual Web Developer Express
* Venkman
* سافاری (مرورگر)

 |
| مولد مستندسازی | 
* جی‌اس‌داک

 |
| ویرایشگرها | 
* جاوااسکریپت
* Comparison of JavaScript-based source code editors

 |
| موتورها | 
* Comparison of layout engines
* List of ECMAScript engines
* List of JavaScript engines

 |
| چارچوب نرم‌افزار | 
* Comparison of JavaScript frameworks
* List of JavaScript libraries

 |
| زبان‌های مرتبط | 
* اکشن‌اسکریپت
* asm.js
* کافی‌اسکریپت
* دارت
* اکما اسکریپت
* JavaScript OSA
* جی‌اسکریپت
* تایپ‌اسکریپت
* وی‌بی‌اسکریپت

 |
| فناوری مرتبط | 
* شیوه‌نامه آبشاری
* مدل شی‌گرای سند
* اچ‌تی‌ام‌ال
* جی‌سن

 |
| منابع | 
* ان‌پی‌ام
* نوگت

 |
| جاوااسکریپت | 
* صفحه‌های سرور فعال
* CommonJS
* JSGI
* نود.جی‌اس
* Wakanda

 |
| آزمایش واحد | 
* جزمین
* QUnit
* List of JavaScript unit testing frameworks

 |
| افراد | 
* داگلاس کراکفرد
* برندان ایچ
* جان رزایگ

 |