Uploaded avatar of ErikSchierboom

È l'Appy August!

@ErikSchierboom
Circa 3 anni fa
Video

Introduzione

Ciao. Benvenuti. Spero che stiate tutti bene. Spero che vi siate divertiti a esplorare alcuni linguaggi vecchi e influenti durante il Jurasic July. Ora passiamo all'ottavo mese del 2023 e al nostro settimo mese a tema: Appy August.

Cosa intendiamo con app?

Beh, può significare diverse cose:

  • Applicazioni web, il pane quotidiano di molte delle nostre giornate ormai
  • App native, come quelle che girano sul tuo telefono o tablet
  • App desktop che girano direttamente sul tuo sistema operativo Windows, Mac o Linux
  • Applicazioni specifiche per un dominio
  • Applicazioni aziendali
  • E molto altro!

E quali sono i linguaggi?

Parliamo di ben 14 linguaggi: ABAP, CoffeeScript, Dart, Delphi, Elm, Java, JavaScript, Kotlin, Objective-C, PHP, PureScript, ReasonML, Swift e TypeScript.

I badge

Ottieni il badge completando 5 esercizi in uno di questi linguaggi questo mese. E per il badge annuale, devi completare:

  • Anagramma: data una parola e un array di possibili anagrammi, trova i suoi anagrammi
  • Numero di telefono: ripulisci un numero di telefono
  • Triangolo: classifica un triangolo
  • Trascrizione dell'RNA: trasforma una sequenza di DNA nel suo complemento di RNA
  • Punteggio Scrabble: data una parola, determina il suo punteggio a Scrabble

Panoramiche

ABAP

  • Sviluppato da SAP SE negli anni '80, e l'obiettivo di progettazione diventa chiaro quando guardiamo cosa significava l'acronimo: Allgemeiner Berichts-Aufbereitungs-Prozessor, che in tedesco significa «processore generale di preparazione dei rapporti». In seguito, ABAP è cambiato per essere più generalmente applicabile, e l'acronimo è stato aggiornato in Advanced Business Application Programming per riflettere questo
  • Linguaggio fortemente e staticamente tipizzato
  • Multi-paradigma: supporta la programmazione imperativa e orientata agli oggetti
  • Compilato in bytecode. Curiosamente, il codice sorgente è memorizzato all'interno del database
  • Tutto il codice gira nel contesto di un sistema SAP, che consiste in un database relazionale e uno o più server applicativi
  • Tecnologia proprietaria e closed-source, anche se uno dei nostri maintainer ha realizzato una fantastica reimplementazione open source
  • Usato per applicazioni aziendali, come finanza, gestione dei materiali, contabilità e management. Ha clienti in tutto il mondo, con molti grandi nomi come Apple, Amazon e Walmart

Perché è fantastico

  • In costante evoluzione, con nuove funzionalità aggiunte regolarmente
  • Affidabile: funzionalità stabili con decenni di esperienza alle spalle
  • Ampia libreria standard

Funzionalità distintive

  • Integrazione senza soluzione di continuità con il sistema SAP e il database, ma anche con molti altri sistemi
  • Il Dizionario ABAP contiene tutti i metadati sui dati nel sistema SAP, incluse tabelle, viste e strutture. I tipi di questo dizionario possono essere usati per tipizzare staticamente le variabili, anche quando il tipo è una tabella
  • ABAP Workbench fa parte del sistema ABAP e contiene una suite di strumenti per modificare i programmi. Include la progettazione delle schermate

