Quanto è adatta Lua per la creazione di applicazioni Web performanti e simultanee (in tempo reale)?

Non ho mai fatto alcun sviluppo web con Lua. Ma da quando mi hai chiesto mi sono incuriosito e ho trovato questo progetto Sailor! Un Lua MVC Framework, che in realtà mi sembra molto promettente. Se avessi più tempo a disposizione in questo momento, ci proverei sicuramente.
Tuttavia, non sono riuscito a trovare nulla sul loro sito su come Sailor gestisce la concorrenza. Lua è a thread singolo (come indicato anche nelle altre risposte) , ma ha un ingombro molto ridotto . Non sono sicuro di come la concorrenza sarebbe gestita da un framework web Lua. Forse il framework web genererebbe una nuova istanza Lua per ogni numero X di utenti, o qualcosa del genere.

Non sono sicuro se userei Lua per uno sviluppo web serio. Attualmente preferisco usare il framework Python Django, ma è principalmente solo perché è il framework con cui mi sento più a mio agio in questo momento. Ho anche lavorato molto con ASP MVC in passato e ne sono stato piuttosto soddisfatto. In questo momento sto imparando Elixir, quindi potrei saltare nel framework Phoenix, che a mio avviso sembra super promettente, soprattutto per quanto riguarda la creazione di app Web con scalabilità simultanea.

Perché dovrei scegliere Lua per la creazione di framework Web?
Come detto, non ho mai provato Lua per lo sviluppo web, ma l’idea sembra divertente. Cercherò di approfondire perché non sceglierei Lua per lo sviluppo web …

  • Lua ha una cultura in cui gli sviluppatori non condividono gran parte del loro codice e la comunità è piuttosto piccola, quindi se vuoi creare qualcosa di grande e complesso dovrai reinventare molte “ruote”. Python ha un’enorme comunità con migliaia di librerie di alta qualità, quindi in Python ti appoggerai allo schienale della sedia e importerai le “ruote” invece di reinventarle. Tuttavia, ci sono alcune librerie interessanti in Lua come Torch | Informatica scientifica per LuaJIT ..
  • Nella mia esperienza, Lua è pazza in fretta rispetto a molte altre lingue . Soprattutto Python è molto lento rispetto a Lua.
    Lua è a thread singolo, ma l’impronta è incredibilmente piccola, quindi forse è solo una questione di generare molte istanze di Lua per ottenere un migliore potenziale di concorrenza.
    (Suppongo che qualsiasi serio framework web si occuperebbe in qualche modo di questo problema …)
  • L’ ingombro ridotto di Lua VM lo rende ideale per l’hardware economico a basse prestazioni.
  • Lua è un linguaggio non verboso molto semplicistico . A volte mi manca questa semplicità in altre lingue. La semplicità è un grande vantaggio nel mio libro.

Penso che il miglior motivo per scegliere Lua per lo sviluppo web sia se si desidera distribuire hardware a basse prestazioni , ma potrebbe anche essere utile se si desidera creare qualcosa di non complesso che deve essere eseguito molto velocemente.
Tuttavia, se tutto ciò che desideri è un elevato potenziale di concorrenza, penso che Elixir Phoenix sia la scelta migliore .
Indipendentemente dalla lingua e dalla struttura che scegli, dovresti sempre considerare se hai davvero bisogno di tutta quella velocità e concorrenza. Potrebbe essere che il tuo problema non abbia bisogno di tanta velocità, e quindi sarebbe solo un’ottimizzazione prematura per scegliere un linguaggio / framework ad alta velocità su un linguaggio / framework ad alta produttività.
Detto questo, se Lua è la lingua con cui ti senti più a tuo agio (o forse è la tua unica lingua) , penso che dovresti andare avanti immediatamente e provare Lua a provare lo sviluppo web.

Grazie per aver posto la domanda, mi ha davvero incuriosito di Lua per lo sviluppo web … E mi dispiace di non essere in grado di condividere esperienze pratiche, ma spero che almeno tu possa usare i miei pensieri.

Un discorso del creatore di Sailor:

Lua è praticabile, ma per ragioni di stabilità e brevità uno sviluppatore maturo sceglierebbe un linguaggio come [* Clojure, Haskell], Java, C #, Go, JavaScript o Python.

A Lua manca una sintassi chiara, di alto livello e dichiarativa con cui esprimere concisamente idee complesse. Si noti che C # e Java tendono a non avere questo, ma hanno anche sistemi di tipi, lambda e altre funzionalità adatte ad esprimere problemi complessi.

A causa della mancanza di funzionalità espressive nel linguaggio, Lua è adatta a scrivere piccoli script che non dovrebbero mai crescere in complessità.

Le applicazioni Web in tempo reale simultanee tendono ad essere complesse, soprattutto se si hanno esigenze particolari nel dominio del problema. Ci sono scelte superiori a Lua sia per gli sviluppatori principianti che per quelli maturi nel 2016.

(* Clojure e Haskell sono le mie scelte personali per motivi di espressività e correttezza, ma lo standard del settore è ancora dominato dai linguaggi OOP imperativi tradizionali.)

Non spieghi esattamente quale tipo di concorrenza stai cercando, ma LuaJIT in esecuzione all’interno di nginx (OpenResty) è una scelta popolare per applicazioni Web ad alte prestazioni, utilizzate tra l’altro in CloudFlare e precedentemente in Taobao (ora usano un fork chiamato Tengine ).

Un altro sito Web che esegue OpenResty è itch.io utilizzando un framework chiamato Lapis.

Sono un grande fan di Lua. Le prestazioni e l’utilizzo della memoria sono davvero buoni. Non l’ho usato su un web server Internet – ma avendo visto OpenResty® – Sito ufficiale su altri post in questa domanda, sembra piuttosto buono.

Ho usato Lua per scrivere un server HTTP completo insieme all’applicazione HTML per un firewall incorporato. Ho usato Lua perché avevo bisogno di un tempo di sviluppo più veloce di C ma dove i limiti del processore e della memoria erano serrati. Lua non è ancora C ma è abbastanza veloce ed efficiente.

Ha funzionato davvero bene.

Cominciamo citando che Lua è a thread singolo e non fornisce un modo nativo di multithreading.

MA! Oltre ad avere diverse biblioteche come LuaLanes e LuaRings, che forniscono un vero multithreading (a un costo), ha un bellissimo sistema integrato di multitasking cooperativo, chiamato coroutines. Diversi moduli Lua (come “Lua’s Node.js”, Luvit) lo utilizzano con grande efficacia.

Un’altra preoccupazione è l’imprevedibilità di Garbage Collector, ma è disponibile materiale da parte dei modder di giochi per mitigare questo problema.

Lua viene utilizzato a tale scopo nella maggior parte dei modem WiFi poiché il sistema LuCi utilizzato in molti di questi modem è in effetti un’infrastruttura di app Web che utilizza Lua.

Non so se sia scalabile o meno, ma ha il potenziale per raggiungere tale obiettivo.