Dart (programlama dili)

Çalışma türleri

Dart uygulamaları iki türden birinde çalışır. Ön tanımlı olmayan ve aktif hale getirilerek kullanılan "kontrollü mod"'da dinamik olarak tür kontrolleri yapılır. Kontrollü modda eğer statik türler varsa ve tür uyuşmazlığına dair bir durum olduğunda bu hataların yakalanması sağlanır. Örneğin, eğer bir metot String dönecek şekilde yazılmışsa ve tam sayı döndürmeye çalışıyorsa dinamik tür belirtimi bu hatayı yakalar ve exception olarak fırlatır. Kontrollü modda çalışma, uygulama geliştirimi ve test aşaması için tavsiye edilen yöntemdir.
Dart programları, dinamik tür kontrollerinin varsayılan olarak kapalı olduğu "üretim modu"'nda gelir.  Bu modun varsayılan olmasının sebebi Dart programının en hızlı şekilde çalıştırılabilmesi içindir.

Isolate'ler

Eş zamanlı çalışmak için Dart, birbirinden bağımsız ve bellek paylaşımı olmayan, bunun yerine mesajlarla birbirleriyle haberleşen işçi bileşenler olan isolate'leri kullanır. Bu durum, Erlang dilindeki aktörler ile benzerlik gösterir. Her dart programı en azından bir isolate'e ihtiyaç duyar ki bu main isolate'dir. Dart kodu JavaScript olarak derlendiğinde, isolate'ler Web Worker'lara dönüştürülür.

Native mobil uygulamalar

Dart, eş zamanlı çalışma için farklı modeller sunan Fletch adındaki sanal makineye sahiptir. Bununla birlikte herhangi bir uygulamada Dart kodunun gömülebilmesi için basit bir API sunar. Google, Dart'ın tüm kısımlarının Android ve iOS üzerinde native mobil uygulama geliştirimi yapılabilmesi için Flutter üzerinde uğraşmaktadır.

JavaScript'e derleme

dart2js mevcut Dart kodundan JavaScript koduna derlemeyi sağlayan 2015 yılında Google'ın ürettiği ve Dart dili ile yazılan bir derleyicidir. dart2js, Dart dilinin tüm spesifikasyonlarını ve semantiğini içermek üzere geliştirilmiştir. Önceki derleyicilerin evrimi niteliğindedir: dartc, Dart kodundan Javascript koduna derlemeyi amaçlayan ilk derleyicidir fakat artık kullanılmamaktadır. Frog ise bu alandaki ikinci Dart'tan JavaScript'e çevirim yapan derleyicidir ve Dart ile yazılmıştır. Frog hiçbir zaman dilin tüm spesifikasyonlarını uygulayamamıştır ve dart2js'in çıkışına ön ayak olmuştur.
2013 yılının 28 Mart'ında Dart ekibi, blog'unda Dart kodunun JavaScript'e dönüştürülmesini sağlayan dart2js derleyicisini paylaşmışlardır ve Chrome'un V8 JavaScript motorunda Deltablue benchmark testlerinin yürütülmesi sonucu elle yazılan JavaScript kodundan daha hızlı olduğunu dile getirmişlerdir.

Editörler

2011'in 18 Kasım'ında Google, açık kaynaklı, Eclipse bileşenlerinden oluşan ve Mac OS X, Windows ve Linux-temelli işletim sistemlerinde çalışabilen Dart Editor'ü yayımladı. Editör kullanılarak syntax işaretleme, otomatik kod tamamlama, JavaScript kodu tamamlama, web ve sunucu Dart uygulamaları ve hata ayıklama gerçekleştirilebilmektedir.
2012'nin 13 Ağustos'unda, Google Dart geliştirimi için bir Eclipse eklentisi yayımladı.
2015'in 18 Nisan'ında, Google JetBrains IDE'lerine destek vermek için Dart Editor'ün kullanımdan kaldırılacağını duyurdu.
Dart dili için önerilen editör JetBrains IDE'leridir. Dart eklentisi, IntelliJ IDEA, PyCharm, PhpStorm ve Webstorm için sunulmaktadır. Bu eklenti ile syntax highlighting, otomatik kod tamamlama, analiz yapma, refactoring, hata ayıklama ve daha fazlası mevcuttur.
Sublime Text ve Atom gibi derleyicileri için de ayrıca eklentiler mevcuttur.

Chrome Dev Editor

