Uploaded avatar of iHiD

December Diversions

@iHiD
Quasi 3 anni fa
Video

Introduzione

Ciao a tutti. Benvenuti a dicembre. Spero che stiate bene.

Abbiamo avuto un ottobre super impegnativo. Abbiamo appena lanciato un grande miglioramento alle soluzioni della community. Ora rimuoviamo i duplicati, così le soluzioni simili compaiono una sola volta; abbiamo aggiunto nuove opzioni di ordinamento, la possibilità di cercare per codice e, se date un'occhiata a C#, vedrete che abbiamo aggiunto anche la possibilità di filtrare per diversi concetti di programmazione. Così potete cercare soluzioni che usano lo scorrimento di bit, la ricorsione o qualunque altra cosa vi piaccia. Lo estenderemo ad altri track durante la community week.

Ma per ora, concentriamoci su #12in23. Novembre è stato un mese interessante, alla scoperta dei linguaggi assembly, ma questo mese puntiamo su un insieme molto vario di linguaggi, precisamente ColdFusion, Groovy, Lua, VimScript e Wren. Come al solito, Erik ci racconterà cosa rende questi linguaggi interessanti e unici.

I badge

Come sempre, potete guadagnare il badge Diversivi di dicembre completando 5 esercizi qualsiasi in questi linguaggi. Abbiamo anche il badge dell'intero anno, che so che molti di voi stanno cercando di ottenere. Per quello abbiamo 5 esercizi in evidenza da completare. Eccoli:

  • Tutte le tue basi: converti un numero, rappresentato come una sequenza di cifre, in un'altra base.
  • Appiattisci l'array: prendi una collezione annidata e restituisci un'unica collezione non annidata.
  • Attacco della regina: determina se due regine su una scacchiera possono attaccarsi a vicenda.
  • Personaggio di D&D: genera casualmente personaggi di Dungeons & Dragons.
  • Codifica run-length: implementa la codifica e la decodifica run-length.

Panoramiche

ColdFusion

  • Creato nel 1995 da Allaire Corporation, acquistata da Macromedia nel 2001 e poi a sua volta acquistata da Adobe nel 2005.
  • Progettato come piattaforma per lo sviluppo web rapido
  • Gira sulla Java Virtual Machine (JVM)
  • Esistono due sintassi separate, che sembrano diverse ma sono semanticamente identiche:
  • La sintassi di markup più vecchia, basata su tag, che estende l'HTML per mostrare contenuti dinamici.
  • La sintassi più recente, simile a ECMAScript, può essere usata dove si usa quella basata su tag, ma anche in file di script separati. L'obiettivo era spostare la logica di business dal markup a un file di script separato
  • CFScript è un linguaggio general-purpose che gira sulla JVM, ed è così che lo usa Exercism. In pratica, non si è mai allontanato davvero dalle sue origini di web server.
  • ColdFusion è un prodotto a pagamento, ma la Lucee Foundation (una no-profit con sede in Svizzera) continua a sviluppare attivamente il proprio server ColdFusion open source, il cui Lucee Server è quello che usiamo per il track di Exercism.
  • È ancora in fase di sviluppo attivo
  • Usato principalmente nel software enterprise; tra i clienti figurano Apple, Adobe, General Motors e altri

Groovy

  • Sviluppato da James Strachan a partire dal 2003. Il progetto è stato adottato da Apache nel 2015.
  • L'obiettivo era sviluppare un linguaggio a tipizzazione dinamica sulla JVM (in contrasto con Java, che è a tipizzazione statica) in grado anche di ridurre il codice boilerplate
  • Sebbene gran parte del codice Java sia anche codice Groovy valido, le differenze sono molte (per esempio Groovy consente la tipizzazione dinamica e la metaprogrammazione avanzata). Il linguaggio ha subito anche una forte influenza da Python e Ruby.
  • Usato per scripting, strumenti di build (Gradle), CI (Jenkins), web app (Grails), testing (Spock). Un popolare add-on di terze parti per gli strumenti Atlassian consente di scrivere script in Groovy.

Lua

  • Lua è stato creato nel 1993 da Roberto Lerusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes alla Pontificia Università Cattolica di Rio de Janeiro, in Brasile.
  • Il nome si pronuncia LOO-ah, che in portoghese significa Luna, ed è un riferimento al linguaggio Sol da cui è stato in parte ispirato, che in portoghese significa «Sole»
  • Progettato principalmente per essere incorporato, con un'attenzione particolare a velocità, portabilità, estensibilità e facilità d'uso nello sviluppo.
  • Influenzato da Modula, CLU, C++, SNOBOL e AWK. Così come LISP e Scheme avevano un unico meccanismo onnipresente per le strutture dati (la lista), Lua ha la sua table.
  • Interpretato tramite bytecode, di solito in fase di esecuzione, ma può essere fatto anche in anticipo.
  • Usato principalmente per scopi di scripting, per esempio in giochi come World of Warcraft, Dota 2 e Crysis, o in applicazioni come Adobe Lightroom e alcuni software di sistema FreeBSD. È anche molto usato per aggiungere estensibilità, ad esempio in Redis, Neovim e Nginx.

