Dart
linguaggio di programmazione
AutoreGoogle
Data di origine10 ottobre 2011
Ultima versione3.12.2 (9 giugno 2026)
Utilizzodart.dev
Paradigmiprogrammazione multi-paradigma, programmazione orientata agli oggetti, programmazione funzionale, programmazione imperativa e riflessione
Tipizzazioneopzionale
Specifiche di linguaggioDart Language Specification
Estensioni comunidart
Influenzato daCoffeeScript,[senza fonte] Java, JavaScript, Strongtalk[senza fonte]
Implementazione di riferimento
Sistema operativomultipiattaforma
Licenzalicenza BSD
Sito webdart.dev

Dart (originariamente chiamato Dash[1]) è un linguaggio di programmazione sviluppato da Google. È stato presentato alla conferenza "GOTO Aarhus 2011" dal 10 al 12 ottobre 2011[2]. Lo scopo di Dart è quello di sostituire JavaScript come lingua franca per lo sviluppo web sulla piattaforma "web aperto"[3].

Il compilatore Dart permette di scrivere programmi sia per il web che per desktop e server, attraverso l'uso di due diverse piattaforme:

  • Dart Native: Per i dispositivi (smartphone, desktop, server, and altro), Dart Native include sia la Dart VM con una compilazione JIT (just-in-time) e un compilatore AOT (Ahead of Time) per la produzione di codice eseguibile.
  • Dart Web: Per il web, Dart Web include sia un compilatore per lo sviluppo (dartdevc) che uno per la produzione (dart2js).

Motivo per un nuovo linguaggio

modifica

L'intento di Dart è quello di risolvere i problemi di JavaScript (che, secondo il memo interno trapelato,[3] non possono essere risolti con l'evoluzione del linguaggio) offrendo al tempo stesso migliori prestazioni, la possibilità di sviluppare più facilmente strumenti utili alla gestione di progetti di grandi dimensioni e migliori funzionalità legate alla sicurezza[1]. Gli ingegneri di Google stanno sviluppando un IDE basato sul cloud chiamato Brightly, che potrebbe essere la prima applicazione sviluppata con Dart. Google offrirà un cross-compilatore che compila il linguaggio Dart in ECMAScript 3 al volo, per compatibilità con browser privi del supporto nativo per Dart. Ci sarà anche uno strumento per convertire il codice delle chiusure tipizzate in linguaggio Dart.[4]

La VM Dart ed il cross-compilatore Dart dovevano essere disponibili e integrati nel browser Chrome già nel tardo 2011[1] ma Google stessa nel 2017 rinuncia all'integrazione con il browser data la forte opposizione esercitata dai maggiori concorrenti per la standardizzazione del linguaggio[5].

Esempio

modifica

Il famoso esempio Hello world:

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

Una funzione per calcolare l'n-esimo Numero di Fibonacci:

int fib(int n) {
  if (n <= 1) return n;
  return fib(n - 1) + fib(n - 2);
}

main() {
  print('fib(20) = ${fib(20)}');
}

Una classe semplice Persona che memorizza il suo nome, cognome e età. Età è modificabile, visto che cambia. È riportato l'esempio sia in java sia in dart, per mostrare la differenza.

In Java

modifica
class Persona {
    private String nome, cognome;
    private int anni;
    public Persona(String nome, String cognome, int anni) {
        this.nome = nome;
        this.cognome = cognome;
        this.anni = anni;
    }
    public void setAnni(int anni) {
        this.anni = anni;
    }
    public String getNome() {
        return nome;
    }
    public String getCognome() {
        return cognome;
    }
    public int getAnni() {
        return anni;
    }
}

public class Main
{
	public static void main(String[] args) {
	    Persona p1 = new Persona("Marco","Rossi",17);
	    p1.setAnni(18); // dopo un anno
		System.out.println("Ciao "+p1.getNome()+" "+p1.getCognome()+" di età "+p1.getAnni());
	}
}

In Dart