2013 yılının kasım ayından beri, Chrome ekibinin üzerinde çalıştığı, açık kaynaklı, Chrome uygulaması-temelli ve tekrar kullanılabilen arayüz bileşenlerini barındıran zengin bir kütüphaneye sahip geliştirim ortamı Spark kod adıyla ortaya çıkmış ve daha sonraları Chrome Dev Editor olarak isim değiştirmiştir.Dart dilinde yazılmıştır ve Polymer ile güçlendirilen Spark'ı içerir. Geliştirici önizleme sürümü Chrome Web Store'da mevcuttur.

DartPad

Dart ekibi 2015'in başlarında, herkesin Dart ile akıcı bir başlangıç gerçekleştirebilmesi için DartPad adlı editörü oluşturdu.  Tamamen çevrimiçi bir editör olmasının yanı sıra, Dart API'ler üzerinde deneyler yapabilir ve Dart kodu çalıştırılabilir. Syntax highlighting, kod analizi, otomatik kod tamamlama, dokümanlama, ve HTML ile CSS'te kullanarak web sayfaları oluşturma gibi özellikler sunar.

Örnek

Bir Merhaba Dünya uygulaması örneği:
void main() {
  print('Merhaba Dünya!');}
n. Fibonacci sayısının hesaplanmasını sağlayan fonksiyon:
int fib(int n) => (n > 2) ? (fib(n - 1) + fib(n - 2)) : 1;void main() {
  print('fib(20) = ${fib(20)}');}
Basit bir sınıf örneği:
// Kök alma fonksiyonu olan sqrt'ye erişim için matematik kütüphanesinin(math) eklenmesi.import 'dart:math' as math;// Nokta sınıfının oluşturulmasıclass Nokta {

  // Final tipli değişkenler bir kez atandıktan sonra bir daha değiştirilemezler.
  // X ve Y koordinat değişkenleri.
  final num x, y;

  // Oluşturulacak nesnenin değişkenlerinin atanması için constructor (yapıcı) fonksiyonu.
  Nokta(this.x, this.y);

  // Orijin'de bir nokta oluşturmak için yazılan orijin ismine sahip bir constructor fonksiyonu.
  Nokta.orijin()
      : x = 0,
        y = 0;

  // İki nokta arası uzaklık hesaplama metodu
  num uzaklikHesapla(Nokta digerNokta) {
    var dx = x - digerNokta.x;
    var dy = y - digerNokta.y;
    return math.sqrt(dx * dx + dy * dy);
  }

  // + operatörünün aşırı yüklenmesi.
  Nokta operator +(Nokta digerNokta) => new Nokta(x + digerNokta.x, y + digerNokta.y);}// Tüm Dart programları main() fonksiyonu ile başlar.void main() {
  // Nokta nesnelerinin oluşturulması.
  var n1 = new Nokta(10, 10);
  var n2 = new Nokta.orijin();
  var uzaklik = n1.uzaklikHesapla(n2);
  print(uzaklik);}

Diğer diller ile benzerlikler

Dart dili, C, C#, Java, JavaScript ve diğer diller gibi ALGOL dil ailesinin bir üyesidir.
Aynı nesne üzerinde art arda birçok metot çağırmak için kolaylık sağlayan metot çağlayanı tarzındaki kod dizilimi Smalltalk dili üzerinden benimsenmiştir.
Dart'ın mixin'leri Strongtalk ve Ruby ile benzerlik gösterir.
Dart, uygulama geliştiriminde eş zamanlılık ve güvenlik birimi için isolate'leri kullanır. Isolate konsepti, Erlang dilinde oldukça yaygın kullanılan Actor modeli temellidir.
Kontrollü ve güvenli reflection için ilk kez Gilad Bracha (Dart ekibi üyesidir) ve David Ungar tarafından makale halinde sunulan Mirror API, aslında orijinal olarak Self dilinde implement edilmiştir.

Değerlendirme

Dart dili başlangıçta bazı çevreler tarafından web programlamanın parça parça hale getirilmesi ve karışıklığa yol açtığına değerlendirilmiştir. Bu değerlendirmenin büyük bir kısmı, aslında ilk zamanlarda DartVM'in Chrome içerisinde çalıştırılması planlandığından kaynaklanmaktadır. Fakat bu planlar iptal olmuş, ve JavaScript olarak derleme üzerine yoğunlaşılmıştır.