Prezentul articol nu-i are ca țintă pe manageri - nu aș vrea să le dau idei despre optimizarea pauzelor recreaționale din birou asigurând un singur dart - și nici pe extremiștii jocului binecunoscut, pentru că nu am cunoștințe de împărtășit despre darts-ul rusesc. Tema acestui articol vine de la big-brotherul nostru celălalt, adică Don't-be-evil Google. Datorită expertizei acestuia în domeniul tehnologiilor web, în octombrie 2011, Aarhus, orașul lui Bjarne Stroustrup și Lars Bak, s-ar putea să fi fost martor la nașterea unui produs revoluționar al industriei IT, fiind locul unde Dart a fost dezvăluit prima oară în fața publicului larg.
Asemenea oricărui frate responsabil, el nu doar ne prezintă noul său gadget, ci ne invită și să-l încercăm. Am avut ocazia să aflăm "de ce, de unde și cum" să începem jocul cu Dart. Iar de la prima inițiere încoace - fără să îl acuzăm de aroganță - cum apare o versiune mai nouă, imediat suntem anunțați.
O prima afirmație importantă despre Dart ar fi că nu se referă doar la un limbaj de programare. Este o platformă completă incluzând un toolchain, obiectivul căreia fiind sprijinirea etapelor de dezvoltare și lansare a aplicațiilor web structurate, scalabile și care au totodată o performanță ridicată. Dacă ar trebui să numim experți în astfel de aplicații, fratele nostru cu singuranță ar face parte din ei. Probabil vă amintiți de browser-ul lui propriu, Chrome sau de motorul V8 de JavaScript, fiind un urmaș de onoare a versiunii asamblate pentru automobile în ceea ce privește accelerația și viteza dovedită în timpul navigărilor pe internet.
Ideea din spatele Dartului este de a neutraliza discrepanța dintre evoluția semnificativă a browser-elor și practicile de startup, dezvoltare sau mentenanță a aplicațiilor web ușor rămase în urmă.
Dart este all-inclusive și totuși simplu de folosit, avem parte de tutoriale practice, precum API și documentație extinse sau susținerea comunității - mulți dintre programatori au speranța de a-l opri pe JavaScript din monarhia singuratică a browser-elor.
Toate cele menționate mai sus, separat sau combinate, au ca rezultate realizarea mai multor aplicații web performante, fapt care impune și mai mult spațiu comercial și DoubleClick pentru Google.
Limbajul de programare, Dart, are următoarele caracteristici:
este open-source sub licență BSD;
este orientat pe obiecte, permite moștenirea simplă și polimorfismul prin Mixins și implementarea implicită a interfețelor;
este gândit cu o singură ramură de execuție și oferă Isolates pentru realizarea operațiilor concurente, interacționând exclusiv prin mesaje fără să folosească zone comune de memorie;
preferă Future-ul pentru a gestiona eficient procesele asincrone și a preveni blocarea aplicației de către operații care necesită mult timp;
este lexically-scoped, tipurile de bază sunt opționale, existând și tipuri speciale ca Generics (tipuri parametrizate) și Iterables;
oferă un set impozant de biblioteci de bază și creează premisele unei accesări mai facile a package-urilor provenite de la terți;
fiind conceput pentru adoptare masivă, deține o sintaxă familiară atât pentru utilizatorii de limbaje scripting cât și pentru cei obișnuiți cu limbajele structurate;
Putem opta pentru editorul nativ Dart Editor sau putem alege un plugin, pe care să-l integram în IDE-ul cu care suntem deja obisnuiți cum ar fi WebStorm, IntelliJ sau Eclipse.
În ambele cazuri vom avea acces la unelte folositoare din kit-ul de dezvoltare Dart care pot fi lansate de la linia de comandă:
pub - package manager - pentru a lucra în mod simplu și rapid cu pachetele third-party;
dart2js - compilatorul Dart-to-JavaScript, optimizat cu tree-shaking, minificare opțională, inferența tipurilor, ca la sfârșitul dezvoltării, aplicația să fie lansată cu ușurință în oricare alt browser decât Dartium. În cazul în care aveam nevoie de debugging, ne stă la dispoziție maparea surselor, adică a codului dart, chiar și în Mozilla sau Internet Explorer;
observatory -uneltă de profiling, pentru a verifica comportamentul aplicației în ceea ce privește performanța și utilizarea memoriei interne;
dartfmt - pentru a formata codul în mod automat, conform convențiilor din "Dart Style Guide";
Mașina virtuală Dart VM poate fi folosită pentru a rula aplicații de la linia de comandă, scriptur-i pe servere, servere sau alte aplicații Dart, care nu rulează neapărat în browser. Dart VM a fost extinsă recent pentru a folosi instrucțiuni SIMD(Single-Instruction Multiple-Data). Luând in considerare ca în ultimele procesoare apărute 30% din silicon este destinat instrucțiunilor SIMD, ca de exemplu NEON și vectori, mașina virtuală Dart profită de mai mult spațiu de execuție, reflectându-se ulterior în primul rând la performanța aplicației.
În fazele de dezvoltare este recomandată folosirea lui Dartium, o versiune specială de Chromium, având Dart VM integrat. Se poate reîncărca codul/pagina în loc de a-l recompila- este vorba despre încă un feature a lui Dart care ne ajută să obținem un timp mai scurt de dezvoltare, testare și debugging.
Lista este mult mai lungă, dar singurul lucru de care nu trebuie să uităm, e că Dart trece prin îmbunătățiri continue în ceea ce privește limbajul, uneltele, stabilitatea și rezultatele de benchmarking.
Sună puțin utopic? Don't be evil, citește mai departe.
Orice aplicație scrisă în Dart va conține cel puțin:
un fișier Dart — fiind alcătuit din operații Dart și având extensia .dart;
Diferențiem două tipuri de aplicații Dart: cele pornite de la linia de comandă și cele rulate din browser.
O aplicație Dart de tip command-line este un program independent care va fi rulat cu ajutorul mașinei virtuale Dart VM într-o fereastră de consolă. Aplicația Dart scrisă pentru web va fi găzduită în cadrul unui document HTML și rulată fie din browser-ul Dartium, având Dart VM integrat, fie din oricare alt browser modern după compilarea codului in JavaScript - numit în prezent și limbajul de asamblare a browser-elor.
Aspectele arhitecturale de bază pot fi așadar următoarele: Fig.1 Aplicație tip command-line executat din Dart VM
Fig.2 Aplicație tip web rulat din Dartium
Fig. 3 Aplicație Dart compilat în JS și rulat din orice alt browser modern
Să pătrundem mai detaliat într-un program Dart:
import 'dart:async';
import 'dart:io';
class Counter // fiecare clasă este moștenită din Object, implicit
{
var _toCount; // dacă numele începe cu '_', va fi implicit privat
num counted;
// Funcțiile Get și Set(dacă este cazul) vor fi furnizate implicit
// Zahăr sintactic pentru inițializarea variabilei _toCount
// înainte de apelarea constructorului
Counter (this._toCount);
// Un exemplu a unui Named-Constructor
Counter.stave (String text, String s) {
for (var char in text.split('')) {
if (char.toLowerCase() == s.toLowerCase())
counted++;
}
}
// Definiția unei metode, în care - fiindcă returnează o expresie -
// return-ul poate fi înlocuit cu '=>'
void printCounted() => print("$_toCount occurred $counted times.");
};
// Funcția top-level servește ca punct de pornire a aplicației
main() {
// Declararea și inițializarea variabilelor
var stave = "S";
File file = new File ("Keep_Calm.txt");
// Calculele care pot dura mult timp
// vor fi gestionate în mod asincron, folosind Future
Future future = file.readAsString();
future.then((String content) {
var sCounter = new Counter.stave(content, 'S');
sCounter.printCounted();
})
.catchError((e) {
print ('Counter encountered $e error!')
});
}
Dart are o sintaxă familiară. În cele câteva linii de mai sus se vede cum sunt puse în practică ideile unui viitor Dart.
Am folosit două biblioteci de bază, io si async, constructorul cu nume, sintaxa' fat-arrow' pentru a obține funcții mai suple, interpolare de string-uri și câteva lucruri interesante în jurul lui then. Procesarea de evenimente asincronă din Dart, se poate face în modul următor: declanșăm o operație, prin metoda then() ne înregistrăm la un callback care va fi apelat după terminarea operației și tot în cadrul funcției then() pregătim instrucțiunile care la rândul lor așteaptă rezultatul operației. Așadar, totul are loc într-un context lexical restrâns.
În afară de I/O și procesare asincronă alte biblioteci utile din SDK sunt: core, html, math, mirrors, isolate, indexed_db, collection, web_gl sau web_sql.
De asemenea, avem acces la pachete pentru testare și mocking, la Chrome pentru testare folosind linia de comandă. Recent a apărut suport nativ pentru integrare-continuă folosind drone.io.
O primă ediție a lui Dart de asociația Ecma International a fost acceptată în mai puțin de trei ani de la apariția acestuia. A obținut un loc în topul 20 al celor mai populare limbaje. Conform Tiobe Index, Dart a a ajuns încă în toamna anului trecut în fața lui F# de la Microsoft sau a Swift-ului de la Apple.
În scurt timp va avea loc primul Dart-Summit în San Francisco, unde vom putea afla știrile cele mai actuale referitoare la strategia de lungă durată, la angajamentul față de platforma Dart, precum și noutățile și ideile inovatoare despre cum putem să folosim Dart în producție.
Până atunci, lăsați deoparte cititul și începeți să jucați Dart! Singuri sau într-un hackathon împreună cu echipa, resursele disponibile on-line și comunitatea activă pe G+, github și stackoverflow, ne ajută să țintim și să înscriem cu un singur Dart. Nu ezitați, vizitați: dartlang.org, dartosphere.org, g.co/dartisans
de Patkós Csaba
de Ioana Varga , Ioana Costea
de Lucian Pop