VimScript

  • VimScript (chiamato anche Vim Script, con lo spazio, o VimL, da Vim Language) è il linguaggio di scripting usato nell'editor di testo Vim.
  • Deriva da ex, l'editor visuale orientato alle righe che ha preceduto Vi
  • Non è un linguaggio general-purpose, ma un linguaggio specializzato che offre un ambiente di scripting efficace e ottimizzato per estendere e personalizzare le funzionalità di Vim tramite plugin, configurazioni, macro e funzioni.
  • Mentre Vim è scritto principalmente in C, Vimscript permette agli utenti di personalizzare ed estendere Vim tramite un linguaggio di scripting di alto livello.
  • Usato in... beh, in Vim, ma anche in NeoVim, un fork di Vim

Wren

  • Scritto nel 2016 da Bob Nystrom, autore del libro Crafting Interpreters
  • Obiettivi: piccolo, semplice, veloce.
  • Progettato per essere incorporato in altre applicazioni. L'autore trovava le opzioni esistenti (come Lua e TCL) carenti, e voleva un linguaggio semplice e incorporabile che risultasse naturale a chi ha un background orientato agli oggetti
  • Usato in:
    • TIC-80: un computer fantasy per creare, giocare e condividere giochi minuscoli (simile a PICO8)
    • DOME: un framework multipiattaforma per creare giochi.
    • luxe: un motore di gioco multipiattaforma per lo sviluppo rapido di giochi.
    • Wren Console: un REPL e una CLI di Wren, scritti in gran parte in Wren stesso da Josh Goebel, storico collaboratore di Exercism, che usiamo per il track di Wren

E dal punto di vista della programmazione, in cosa differiscono?

ColdFusion

  • A tipizzazione dinamica
  • Multi-paradigma, principalmente OOP ma sempre più funzionale.

Groovy

  • Di solito a tipizzazione dinamica, ma può anche essere a tipizzazione statica (e tipizzazione graduale)
  • Può essere sia interpretato sia compilato (dalla versione 2). Per questo motivo è spesso usato negli script
  • Multi-paradigma: principalmente orientato agli oggetti, ma anche imperativo, funzionale e dichiarativo

