Sarebbe pratica un'alternativa tipicamente statica a JavaScript nelle pagine Web?


9

La preferenza per la digitazione dinamica e statica è in gran parte una questione di gusti e persone diverse le trovano più o meno adatte in situazioni diverse.

La mia domanda è: sarebbe tecnicamente possibile avere un'alternativa statica a JavaScript per l'aumento della pagina Web sul lato client, ecc.?


3
Perché no? '' ``
Josh K il

2
Stai parlando di un ipotetico linguaggio tipicamente statico che ogni browser dovrebbe implementare o di possibilità già esistenti?
user281377

2
Potresti usare le applet Java, suppongo.
David Thornley,

@ammoQ quello che hai citato, Ipotetico
Armand,

@Josh non lo so. @ David LOL, grazie per quello!
Armand,

Risposte:


22

Non c'è certamente alcun motivo tecnico per cui una cosa del genere non potrebbe esistere. Non c'è nulla di particolare nel codice lato client che impone l'uso di linguaggi tipizzati dinamicamente.


1
Dart ha una tipizzazione statica opzionale ma si compila in un normale Javascript. www.dartlang.com
Nishant George Agrwal,

16

Poiché è altamente improbabile che un'altra lingua trovi ampia adozione, la soluzione migliore sarebbe quella di creare una versione di JavaScript (ovvero una lingua vicina a Java) e un preprocessore che la converta in JavaScript normale.

Ad esempio, il tuo script è simile al seguente:

<script type="text/staticjavascript">
   String foobar(int foo, String bar) {
      String result="";
      for (int i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

e il preprocessore verifica che ogni variabile, funzione, oggetto ecc. sia usato correttamente in base al suo tipo e cambia lo script in

<script type="text/javascript">
   function foobar(foo, bar) {
      var result="";
      for (var i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

che può gestire ogni browser.


5
+1 per un approccio pragmatico
Gary Rowe,

In realtà questa domanda non riguarda il pragmatismo, ma la teoria. Si aggiorna.
Armand,

2
Vorrei anche suggerire di utilizzare l'inferenza del tipo.
Oliver Weiler,

Metodo di supporto: ottimo suggerimento, ma non cambio il mio esempio ora, poiché l'inferenza del tipo renderebbe la versione statica molto simile alla versione dinamica, poiché l'esempio è così semplice.
user281377

4
Non penso che un javascript tipicamente statico sarebbe molto vicino a Java, se non sintatticamente. Javascript e Java hanno molte differenze oltre alla tipizzazione statica e dinamica: OO basato su classi e prototipo per uno. Dato che il tuo codice di esempio sembra essere basato sulla classe, direi che "staticjavascript" è un termine improprio per quella lingua e dovrebbe piuttosto essere chiamato qualcosa come "java lato client". +1 per la compilazione in javascript però (tra l'altro Google Web Toolkit compila java in javascript).
sepp2k,

8

La mia domanda è: sarebbe tecnicamente possibile avere un'alternativa statica a JavaScript per l'aumento della pagina Web sul lato client, ecc.?

Sicuro. Il Google Web Toolkit compila staticamente tipizzato Java a JavaScript ... pensate un po ': tutta la bellezza e la flessibilità di Java, con tutte le prestazioni della macchina generato Javascript!

Scherzi a parte, potresti farlo per tutti i tipi di lingue, e molti ci hanno provato (ci sono, o sono stati, compilatori anche per C e C #). Se il risultato finale è pratico o meno dipende da ciò che stai cercando di ottenere: Google cerca una piattaforma coerente per lo sviluppo di app lato client molto grandi e ha il proprio motore JavaScript per l'avvio; potresti scoprire che l'adozione di una tale bestia per gli effetti hover e la strana chiamata AJAX introduce molto più dolore del semplice imparare a vivere con un po 'di codice non tipizzato ...


3
Non posso dire se stai scherzando sui "vantaggi" di GWT. Se lo sei, bravo. Lavorare con GWT è stata una delle esperienze più esasperanti della mia vita.
Nicole,

@Renesis: Come se lavorare con Javascript e la compatibilità del browser non fosse già esasperante? Ma ha caratteristiche slick, come il download di più immagini in una singola immagine e quindi il loro taglio sul client.
Macneil,

1
@Macneil Potrebbero averlo risolto ormai, ma quando stavo lavorando con Sprites ha quasi annullato tutti i vantaggi perché ha scritto automaticamente altre proprietà di sfondo CSS che potresti non aver desiderato, quindi hai dovuto ingombrare il tuo CSS ogni volta per sovrascriverlo .
Nicole,

6

La maggior parte dei vantaggi delle lingue tipizzate staticamente sono realizzate al momento della compilazione. Se la lingua verrà interpretata sul client, molti di questi vantaggi andranno persi. Se li compili sul server, devi capire come caricarli ed eseguirli sul client (pensa ai controlli ActiveX). Potresti optare per un approccio ibrido (compilare in un modulo tokenizzato intermedio), ma in pratica tornerai alle applet Java.


2
+1 per spiegare un possibile motivo per cui no , non solo rispondere se è possibile.

4

Esiste già.

ActionScript 3 (il linguaggio di scripting dietro Flash e Flex) è un dialetto di ECMAScript che implementa tipi forti e puoi usarlo più o meno nello stesso modo client-side di JavaScript (la differenza è che AS3 richiede un plug-in flash e è compilato). In questi giorni provo personalmente ad allontanarmi da esso, ma se sei nel campo "statico", dai un vortice.

Questo risponde alla domanda principale, e ora che la abbiamo, la tua domanda secondaria diventa "Flash è pratico?" La risposta è "sì", con alcuni "se" se "ma" s

  • ... se è necessario nascondere il codice per qualsiasi motivo.
  • ... se si desidera un livello molto elevato di interattività (livello jQuery passato)
  • ... ma anche senza HTML5, le compatibilità tra browser stanno migliorando molto recentemente.
  • ... ma HTML5 arriverà presto.
  • ... ma una delle maggiori attrattive della tipizzazione / compilazione statica (al contrario dell'interpretazione) è la velocità aggiuntiva che consente attraverso le ottimizzazioni (e Flash non ha davvero una velocità molto buona, nonostante il sistema di tipi)

AS3 si basa sull'ES4 abbandonato.
gsnedders il

3

In teoria, puoi incollare qualsiasi script su una pagina che desideri. Il <script>tag ha un typeattributo, dopo tutto.

L'unica barriera è ottenere una quota di mercato sufficiente in termini di implementazione in diversi browser per renderne utile l'utilizzo.


Quindi sì, è un po 'improbabile a questo punto.


Quindi, nessun problema con la tipizzazione statica allora? Non sono troppo infastidito dalle praticità di questo afferrare.
Armand,

1
@Alison: puoi inserire qualsiasi contenuto testuale desiderato in un tag di script (con un'eccezione: non può contenere la sequenza di caratteri </script>). Potresti inserire il codice Brainf * ck lì se lo desideri davvero. Quindi tutto ciò che devi fare è implementare un interprete per la lingua scelta nel browser che desideri utilizzare.
Anon.

@Anon. grazie, molto interessante. Se è così facile, probabilmente è stato fatto da qualche parte. Ricordo <script type="vbscript">che una volta ...
Armand,

Alison: vbscript era solo IE e alcune persone lo usavano quando la quota di mercato di IE era> 90%. Oggi, con la quota di mercato di IE intorno al 50%, probabilmente inferiore in alcune parti del mondo, è un grande no-go; e fintanto che nessun browser ottiene di nuovo quella quota di mercato, non aspettatevi che accada qualcosa come un nuovo linguaggio di scripting lato client.
user281377

@Alison: Internet Explorer supporta ancora VBScript come linguaggio di scripting ... Dovrei sapere, qui abbiamo siti intranet che lo usano (e quindi richiedono Internet Explorer - urgh!)
Dean Harding,

2

Sarebbe pratico? No.

È possibile? Sì!

Sviluppare la tua alternativa a JavaScript staticamente personalizzata richiederebbe molto tempo, nella migliore delle ipotesi. Nel peggiore dei casi, non saresti in grado di convincere nessun browser esistente a implementare il tuo linguaggio di scripting client e dovresti scriverne uno tuo.


Ti interessa spiegare?
back2dos,

Aggiunto un paragrafo di follow-up.
Marcie,

Vorrei solo aggiungere che l' unica ragione per cui potrebbe non essere pratico è la situazione attuale. Se fossimo tornati al punto appena prima del rilascio di Javascript, le cose sarebbero diverse.
yakiv,


1

Puoi usare lingue come haXe per scrivere il tuo codice in modo statico ed esportarlo in javascript. JavaScript sta diventando molto veloce, quindi è sufficiente come lingua di output. Cercare di imporre un linguaggio tipicamente statico come standard web è quasi impossibile. I tentativi di introdurre la digitazione statica in JavaScript non sono riusciti per ragioni di ampio respiro.


1

Tecnicamente sarebbe possibile? Se deve essere implementato in Java, direi "molto, molto difficile, ma possibile" senza una significativa perdita di prestazioni.

In realtà sto scrivendo a mano un DSL tipicamente statico in Java in questo momento, e l'unico modo che ho trovato per evitare il controllo del tipo di runtime è usare generici e sopprimere gli avvisi "non controllati" ... cioè fino al momento di implementare array multidimensionali (i parametri di classe devono essere conosciuti al momento della compilazione e sono quindi intrinsecamente finiti, mentre gli array multidimensionali rappresentano un numero infinito di tipi ...) Sfortunatamente sto ancora cercando di capirlo, sono sicuro-- incontreremo problemi simili con le classi definite dall'utente.

Il fatto è che continuo a inciampare in questo tipo di problemi, ma dopo essermi seduto per un po ', trovo una buona soluzione. Quindi, per farlo e hanno le prestazioni vantaggi della tipizzazione statica (nessun tipo di runtime controllo), io direi che è estremamente difficile, ma non impossibile. Meno delle prestazioni, direi duro ma molto possibile.

So che è una vecchia domanda, ho pensato che la mia esperienza potesse essere preziosa per qualcuno.


0

È tecnicamente possibile scrivere script sul lato client in qualsiasi linguaggio di scripting supportato dal programma utente (browser). In pratica, l'unica lingua ampiamente supportata è JavaScript / ECMAScript. È improbabile che convincere i produttori di browser a implementare e supportare un nuovo linguaggio in questa fase; pertanto, se si desidera utilizzare un nuovo linguaggio lato client tipicamente statico, è necessario tradurre la nuova lingua in JavaScript o implementare un interprete per essa in JavaScript.

Esistono diversi progetti che già fanno qualcosa del genere; ad esempio, Google Web Toolkit , come indicato in una delle altre risposte.


0

Dato che non hai alcuna speranza di ottenere tutti i browser utilizzati nel mondo reale per supportare una nuova lingua; la lingua dovrà essere compilata in jscript.

Poiché tutti gli esempi del Web sono in jscript, la lingua dovrebbe assomigliare principalmente a jscript.

Penso che ci sia un ambito con un "sottoinsieme" di jscript che è controllato da un controllo statico ma è anche jscript valido. Per esempio:

  • Tutte le variabili devono avere un commento che indichi che ci sono tipi prima del primo utilizzo.
  • Tutti gli usi delle variabili devono essere validi con quanto sopra.
  • Le funzioni / classe non possono essere utilizzate se non sono state dichiarate in un commento #
  • Un commento nella parte superiore del file js deve elencare tutti gli altri file js da cui dipende.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.