modifica
class Persona {
  String _nome, _cognome;
  int _anni;
  Persona(this._nome,this._cognome,this._anni);
  set anni(value) => _anni = value;
  get nome => _nome;
  get cognome => _cognome;
  get anni => _anni;
}

void main() {
  Persona p1 = Persona('Marco','Rossi',17);
  p1.anni = 18; // dopo un anno
  print('Ciao ${p1.nome} ${p1.cognome} di età ${p1.anni}');
}

Si può notare che dart è molto più minimale.

Utilizzo

modifica

Esistono quattro modi per eseguire il codice Dart:

Transpilato come JavaScript

modifica

Per funzionare nei browser web tradizionali, Dart si affida a un transpilatore (ovvero un compilatore da sorgente a sorgente) per JavaScript. Secondo il sito del progetto, Dart è stato «progettato per essere strumenti di sviluppo facili da scrivere, adatto allo sviluppo di app moderne e capace di implementazioni ad alte prestazioni»[6]. Quando si esegue il codice Dart in un browser Web, il codice viene pre-convertito in JavaScript utilizzando il transpilatore dart2js. Riscritto come JavaScript, il codice Dart è compatibile con tutti i principali browser senza bisogno che i browser adottino Dart. Attraverso l'ottimizzazione dell'output JavaScript scritto per evitare operazioni e controlli costosi, il codice scritto in Dart può, in alcuni casi, essere eseguito più velocemente del codice equivalente scritto a mano utilizzando gli idiomi JavaScript[7].

Indipendente, autonomo

modifica

Il software development kit (SDK) di Dart viene fornito con una macchina virtuale autonoma, che consente l'esecuzione del codice Dart in un ambiente di interfaccia della riga di comando. Poiché gli strumenti del linguaggio inclusi in Dart SDK sono scritti principalmente in Dart, la Dart VM autonoma è una parte fondamentale dell'SDK. Questi strumenti includono il compilatore dart2js e un gestore di pacchetti chiamato pub. Dart viene fornito con una libreria standard completa che consente agli utenti di scrivere app di sistema completamente funzionanti, come i server Web personalizzati[8].

Compilato in anticipo

modifica

Il codice Dart può essere compilato AOT (Ahead of Time) in codice macchina (set di istruzioni nativi). Le app create con Flutter, un SDK per app per dispositivi mobili scritto in Dart, vengono distribuite negli app store come codice Dart compilato AOT[9].

Nativo

modifica
Logo di Flutter
Logo di Flutter

Dart 2.6 con compilatore dart2native per compilare in codice eseguibile nativo autonomo. Prima di Dart 2.6, questa funzione mostrava questa funzionalità solo su dispositivi mobili iOS e Android tramite Flutter[10].

Isolate

modifica

Per ottenere la concorrenza, Dart utilizza gli isolate, che sono worker indipendenti che non condividono la memoria, ma utilizzano invece il passaggio dei messaggi. Questo è simile ai processi di Erlang. Ogni programma Dart utilizza almeno un isolate che è il principale.

Gli isolate sono supportati solo su piattaforme native, mentre su piattaforma web Dart sfrutta i Web worker per ottenere funzionalità simili[11]

Istantanee

modifica

Le istantanee (snapshots) sono una parte fondamentale della macchina virtuale Dart. Le istantanee sono file che archiviano oggetti e altri dati di runtime[12].

Istantanee dello script

modifica

I programmi DART possono essere compilati in file snapshot. Questi file contengono tutto il codice del programma e le dipendenze preimpostate e pronte per l'esecuzione. Ciò consente partenze veloci.

Istantanee complete

modifica

Le librerie di base di Dart possono essere compilate in un file snapshot che consente il caricamento rapido delle librerie. La maggior parte delle distribuzioni standard della macchina virtuale Dart principale dispone di un'istantanea predefinita per le librerie principali che viene caricata in fase di esecuzione.

Istantanee di oggetti

modifica

Dart è un linguaggio molto asincrono. Poiché si tratta di workers che passano messaggi, è necessario un modo per serializzare un messaggio. Questa operazione viene eseguita utilizzando un'istantanea, generata da un determinato oggetto, quindi trasferita a un altro isolato per la deserializzazione.