CoffeeScript

  • Il linguaggio ha ricevuto i suoi primi commit nel 2009 da Jeremy Ashkenas; il messaggio del primo commit era etichettato «commit iniziale del linguaggio misterioso»
  • Tipizzato dinamicamente e multi-paradigma (orientato agli oggetti, imperativo, funzionale, prototipale)
  • Compila in JavaScript (operazione nota come transpilazione). La regola d'oro di CoffeeScript è: «È solo JavaScript». Uno dei primi linguaggi di successo nel «transpiling verso JS»
  • È diventato popolare perché CoffeeScript non aveva alcuni dei problemi con cui lottavano le persone che usavano JS a quel tempo (come il binding di this che funzionava diversamente, o le classi non supportate). È stato incluso in Ruby on Rails a partire dalla versione 3.1
  • Nel 2017 il linguaggio ha ricevuto la versione 2.0, che mirava a portarlo al livello dell'ultimo standard JavaScript. Il linguaggio riceve un aggiornamento circa una volta all'anno
  • Il compilatore del linguaggio è stato originariamente scritto in Ruby, ma nel 2010 è stato sostituito da un compilatore self-hosting scritto in CoffeeScript (il compilatore non dipende da NodeJS e può girare direttamente nel browser)
  • CoffeeScript è stato influente perché ha ispirato JavaScript ad adottare alcune funzionalità (la sintassi delle funzioni lambda con freccia, le classi)
  • In passato era usato da Dropbox e in Rails

Perché è fantastico

  • Sintassi pulita e concisa, ispirata a Python, Ruby e Haskell. Meno verboso di JavaScript, elimina molte parentesi tonde e graffe, in parte grazie all'uso dell'indentazione significativa (gli spazi bianchi sono importanti)
  • Semantica semplificata, ad esempio nessuna confusione su let, var e const, che non esistono, e == viene transpilato in === (uguaglianza stretta), mentre i binding delle funzioni prevengono i comuni errori con this
  • Basato su espressioni, il che significa che puoi assegnare il risultato di un'espressione if a una variabile
  • Molto zucchero sintattico, ad esempio usa @ invece di this, yes/on possono essere usati al posto di true, // per la divisione intera, @ invece di this e molto altro

Funzionalità distintive

  • Compila in JavaScript pulito e leggibile dall'uomo, con una corrispondenza uno a uno tra il codice sorgente e quello generato
  • Ottima interoperabilità con JavaScript: puoi usare facilmente codice scritto in JS da CoffeeScript (e viceversa). Usa qualsiasi libreria JS scritta
  • Aggiunge funzionalità che mancano o mancavano in JavaScript: le list comprehension, l'interpolazione di stringhe, l'operatore esistenziale (?), i confronti concatenati
  • Linguaggio piccolo, il compilatore è di circa 500 kb (100 kb compresso)

Dart

  • Progettato da Lars Bak e Kasper Lund presso Google
  • Prima release nel 2011
  • L'obiettivo era creare un linguaggio veloce e produttivo, particolarmente adatto a costruire interfacce utente
  • Tipizzato staticamente
  • Multi-paradigma: principalmente orientato agli oggetti, ma anche funzionale e imperativo
  • Può essere interpretato e compilato just-in-time
  • Usato principalmente per costruire app, ma può anche essere usato per costruire backend

Perché è fantastico

  • Facile da imparare grazie a una sintassi familiare
  • Sistema di tipi moderno: inferenza dei tipi, pattern matching, async/await
  • Documentazione eccellente
  • Sicurezza grazie a un sistema di null-safety solido: basta eccezioni di puntatore nullo
  • Buoni strumenti, supporto in vari IDE. Ottimizzato per un ciclo di feedback breve, ad esempio tramite un veloce hot reload
  • Ecosistema in crescita con molte librerie disponibili

Funzionalità distintive

  • Può compilare in JS e in codice nativo, ma anche in Swift e Kotlin, ottimo per le app mobile
  • La libreria Flutter può essere usata per costruire rapidamente app mobile, web, desktop o embedded. Scrivi una volta, esegui su piattaforme diverse
  • Eccellente supporto alla concorrenza, con async/await, isolate (costrutti leggeri per eseguire la concorrenza), future e altro ancora

Delphi

  • Delphi è stato sviluppato da Borland e rilasciato nel 1995
  • È un linguaggio di programmazione Object Pascal ed è stato sviluppato da Anders Hejlsberg, uno degli architetti principali di C#
  • Fortemente e staticamente tipizzato
  • Compila in codice nativo
  • Multi-paradigma: prevalentemente orientato agli oggetti, ma anche imperativo, dichiarativo e a eventi
  • Usato in applicazioni aziendali, interfacce grafiche e nelle scuole (per insegnare la programmazione)

