Perché Asana sta sviluppando il proprio linguaggio di programmazione (Lunascript)?
Aggiornamento: Negli ultimi mesi, Asana è passata dallo scrivere Lunascript per il nostro codice applicativo a Javascript. Le due cose principali che stavano rallentando il nostro sviluppo:
- troppo lavoro rimanente a livello di ricerca per rendere il compilatore un codice più performante
- mancanza di strumenti di supporto
Noi *non* siamo una società di framework, quindi non volevamo dedicare anni a questo lavoro a spese della costruzione del nostro prodotto. Stiamo ancora usando le primitive del framework che abbiamo sviluppato per il linguaggio - soprattutto, i sistemi per ricompilare in modo reattivo la nostra UI e sincronizzare i cambiamenti con il server - semplicemente non stiamo più usando la sintassi leggermente più bella (e lo stile funzionale) che Lunascript forniva.
A lungo termine, potremmo far rivivere il compilatore Lunascript. Pensiamo che questo possa essere particolarmente attraente una volta che passeremo dal focalizzare Asana come un singolo prodotto ad Asana come una piattaforma. Ma per l'immediato futuro, siamo concentrati sul rilascio del nostro primo prodotto a scapito di continuare a lavorare su Lunascript propriamente detto.
Voglio sottolineare che abbiamo smesso di usare Lunascript, ma l'app è ancora scritta completamente nel framework Luna. Vedi Cos'è il framework tecnologico Luna di Asana? Cosa include e su cosa si basa? per saperne di più. La visione di Luna è sempre stata quella di rendere facile scrivere webapp senza bug, in tempo reale, reattive, collaborative e interattive. La sintassi di Lunascript è sempre stata un "nice-to-have", non un pezzo centrale della visione.
------------
Per la stessa ragione per cui siamo passati dall'assembly al C a Java a Python (o una progressione simile): i linguaggi di livello più alto eliminano molte infrastrutture e così facendo migliorano drasticamente la velocità di sviluppo.
Se si pensa alla storia del web, siamo passati essenzialmente da dumps di testi a homepages statiche a pagine generate dinamicamente a pagine con AJAX a pagine web Comet completamente in tempo reale.
Quello che significa è che ci sono un sacco di strati di cose in corso che semplicemente non sono supportate a livello di linguaggio, e si finisce con un sacco di stesso codice dappertutto. Per esempio, ogni variabile che ha bisogno di essere aggiornata da Comet (ad esempio, il numero sul mio badge Home su Quora) ha bisogno di essere avvolta da una sorta di gestore Comet così come da un sistema di dispatch per aggiornare tutto ciò che nel DOM tocca quella variabile. Lunascript astrae tutto ciò e mantiene automaticamente l'intera pagina adeguatamente sincronizzata senza che voi, in quanto autori del codice, dobbiate nemmeno pensare al fatto che ci sia qualche aggiornamento in corso.
Come il doversi preoccupare della gestione della memoria (in C) o il non avere un supporto sintattico per i dizionari (in Java) rallenta, il doversi preoccupare della sincronizzazione o il non avere un supporto sintattico per i letterali XML rallenta gli attuali linguaggi di programmazione web.
Scrivere un nuovo linguaggio non è l'unica soluzione a questo, ma è il modo più pulito ed elegante. Questo non vuol dire che sia il migliore: ci sono sostanziali compromessi nello scrivere un linguaggio. In particolare, non si beneficia molto del lavoro di altri programmatori, e si ha bisogno di affondare molto tempo di sviluppo nel linguaggio stesso.
L'opinione di Asana è che la potenza dell'astrazione garantita da Lunascript è così grande che, alla fine, sarà stato più veloce scrivere Lunascript e poi scrivere una webapp sulla scala di Asana che scrivere una webapp sulla scala di Asana senza scrivere Lunascript.
Va anche detto che avere il proprio linguaggio non è una cosa così estrema da fare. Considerate, per esempio, Apple con Objective-C. Inoltre, Facebook ha cose come FBML e FQL, e Salesforce ha il proprio linguaggio. Per supportare una piattaforma, alla fine avrete bisogno del vostro linguaggio in qualche forma, e ci sono vantaggi nell'avere coerenza nel modo in cui un sito web stesso è scritto e il modo in cui gli sviluppatori della piattaforma scrivono applicazioni.
Infine, non è che Asana usi esclusivamente Lunascript. Ci sono altri linguaggi (specialmente Javascript) in uso pesantemente. In qualche modo, Lunascript è solo un linguaggio di template Javascript, e rollare il proprio linguaggio di template è probabilmente più comune che non nelle aziende web in questi giorni.
Articoli simili
- Qual è la differenza tra linguaggio macchina, linguaggio assembly e linguaggio di alto livello nei computer?
- Il linguaggio assembly è considerato un linguaggio di programmazione funzionale?
- In quale linguaggio di programmazione è codificato Netflix? Come si usa questo linguaggio?
- Perché le aziende stanno sviluppando smartphone pieghevoli se la gente non lo vuole?