esiste un linguaggio che supporti la valutazione automatica delle espressioni di input?

0

Mi chiedo se qualcuno conosce una lingua che supporta la valutazione automatica. (non sono sicuro che questo sia il termine giusto, quindi descrivimi cosa intendo in seguito)

Ad esempio, un programma richiede un int come input, uno può dargli 2 + 2 , che valuta un int con valore 4 .

Naturalmente, si può certamente creare un programma che accetti questo usando qualsiasi linguaggio, ma mi chiedo se ci sia un linguaggio che supporti nativamente questo.

Quali sono i lati positivi e negativi di questo?

P.S: Il mio obiettivo "definitivo" è decidere se farlo in una lingua che sto progettando. Quindi apprezzerei qualsiasi input, specialmente per quanto riguarda il design.

    
posta One Two Three 01.07.2014 - 16:17
fonte

3 risposte

4

Python2 lo fa automaticamente:

>>> x = input()
2 + 2
>>> print x
4

È stato rimosso in Python3, perché è una disfunzione. Valutare l'input dell'utente senza che il programmatore lo richieda specificamente è una grave violazione della sicurezza, perché il programmatore potrebbe usarlo per convertire automaticamente l'input numerico in numeri, ma permette all'utente di eseguire qualsiasi comando Python, e molti programmatori Python non lo noteranno nemmeno quando usano input() , perché lo testano con entrambi i numeri (che vengono convertiti correttamente) o con le stringhe casuali (che si bloccano come dovrebbero) e non con i comandi Python effettivi.

    
risposta data 01.07.2014 - 18:14
fonte
2

Se la domanda è "qualsiasi lingua", la risposta è sì. Tuttavia, penso che quello che stai effettivamente chiedendo è se c'è una lingua popolare, moderna, nel qual caso la risposta è "forse".

Un linguaggio che valuta senz'altro le espressioni quando letto dall'utente è Sinclair Basic (almeno nella sua variante ZX-81), dove un input numerico (come, ad esempio, 100 INPUT X ) richiederebbe qualcosa come "2 + 2" e roba 4 nella variabile X. Permette anche di fare riferimento alle variabili, quindi puoi dire "10 + A" e recupera il valore di A e ne aggiunge 10.

Quando si parla di lingue moderne, non conosco nessuno che lo faccia senza racchiudere l'equivalente morale di valutazione attorno all'input risultante, ma in alcuni casi è possibile eseguire calcoli in fase di lettura tramite altre rotte.

    
risposta data 01.07.2014 - 16:45
fonte
2

JavaScript è la risposta facile

eval ( '2 + 2') = 4

Ora il problema con qualsiasi linguaggio che lo farà è quanto controllo date all'utente. Quali metodi possono e non possono essere chiamati. In JavaScript quando esegui Eval puoi fare tutto ciò che può Lagrange. (non mi piace la sicurezza JS sul web, ma in altre versioni di JS potrebbe esserci)

    
risposta data 01.07.2014 - 17:23
fonte

Leggi altre domande sui tag