Perché è fantastico

  • Facile da imparare. Object Pascal combina la semplicità e la chiarezza di Pascal con le funzionalità della programmazione orientata agli oggetti, rendendo più facile scrivere e mantenere il codice
  • Ambiente di sviluppo integrato (IDE): l'IDE di Delphi offre un ambiente intuitivo e ricco di funzionalità che snellisce il processo di sviluppo. Fornisce navigazione del codice, strumenti di debug, completamento del codice e altre funzionalità di produttività che rendono lo sviluppo più efficiente
  • Stabilità: esiste dai primi anni '90, con una storia di strumento e linguaggio di sviluppo affidabile e stabile, inclusa una forte compatibilità retroattiva. Il codice scritto nelle versioni precedenti di Delphi può ancora essere compilato ed eseguito nelle versioni più recenti con modifiche minime
  • Supporto multipiattaforma: Delphi ha ampliato le proprie capacità oltre Windows e offre supporto allo sviluppo multipiattaforma, permettendo agli sviluppatori di puntare a diversi sistemi operativi come macOS, iOS, Android e altri. Questo consente di creare applicazioni per un pubblico più ampio e aumenta la portata dei progetti
  • Comunità e supporto solidi: Delphi ha una comunità di sviluppatori dedicata e attiva che contribuisce all'ecosistema con librerie, strumenti e risorse

Funzionalità distintive

  • Eseguibili ad alte prestazioni: le applicazioni Delphi sono note per la loro velocità e le loro prestazioni. Il compilatore Delphi produce eseguibili nativi altamente ottimizzati, il che può essere cruciale per alcuni tipi di applicazioni, come quelle che richiedono elaborazione in tempo reale o pesanti attività di calcolo
  • Ambiente di sviluppo rapido di applicazioni (RAD): strumenti di progettazione visuale con drag-and-drop permettono agli sviluppatori di creare interfacce utente e collegarle alla funzionalità con il minimo sforzo, accelerando il processo di sviluppo
  • Architettura basata su componenti: si basa su un'architettura a componenti, in cui si costruiscono componenti riutilizzabili per costruire applicazioni. Rende più facile riutilizzare il codice e riduce i tempi di sviluppo
  • Gestione degli eventi: Delphi usa un modello di eventi integrato, che permette agli sviluppatori di rispondere facilmente alle azioni dell'utente e ad altri eventi. La gestione degli eventi semplifica il processo di cattura dell'input dell'utente o degli eventi di sistema e di risposta adeguata
  • Connettività al database: Delphi fornisce componenti nativi di accesso al database che consentono un'integrazione senza soluzione di continuità con vari sistemi di database. Questo supporto integrato semplifica lo sviluppo di applicazioni basate su database

Elm

  • Il linguaggio è stato creato da Evan Czaplicki per la sua tesi di laurea e rilasciato nel 2012
  • Inizialmente affrontava il tema della programmazione reattiva funzionale (FRP) per le interfacce grafiche (FRP con i segnali), ma nel 2017 la FRP è stata abbandonata in favore di TEA (The Elm Architecture)
  • Linguaggio funzionale, staticamente e fortemente tipizzato
  • Sintassi ispirata a Haskell
  • Linguaggio open source, ma con opinioni molto forti, e lo stile di sviluppo prevede lunghi periodi di lavoro intenso per Evan prima di rendere pubbliche le cose. Quindi le PR potrebbero restare non unite per molto tempo, e il progetto potrebbe sembrare fermo, ma è solo lo stile di lavoro di Evan
  • Usato in siti web, ad esempio NoRedInk, Vendr, Rakuten, Brilliant