Lua

  • A tipizzazione dinamica e di solito interpretato, ma può essere precompilato
  • Multi-paradigma: procedurale, orientato agli oggetti (anche se in modo un po' diverso), funzionale e data-driven

VimScript

  • A tipizzazione dinamica e interpretato
  • Multi-paradigma: imperativo, funzionale e una forma semplice di programmazione orientata agli oggetti

Wren

  • A tipizzazione dinamica, ma definita staticamente; questo permette al compilatore di essere molto veloce.
  • Principalmente un linguaggio orientato agli oggetti, ma anche imperativo e con un po' di programmazione funzionale

Cosa rende questi linguaggi fantastici?

ColdFusion

  • Ottima separazione tra gestione del server e creazione dell'applicazione. La console di amministrazione configura le connessioni al database e il monitoraggio del server (e qualunque altra cosa), mentre chi crea le applicazioni ha solo bisogno del nome di un datasource (un oggetto CF con i metodi necessari, già connesso alle parti appropriate del DBMS), più l'accesso in scrittura a una directory per i file dell'applicazione.
  • Sfrutta la potenza della JVM e dell'ecosistema Java, che comprende la possibilità di importare qualsiasi libreria Java e usarla all'interno di CF

Groovy

  • General-purpose: può essere usato per quasi qualsiasi tipo di carico di lavoro, comprese app e siti web.
  • Girando sulla JVM, si applicano tutti i suoi vantaggi: una VM matura e molto performante e un numero enorme di librerie disponibili. Si integra bene con Java
  • Allevia molti dei problemi che le persone potrebbero avere con Java, come le eccezioni checked,
  • null safety, verbosità e mancanza di metaprogrammazione avanzata
  • Linguaggio moderno: inferenza dei tipi avanzata, closure, sintassi integrata per le espressioni regolari, generazione automatica di getter e setter
  • Ottimo supporto alla programmazione funzionale: closure (come i blocchi di Ruby), currying (applicazione parziale), valutazione lazy, immutabilità e altro ancora

Lua

  • General-purpose: usato nei sistemi embedded, per la prototipazione, lo scripting e lo sviluppo di giochi, applicazioni web e backend.
  • Semplice: sintassi relativamente scarna, il che rende il linguaggio facile da imparare. Solo un paio di tipi di dati atomici e un solo tipo di dato composito integrato: la table. La memoria è gestita dal garbage collector
  • Portabile: l'interprete è scritto in ANSI C, per cui esiste un compilatore per quasi ogni piattaforma

VimScript

  • Semplice: sintassi leggera e facile da imparare e usare.
  • Interoperabilità: accesso facile a file, shell e altri programmi. Tutta la potenza degli strumenti esterni senza lasciare Vim.
  • Espressivo: fare molto con poco. Scrivere script compatti e altamente leggibili.
  • Motore regex potente: l'implementazione delle regex di Vimscript si ispira a quella di Emacs Lisp, offrendo uno strumento potente per la manipolazione del testo.

Wren

  • Piccolo: la VM è implementata in meno di 4000 righe di codice
  • Esemplare: l'implementazione della VM è commentata con cura, scritta in C e non poi così difficile da leggere. Un ottimo modo per imparare a costruire un linguaggio. Gran parte della libreria standard è implementata in Wren, così potete vedere come è implementata anche quella.
  • Familiare: la sintassi permette di prendere confidenza più in fretta. Se avete familiarità con Java o C++, vi sentirete subito a casa. Consente l'overloading dei metodi in base all'arità
  • Documentazione davvero ottima: la documentazione del linguaggio e della libreria standard è facile da leggere, ampia e ricca di esempi.
  • Libreria standard piccola ma sorprendentemente completa.

Caratteristiche di spicco

ColdFusion

  • Tutto incluso: tantissime cose sono integrate: lavorare con PDF, ZIP, Excel, XML, JSON, la creazione di API, email, l'integrazione con S3, tantissimi database diversi… senza installare pacchetti aggiuntivi. Ottimo per ridurre le incompatibilità tra versioni
  • Scalabile e sicuro, ottimo per il software enterprise
  • Programmazione semplice e intuitiva, che permette anche ai principianti di mettere in funzione molto rapidamente pagine web complesse basate sui dati. L'integrazione con DreamWeaver è eccellente.

Groovy

  • Sintassi flessibile: punti e parentesi possono essere omessi, il che permette di creare domain specific language molto eleganti
  • Metaprogrammazione: supporta sia la metaprogrammazione a runtime sia a tempo di compilazione. Per esempio, un'annotazione @ToString genera un'implementazione di ToString a tempo di compilazione, e cambiare la metaclass di un oggetto a runtime permette di fare monkey-patching.
  • Builder: gestisci e costruisci rapidamente JSON, XML, HTML con codice dall'aspetto gradevole. Costruisci con Swing per uno sviluppo rapido di interfacce grafiche.
  • Trait: i Trait di Groovy permettono di comporre comportamenti e proprietà in blocchi riutilizzabili. Simili ai mixin di Ruby.

Lua

  • Incorporabile: progettato per essere facile da incorporare. Ha un'API C relativamente semplice che ne facilita l'incorporamento. Le dimensioni non sono un problema: l'interprete di riferimento completo è di appena 247 kB!
  • Estensibile: il linguaggio di base è volutamente mantenuto relativamente piccolo, ma ciò che consente è di estendere facilmente il linguaggio. Questo lo rende più semplice da imparare, più leggero da incorporare e molto flessibile
  • Veloce: Lua è spesso uno dei linguaggi dinamici più veloci, soprattutto quando si usa l'interprete LuaJit

VimScript

  • Estensibilità: Vimscript vi permette di estendere il vostro editor con nuove funzionalità
  • Personalizzabile: personalizzate il vostro editor perché funzioni esattamente come volete (i plugin di Vimscript sono essi stessi scritti principalmente in Vimscript)
  • Event-driven: esecuzione automatica del codice in base a determinati eventi o condizioni, come l'apertura di un file o il salvataggio di un buffer.
  • Sfrutta la potenza di Vim: accesso integrato alle funzionalità e alle API di Vim, che permette agli script di manipolare testo, buffer, finestre e altro ancora.

Wren

  • Veloce: ottime prestazioni per un linguaggio dinamico
  • Incorporabile: facile da incorporare in altri software. Il creatore del linguaggio era un ex sviluppatore di giochi: voleva poter aggiungere funzionalità di scripting ai giochi. L'API C è piuttosto pulita e semplice.
  • Concorrente: concorrenza e coroutine facili con le fiber, una costruzione molto leggera (come le goroutine o i processi Erlang), in grado di comunicare facilmente tra loro

Quale scegliere

  1. Se volete costruire applicazioni web, ColdFusion e Groovy sono buone scelte
  2. Se vi interessa un linguaggio che possa essere incorporato, Lua e Wren sono le opzioni principali, ma anche Groovy potrebbe valere un'occhiata
  3. Gli stessi tre linguaggi, Lua, Wren e Groovy, hanno senso anche se volete scrivere script general-purpose
  4. Se lavorate con la JVM, ColdFusion e Groovy sono scelte naturali
  5. Se date valore alle prestazioni, Lua e Wren sono probabilmente le vostre opzioni migliori
  6. Se il vostro editor principale è Vim o NeoVim, VimScript è ovviamente una scelta eccellente
  7. Se vi interessa scoprire come funzionano o costruire un compilatore e una macchina virtuale, Wren è perfetto per voi
  8. Se avete un background orientato agli oggetti, Wren è probabilmente il linguaggio più facile da imparare
  9. Se vi piaceva il design di LISP con la sua unica, onnipresente struttura dati, andate a provare Lua
  10. Se volete provare la programmazione event-driven, date un'occhiata a VimScript
01 dicembre 2023 · Ti è stato utile?