Note

modifica
  1. ^ a b c (EN) Alex Chitu, Dash, Google's Alternative to JavaScript, su Dash, Google's Alternative to JavaScript, 13 settembre 2011. URL consultato il 21 luglio 2019.
  2. ^ Presentazione: "Opening Keynote: Dart, a new programming language for structured web programming" Archiviato il 13 ottobre 2011 in Internet Archive. - conferenza GOTO Aarhus 2011. Presentazione ufficiale del linguaggio Dart, 10 ottobre 2011
  3. ^ a b (EN) Leaked internal google dart email, su Gist.
  4. ^ (EN) Google Dart to “ultimately ... replace JavaScript”, su 2ality.com.
  5. ^ (EN) Dart VM - Chrome Platform Status, su chromestatus.com. URL consultato il 21 luglio 2019.
  6. ^ Why?, in Dart lang (FAQ).
    «We designed Dart to be easy to write development tools for, well-suited to modern app development, and capable of high-performance implementations.»
  7. ^ JavaScript as a compilation target: Making it fast (PDF), su dartlang.org. URL consultato il 18 agosto 2013 (archiviato dall'url originale il 2 luglio 2016).
  8. ^ An Introduction to the dart:io Library, su Dartlang.org. URL consultato il 21 luglio 2013.
  9. ^ Flutter FAQ, in flutter.io, How does Flutter run my code on iOS?. URL consultato il 2 ottobre 2016.
  10. ^ Announcing Dart 2.6 with dart2native: Compile Dart to self-contained, native executables, su medium.com. URL consultato il 6 dicembre 2019.
  11. ^ Concurrency in Dart, su dart.dev. URL consultato il 6 novembre 2022.
  12. ^ dart compile, su dart.dev. URL consultato il 25 febbraio 2021.

Voci correlate

modifica
  • Document Object Model (DOM) - una convenzione per rappresentare ed interagire con oggetti in documenti HTML, XHTML, ed XML
  • HaXe - linguaggio di programmazione per applicazioni web simile a Dart
  • Opa - un altro linguaggio di programmazione per applicazioni web simile a Dart
  • TypeScript - un linguaggio di programmazione superset di JavaScript
  • Flutter - framework open-source per la realizzazione di interfacce grafiche in Dart

Altri progetti

modifica

Collegamenti esterni

modifica
Controllo di autoritàLCCN (ENsh2014100182 · J9U (ENHE987007407419905171

📚 Artikel Terkait di Wikipedia

Social web

Disturbo d'ansia ^ What is PHP Social Networking Software? « Simplify Php Web Programming, su echophp.wordpress.com, 28 gennaio 2008. URL consultato il 20 ottobre

Application programming interface

progetto di riferimento. In un programma informatico, con application programming interface (API), in italiano "interfaccia di programmazione di applicazioni"

Array

PHP Array Functions - PHP code, su configure-all.com, Computer Programming Web programming Tips. URL consultato l'8 aprile 2011 (archiviato dall'url originale

WEB

programming Web – romanzo di John Wyndham WEB – progetto musicale eurodance/eurotrance attivo negli ultimi anni novanta e nei primi anni duemila Web Entertainment

ABAP

ABAP (acronimo di Advanced Business Application Programming) è un linguaggio di programmazione proprietario i cui diritti sono detenuti dalla società

Tecnica del pomodoro

del software, questo metodo è stato adottato anche in contesti di pair programming. La tecnica è composta da sei passaggi: Si decide l'attività da svolgere

SG-1000

From Import-Only Console, Lock-On Genesis Games, And New TV-On-The-Web Programming, su GamesIndustry.biz, 23 giugno 2006. ^ (EN) Dina 2 in one (2-in-1)

Programmazione neurolinguistica

La programmazione neurolinguistica (PNL; in inglese neuro-linguistic programming, NLP) è un approccio pseudoscientifico alla comunicazione e un sistema