Perché è fantastico

  • È un linguaggio molto piccolo, uno dei più facili da imparare della famiglia ML dei linguaggi funzionali staticamente tipizzati. Questo lo rende quasi ideale per insegnare la programmazione funzionale
  • Gli errori del compilatore sono i più belli e utili che tu possa trovare in giro
  • Linguaggio stabile: l'ultima release è del 2019
  • I pacchetti nell'ecosistema sono pochi ma di alta qualità
  • Un potente ecosistema di linting con elm-review (alimenta l'analizzatore della traccia Elm di Exercism)

Funzionalità distintive

  • L'Elm Architecture (TEA) è alla base di tutte le app Elm, quindi è molto facile esaminare applicazioni Elm sconosciute
  • Nessuna eccezione a runtime! Tranne un paio di cose
  • Nessuna rottura quando si aggiornano le dipendenze: il versionamento semantico è imposto dal compilatore
  • Quando compila, funziona (tranne gli errori di logica). E una volta che ci si abitua, è molto difficile tornare ad altri linguaggi
    • «elm-ui» di Matthew Griffith abilita il «quando compila, funziona» anche per stile e layout: non ti serve il CSS
  • App web full-stack: Lamdera è uno spin-off che usa Elm per app web full-stack con zero collante tra frontend e backend

Java

  • Sviluppato da James Gosling presso Sun Microsystems e rilasciato nel 1995
  • Cinque obiettivi originali:
    • Semplice, orientato agli oggetti e familiare
    • Robusto e sicuro
    • Neutro rispetto all'architettura e portabile
    • Alte prestazioni
    • Interpretato, threaded e dinamico
  • Fortemente e staticamente tipizzato
  • Compilato in bytecode (si sta lavorando al codice nativo)
  • Multi-paradigma: imperativo, orientato agli oggetti e funzionale
  • Il linguaggio e la macchina virtuale hanno specifiche ufficiali, e quindi anche più implementazioni (ad esempio la JVM di OpenJDK e la Hotspot VM di Oracle)
  • Usato in tantissimo software, dai siti web ai sistemi embedded, e dalle app ai database

Perché è fantastico

  • Gira (quasi) ovunque (come l'aggiornamento di Java sarà felice di ricordarti ;))
  • Scopo generale: può essere usato per quasi qualsiasi carico di lavoro, incluse app, siti web e sistemi embedded
  • Interoperabilità con altri linguaggi della JVM, come Kotlin, Groovy, Scala e Clojure
  • Strumenti eccellenti, sia per gli IDE sia per altri strumenti come i sistemi di build

Funzionalità distintive

  • La JVM è una macchina virtuale matura, stabile e altamente performante, che viene continuamente migliorata
  • Enorme ecosistema, con un numero enorme di librerie disponibili. Queste librerie, come Java, sono mature, stabili e complete di funzionalità
  • In evoluzione: il linguaggio e il runtime sono ancora in evoluzione, con aggiornamenti regolari al linguaggio per renderlo più moderno e rispondere ai reclami delle persone (come la riduzione del boilerplate e della verbosità). Per il runtime, vengono avviati regolarmente nuovi progetti per farlo evolvere ulteriormente (ad esempio il progetto Loom per costrutti di concorrenza leggeri e la compilazione nativa tramite GraalVM)

JavaScript

  • Brendan Eich è stato assunto da Netscape nel 1995 per fornire un linguaggio che rendesse dinamiche le pagine web. Il primo prototipo, com'è noto, è stato creato in 10 giorni
  • Standardizzato come ECMAScript nel 1997
  • Dinamico e debolmente tipizzato
  • Un tempo era solo interpretato, ma oggi è spesso compilato just-in-time
  • Multi-paradigma: prototipale (piuttosto raro), ma anche orientato agli oggetti, imperativo e funzionale
  • Enormemente influente nel rendere il web il successo che è oggi. Ad esempio, AJAX è stato molto utile per aggiungere interattività. Standard de facto per lo sviluppo web, poiché è l'unico linguaggio di programmazione con supporto integrato nel browser
  • Probabilmente il linguaggio più usato al giorno d'oggi
  • Usato per backend, frontend, script e strumenti a riga di comando

Perché è fantastico

  • Scopo generale: può essere usato per molti carichi di lavoro: backend, frontend, script, strumenti a riga di comando. Molti strumenti usati per il web sono scritti in JavaScript (e girano su nodejs)
  • I runtime (come V8) sono fortemente ottimizzati e possono essere molto performanti, anche se il linguaggio è altamente dinamico
  • Linguaggio relativamente piccolo, il che lo rende relativamente facile da imparare. Poterlo eseguire in un browser lo rende particolarmente bello, perché puoi ottenere un feedback visivo mentre impari
  • Le specifiche vengono aggiornate frequentemente per introdurre nuove funzionalità, come async/await e l'interpolazione di stringhe. C'è anche molta innovazione negli strumenti, con tool più recenti come deno, esbuild e bun.js sviluppati per aiutare a lavorare con basi di codice JavaScript
  • Il supporto a JSON è di prim'ordine, come dimostra il fatto che JSON sta per JavaScript Object Notation
  • Progettato per essere adatto al codice basato su eventi e non bloccante

Funzionalità distintive

  • Enorme ecosistema. È disponibile una quantità enorme di librerie (2,1 milioni di pacchetti a settembre 2022), ma anche molti altri linguaggi che hanno come target JavaScript
  • Gira sulla maggior parte delle piattaforme e dell'hardware, da Windows ad Apple, dai Raspberry Pi ai telefoni, dai server web alle piattaforme serverless. I browser web hanno il supporto nativo integrato, quindi non serve installare un runtime
  • Ideale per lo sviluppo web, con molti framework tra cui scegliere (React, Vue, Angular) e molti strumenti per aiutare a costruire applicazioni web (ad esempio eslint, parcel)
  • Può essere usato in modo isomorfo, il che significa che lo stesso linguaggio (e la stessa base di codice) può essere usato sia per il backend sia per il frontend. Questo lo rende più facile da mantenere e consente il riutilizzo del codice tra frontend e backend
  • Un'enorme popolarità significa: molte risorse da cui imparare (video, blog, corsi), una vasta comunità con cui interagire

Kotlin

  • Sviluppato da JetBrains nel 2010, famosa per i suoi IDE (ad esempio IntelliJ, CLion, GoLand e Rider)
  • La maggior parte dei prodotti di JetBrains era scritta in Java, ma volevano un linguaggio JVM che riducesse il codice boilerplate, accelerasse lo sviluppo e supportasse alcune funzionalità che mancavano loro. Scala aveva queste funzionalità, ma si è rivelato troppo lento da compilare. Così è nato il progetto Kotlin
  • Fortemente e staticamente tipizzato
  • Multi-paradigma: imperativo, orientato agli oggetti, funzionale, dichiarativo
  • Per impostazione predefinita compila in bytecode JVM, ma può anche compilare in JS e in codice nativo (utile per le piattaforme in cui le macchine virtuali non sono possibili o desiderabili, come i dispositivi iOS)
  • Nel 2019 è stato indicato da Google come il linguaggio preferito per scrivere app Android
  • Usato per costruire siti web, app (per lo più Android) e persino interi IDE (gli IDE summenzionati)

Perché è fantastico

  • Scopo generale: può essere usato per quasi qualsiasi carico di lavoro, incluse app e siti web. Nel 2019 Google ha indicato Kotlin come linguaggio preferito per sviluppare app Android
  • Girando sulla JVM, si applicano tutti i suoi vantaggi: una macchina virtuale matura e altamente performante e un numero enorme di librerie disponibili
  • Allevia molti dei problemi che le persone potrebbero avere con Java, come le eccezioni controllate, la null safety e la verbosità
  • Linguaggio moderno: inferenza dei tipi avanzata, basato su espressioni, immutabilità, pattern matching, coroutine, canali
  • Strumenti eccellenti (cosa prevedibile quando l'IDE stesso è scritto nel linguaggio :)

Funzionalità distintive

  • Produttivo: Kotlin adotta le parti migliori di altri linguaggi, fondendole in un unico linguaggio coerente e produttivo, e in alcuni casi migliorando ulteriormente l'originale (ad esempio con i metodi di estensione locali)
  • Coroutine: mentre in molti linguaggi async/await è integrato nel linguaggio, in Kotlin è implementato come libreria usando la funzionalità delle coroutine del linguaggio. Le coroutine sono un modo per gestire le funzioni di sospensione, che forniscono un'astrazione più sicura e meno soggetta a errori per le operazioni asincrone rispetto a future e promise
  • Ottima concorrenza: async/await, canali e immutabilità aiutano tutti a ottenere un'eccellente concorrenza
  • Compose Multiplatform permette di costruire interfacce utente condivise dalla stessa base di codice usando una sintassi dichiarativa

Objective-C

  • Sviluppato originariamente da Brad Cox e Tom Love nei primi anni '80, è stato scelto da NeXT per il suo sistema operativo NeXTSTEP. Data la discendenza diretta di macOS di Apple da NeXTSTEP, è diventato il linguaggio d'elezione per il software Apple
  • Progettato per combinare le idee orientate agli oggetti di SmallTalk con il C, usando il passaggio di messaggi come costrutto centrale orientato agli oggetti
  • Superset del C, quindi qualsiasi codice C è codice Objective-C valido e i due possono essere combinati nella stessa base di codice
  • Tipizzazione statica e dinamica
  • Compilato
  • Linguaggio standard per scrivere applicazioni macOS e iOS fino all'arrivo di Swift nel 2014
  • Usato per app macOS e iOS

Perché è fantastico

  • La combinazione di C con funzionalità orientate agli oggetti può essere davvero potente
  • Runtime leggero, che lo rende efficiente in termini di risorse
  • Sintassi delle classi leggera
  • L'enumerazione veloce permette cicli for più semplici rispetto al C
  • Forte compatibilità retroattiva

Funzionalità distintive

  • Supporta l'Automatic Reference Counting (ARC), che rilascia automaticamente la memoria quando un oggetto non è più referenziato, rendendo più semplice la gestione della memoria
  • Il runtime dinamico permette il method swizzling (cambiare dinamicamente il comportamento di un selettore, come il monkey patching), la reflection e il message forwarding (ottimo per i pattern observer o proxy)
  • Protocolli e interfacce portano le funzionalità delle interfacce al C, e le interfacce di categoria permettono persino di estendere i tipi esistenti

PHP

  • Sviluppato e implementato da Rasmus Lerdorf nel 1993 e rilasciato per la prima volta nel 1995
  • Il nome è un acronimo ricorsivo: PHP: Hypertext Preprocessor
  • Tipizzato dinamicamente e debolmente, con la possibilità di aggiungere gradualmente forti asserzioni di tipo a runtime
  • Multi-paradigma: imperativo, funzionale, orientato agli oggetti, procedurale, riflessivo
  • Interpretato o compilato just-in-time
  • La piattaforma originale di rendering lato server
  • Usato per siti web (Facebook, Wikipedia e molti altri) e anche per molti sistemi di gestione dei contenuti (WordPress, Joomla)

Perché è fantastico

  • È onnipresente: PHP è in uso sul 77,4% di tutti i siti web^1, indipendentemente dalle piattaforme specifiche
  • Sintassi semplice, simile ad altri linguaggi di programmazione consolidati: Java, JavaScript, C, il che lo rende facile da imparare
  • Scopo generale. Usalo per molte cose: dalla creazione di piccoli script web alla creazione di grandi applicazioni lato server gestite dalle aziende
  • Molto consolidato e ampiamente adottato. Esistono molte risorse di apprendimento, framework e librerie
  • Forte supporto ai database
  • Ancora in sviluppo attivo, con il rilascio di funzionalità moderne
  • Multipiattaforma. Gira su tutto: Windows, Mac, Linux, Unix
  • Open source e gratuito

Funzionalità distintive

  • Semplice da eseguire e rilasciare. Nessuna catena di build. Nessun compilatore
  • Sistema dei tipi graduale. Aggiungi i tipi dove ti servono, usa la tipizzazione dinamica per semplificare parti dello sviluppo
  • Prototipazione rapida. Crea una pagina web per testare la tua idea ed eseguirla sulla tua macchina

PureScript

  • Progettato da Phil Freeman, prima versione rilasciata nel 2013
  • Ha iniziato a lavorare su PureScript perché non era soddisfatto di altri tentativi di transpilare Haskell in JavaScript
  • Fortemente e staticamente tipizzato
  • Compila in JS
  • Linguaggio puramente funzionale
  • Sintassi e funzionalità ispirate a Haskell
  • Usato per costruire applicazioni web, ma può anche essere usato per costruire app lato server o applicazioni desktop tramite Electron

Perché è fantastico

  • Condivide gran parte di ciò che rende grande Haskell:
    • Sistema di tipi forte e potente: tipi algebrici, classi di tipi, tipi higher-kinded
    • Espressivo: pattern matching, inferenza dei tipi
    • Sicurezza: nessun null, tipi immutabili
    • Puramente funzionale: gli effetti collaterali sono codificati nel sistema dei tipi
  • Decodifica e codifica di JSON verso i tipi facili e type-safe
  • Compila in JavaScript leggibile dall'uomo
  • Buoni strumenti

Funzionalità distintive

  • Il nucleo funzionale è perfetto per applicazioni web type-safe senza errori a runtime
  • Eccellente interoperabilità con JS
  • Compila in JS efficiente

ReasonML

  • Creato da Jordan Walke presso Facebook, prima versione rilasciata nel 2016
  • Basato su OCaml, ma con le idiosincrasie rimosse e progettato per l'interoperabilità con JS
  • Linguaggio funzionale e staticamente tipizzato
  • Compilato
  • Usato per costruire siti web (ad esempio presso Facebook)

Perché è fantastico

  • Tutte le qualità di OCaml, ma in un ambiente web:
    • Sistema di tipi potente: tutti i valori sono tipizzati con tipi più semplici (come record, variant e option) preferiti ai tipi complessi. Niente più errori di undefined, il che migliora l'affidabilità
    • Espressivo: pattern matching, inferenza dei tipi, destrutturazione
    • Sicurezza: nessun null, immutabilità per impostazione predefinita
  • Compila in JavaScript leggibile dall'uomo
  • Può essere compilato in OCaml (e viceversa), il che significa che può usare l'intero ecosistema OCaml (ad esempio per compilare in un binario nativo)

Funzionalità distintive

  • I tempi di compilazione di ReasonML sono super veloci, il che significa cicli di iterazione rapidi
  • Eccellente interoperabilità con JS, sia per usare JS dal codice ReasonML sia per esportare ReasonML verso JS. Può persino generare tipi TS. Può anche interoperare con il C. Supporta persino una sintassi simile a JSX

Swift

  • Lo sviluppo di Swift è iniziato da Chris Lattner nel 2010 ed è stato annunciato in tutto il mondo all'evento WWDC del 2014
  • L'obiettivo era sostituire il vecchio linguaggio di programmazione di Apple, Objective-C, che non aveva ricevuto grandi cambiamenti dai primi anni '80, con un linguaggio nuovo e moderno. Progettato per interoperare con gran parte di Objective-C
  • Fortemente e staticamente tipizzato
  • Compilato, usando LLVM per gestire la compilazione in codice macchina (come, ad esempio, Rust)
  • Multi-paradigma: funzionale, orientato agli oggetti, imperativo, dichiarativo
  • In origine software proprietario, ma reso open source nel 2015
  • Usato principalmente per app mobile e desktop, ma è anche usato per backend e in scenari serverless

Perché è fantastico

  • Linguaggio moderno: inferenza dei tipi, pattern matching, tipi algebrici, stringhe Unicode
  • Produttivo: Swift adotta le parti migliori di altri linguaggi (come Rust, Python, C# e Ruby), fondendole in un unico linguaggio coerente e produttivo
  • Sicuro: i puntatori non sono esposti, un tipo optional che previene le eccezioni di puntatore nullo, gestione esplicita degli errori e gestione automatica della memoria tramite ARC (Automatic Reference Counting)
  • Aggiornato regolarmente. All'inizio, Apple non aveva paura di introdurre cambiamenti dirompenti per cose che si erano dimostrate non funzionare bene. Questo impedisce l'accumularsi di «zavorra». Di solito viene reso disponibile uno strumento per aiutare nella migrazione del codice. Dalla versione 5, l'Application Binary Interface (ABI) è stabile
  • A differenza di Objective-C, Swift gira su tutte le principali piattaforme: macOS, Windows e Linux

Funzionalità distintive

  • Veloce. Compila in codice macchina efficiente, il che lo rende veloce in esecuzione
  • Interoperabilità senza soluzione di continuità con Objective-C, ma interopera bene anche con C e C++
  • Grande comunità, con molte risorse eccellenti disponibili

TypeScript

  • Creato in Microsoft in risposta alla frustrazione di sviluppare applicazioni su larga scala in JS. Uno dei progettisti era Anders Hejlsberg, l'architetto principale di C# e creatore di Delphi e Turbo Pascal
  • La prima versione è stata rilasciata nel 2012
  • Multi-paradigma: funzionale, prototipale, imperativo, orientato agli oggetti e generico
  • Usa la tipizzazione graduale e il duck typing
  • Compilato (in JS)
  • Usato per siti web, sia frontend sia backend, script e strumenti a riga di comando

Perché è fantastico

  • Sistema di tipi potente e flessibile: tipi union, tipi letterali, tuple. Praticamente qualsiasi pattern usabile nel codice JS può essere descritto in modo type-safe in TS. Il sistema di tipi è così potente che è persino Turing complete
  • Essendo un superset di JS, permette un'introduzione graduale in una base di codice JS
  • Combina il meglio dei due mondi: tipizzazione dinamica e statica
  • In rapida crescita di popolarità, con molti strumenti che forniscono tipi TypeScript o vengono convertiti in TypeScript. Molte risorse disponibili
  • Il linguaggio viene aggiornato regolarmente, con l'adozione anticipata delle funzionalità ECMAScript in arrivo

Funzionalità distintive

  • Sicurezza e correttezza migliorate: la tipizzazione statica può eliminare molte classi di errori che si fanno tipicamente con JS
  • Interoperabilità senza soluzione di continuità con JS. Si possono aggiungere definizioni di tipo personalizzate per lavorare con il codice JS in modo type-safe. Sono disponibili definizioni di tipo personalizzate per un gran numero di casi
  • Ottimi strumenti e supporto IDE. Annotazioni di tipo, completamento del codice e persino riorganizzazioni sicure su larga scala sono disponibili in molti IDE
  • Ottieni tutti i vantaggi di girare nell'ecosistema JS: un numero enorme di pacchetti, molti strumenti, una grande comunità, ecc.

Quale provare?

  1. Se vuoi costruire app native, Dart, Delphi, Java, Kotlin e Swift sono ottime scelte. Detto questo, anche qualsiasi altro linguaggio che compila in JS potrebbe essere usato per costruire app native. Vale la pena notare che il linguaggio ufficiale per costruire app iOS/macOS è Swift, e per le app Android è Kotlin
  2. Se vuoi costruire app web, CoffeeScript, Dart, Elm, Java, JavaScript, Kotlin, PHP, PureScript, ReasonML e TypeScript sono ottimi
  3. Se sei interessato alla programmazione funzionale, Elm, PureScript e ReasonML sono scelte naturali, mentre CoffeeScript, Dart, Java, JavaScript, Kotlin, Swift e TypeScript supportano anch'essi la programmazione funzionale
  4. Per la programmazione orientata agli oggetti, ABAP, Dart, Delphi, Java, Kotlin, Objective-C, PHP e Swift sono candidati logici, mentre CoffeeScript, JavaScript e TypeScript supportano anch'essi questo paradigma
  5. Se sei interessato a scrivere applicazioni aziendali, ABAP e Delphi sono perfetti per questo
01 agosto 2023 · Ti è stato utile?