Dire che volevo creare un programma multipiattaforma che non richiede un runtime / VM, sono bloccato con C / C ++? [chiuso]

5

Diciamo che sono un programmatore teorico che cerca un linguaggio di programmazione multipiattaforma, quali sono le mie opzioni. Questa lingua deve soddisfare questo elenco di requisiti:

  • Non deve richiedere all'utente di installare programmi o runtime aggiuntivi (chiarimento: non mi dispiace collegare librerie ecc. Se posso comprimerle con l'applicazione.) Il programma non deve richiedere all'utente di installare nulla per essere in grado di eseguire il mio gioco. Fondamentalmente voglio solo che l'utente sia in grado di scaricare il mio programma ed eseguirlo immediatamente fuori dalla scatola.)

  • Esegui su Mac, Windows e Linux

  • Deve compilare fino a un eseguibile, o il runtime essere impacchettato con l'eseguibile (es. come Love2d consente ai programmatori di Lua di creare eseguibili, incorporando il runtime nell'eseguibile.) Le dimensioni più grandi e la velocità più bassa sono problema però, quindi la maggior parte delle persone eviterebbe.

  • Gratuito (come nella birra)

Preferibile ma non del tutto necessario:

  • Gratuito (come nel parlato)

  • Può essere utilizzato anche per programmare app mobili (Android e iOS).

  • veloce

  • Dimensioni eseguibili di piccole dimensioni.

  • Maturo e stabile (come nella sintassi e gli strumenti che lo circondano)

Quindi che ne dici? Se un programmatore vuole creare un programma che soddisfi questi parametri, C e C ++ hanno le loro uniche opzioni? Java soddisfa questi requisiti ma richiede l'installazione dell'ambiente di runtime (non è vero?). Ci sono delle lingue là fuori che soddisfano questa nicchia? Non necessariamente alla stessa maturità di C e C ++.

* Modifica: non sono d'accordo con questa domanda che viene messa in attesa, non sto chiedendo quale lingua assumerò successivamente, che è fuori tema e soggettiva. Mi sto chiedendo in particolare quali sono le lingue che soddisfano questi requisiti, che non sono soggettive. Non sto nemmeno creando un sondaggio, sto chiedendo specifici pezzi di tecnologia che soddisfano questo elenco di requisiti. Il Centro assistenza suggerisce di lasciare un commento qui per riaprirlo, quindi sarebbe possibile riaprire questa domanda per la discussione?

    
posta J-' 09.02.2015 - 06:21
fonte

2 risposte

11

Potresti utilizzare alcune lingue con implementazioni compilate disponibili su tutte e 3 le piattaforme, ad es. Ocaml o Common Lisp o Haskell o Scheme (o forse Vai , Ruggine , Opa , Haxe ,. ..) Potresti anche usare implementazioni che compongono il codice C o C ++, in particolare Bigloo , < a href="http://hop.inria.fr/"> Hop , etc .... (Ad un certo punto Mozart / Oz lo stava facendo)

BTW, nota che anche C ha qualche componente runtime: la libreria standard C ( libc.so su Linux).

Potresti anche incorporare qualche interprete nel tuo programma (es. Lua o Guile ...)

Potresti voler utilizzare collegamento statico per incorporare il runtime nel tuo eseguibile. Ha degli svantaggi.

Tieni presente che un linguaggio di programmazione è una specifica (spesso in un documento inglese) che potrebbe avere diverse implementazioni (spesso, alcuni software gratuiti).

It must not require the user to install extra programs or runtimes

Ritengo che questo requisito sia ambiguo, molto confuso e mal definito: in un certo senso, quando sto navigando in qualsiasi sito moderno in HTML5 + Javascript, alcuni programmi (in Javascript) sono installati all'interno del mio browser (ma un utente ingenuo non lo noteremo). E accetteresti che l'utente scarichi un file una volta (ad esempio, ottieni un file ELF autosufficiente per Linux / x86- 64, o qualche file .exe per Windows) prima di usare il tuo programma? Inoltre, un programma C ++ o C hello-world richiede un po 'di "installazione" (compilazione del codice sorgente, ad es. Per la maggior parte del software libero o download di un file binario eseguibile che sarà specifico per la piattaforma utente). A proposito, anche in C o C ++ puoi avere dipendenza hells , come HLL inferni .

addenda

Nota anche che con C o C ++ su POSIX come i sistemi (tipicamente Linux) potresti prendere in considerazione la meta-programmazione: tu scriveremo un programma in C che a volte genera del codice C (in qualche file temporaneo) e chiedo al compilatore C di compilare quel nuovo file temporaneo. In tal modo non hai bisogno di alcun ulteriore poiché hai già bisogno di un compilatore C in primo luogo. Quindi, se generate /tmp/emittedcode.c nel vostro programma in fase di esecuzione, dovreste eseguire (ad es. Usando sistema (3 ) o popen (3) ...) un comando di compilazione come come gcc -O -Wall -fPIC -shared /tmp/emittedcode.c -o /tmp/emittedcode.so che produce una libreria condivisa che puoi caricare dinamicamente usando dlopen (3) e recupera i simboli usando dlsym (3) . Con cura troverai API equivalenti in Windows (o usa alcuni toolkit come Qt o Gtk che li avvolgono, fornendo qualche comune API di caricamento dinamico che sarebbe la stessa per ogni sistema operativo supportato).

Inoltre, considera l'utilizzo di alcune raccolta JIT come GCCJIT , libLLVM , libjit , lightning , asmjit , ... Potresti usarli per sviluppare la tua implementazione linguistica (o considerare compilazione in C ) o semplicemente generare codice utile in fase di runtime.

    
risposta data 09.02.2015 - 07:03
fonte
5

Se può essere eseguito in un browser, sono disponibili JavaScript e lingue che compilano in JavaScript come Dart, CoffeeScript, ClojureScript e TypeScript. Queste sono le tue uniche scelte valide per l'esecuzione su dispositivi mobili, desktop e Chromebook.

Per le app desktop compilate, c'è Go. In uno stato meno maturo, c'è D, Rust e Nim.

    
risposta data 09.02.2015 - 07:01
fonte

Leggi altre domande sui tag