Se consideriamo le frasi "staticamente digitato" e "digitato dinamicamente" come in gergo riferito a quando un linguaggio verifica la validità delle operazioni rispetto ai tipi, penso che sia corretto caratterizzare Mathematica usando il gergo "non tipizzato" - nel senso che "mai" controlla se un'operazione è valida per un tipo.
Mi piace l'uso del termine "tipo-agnostico" da parte di Belisario. Dico questo perché mentre quasi tutti i tipi di controllo nella lingua sono idiomatici (ad es.implementato dal programmatore, non dalla lingua), così è il concetto di applicare un operatore agli operandi digitati!
Considerare l'esempio "senza senso" di 1 + "foo"
. Penso che sia giusto dire che una frazione significativa (che si avvicina all'unità) di tutti gli utenti di Mathematica viaggia su casi come questo, poiché stanno imparando la lingua per la prima volta. Il problema è particolarmente evidente quando si scrive codice in, per esempio, lo stile di C. C'è molta discussione nei circoli di Mathematica su come gestire situazioni come queste.
D'altra parte, questa debolezza è anche il più grande punto di forza di Mathematica. Mathematica è ottimizzato per la creazione di nuove notazioni. Molte, molte notazioni hanno il concetto di +
che si comporta in modo molto simile all'aggiunta nell'aritmetica elementare. Quando si creava tale notazione, sarebbe molto scomodo se Mathematica intervenisse e si lamentò che gli operandi a +
non erano numeri. In un'applicazione di Mathematica di livello più elevato, l'esempio "insensato" non è solo "sensoriale", ma in realtà cruciale.
Quindi, con questo in mente, la questione del tipo è spesso discutibile. Quindi, mi piace la caratterizzazione "type-agnostic" Belisarius. lui Upvote, ho fatto;)
Modifica
Cercherò di chiarire quello che avevo in mente quando la distinzione tra "senza tipo" e "Tipo-agnostic".
Leggendo le varie risposte e commenti, ho cercato di capire quale fosse la differenza tra Mathematica e LISP. Quest'ultimo è generalmente considerato un esempio di "tipizzazione dinamica", sebbene il valutatore LISP di base sia molto simile a Mathematica con quasi nessun tipo di controllo. Gli errori di tipo che vediamo nei programmi LISP sono per lo più emessi da controlli codificati in funzioni (generalmente incorporate). +
, ad esempio, accetta solo argomenti numerici anche se il valutatore stesso non potrebbe interessarsi di meno in un modo o nell'altro. Detto questo, il "sentire" della programmazione in LISP differisce notevolmente dal "sentire" di Mathematica (almeno per me). L'esempio 1 + "foo"
cattura davvero questa differenza.
Mentre sono ampiamente d'accordo con "non tipizzato" come la caratterizzazione di Mathematica, ho comunque sentito che mancava qualcosa. Assembler sembra non tipico per me, così come i primi FORTRAN e pre-ANSI C. In quei casi, il modello di bit degli argomenti era tutto ciò che contava e i programmi continuavano in modo blissamente se passassi un argomento di stringa in cui era necessario un numero intero. Mathematica certamente condivide questo comportamento non tipizzato. Ma c'è una differenza: nell'assembler e FORTRAN e C, è estremamente raro che questa mancanza di controllo dei tipi porti a un buon risultato. Come ho detto sopra, in Mathematica è possibile, a volte anche comune, affidarsi a questo tipo di comportamento.
Inserire "tipo-agnostico". Mi è piaciuto il suo atteggiamento non impegnativo, suonando meno drastico di "non tipizzato". Ho sentito che rifletteva la natura essenzialmente non tipizzata di Mathematica, ma ha lasciato un po 'di spazio per quelle caratteristiche linguistiche che supportano prontamente il controllo dei tipi idiomatico in LISP, stile dinamico (cioè l'idioma "testa" e funzionalità di supporto).
Quindi, in breve, sento che Mathematica si aggira tra l'essere completamente senza tipizzazione e la digitazione dinamica. "Tipo-agnostico" ha catturato questo sentimento per me. YMMV :)
Confesso prontamente che nessuno è in grado di ricostruire qualsiasi cosa abbia scritto in questa risposta semplicemente dall'ispezione delle frasi "non tipizzato" e "tipo agnostico". Ancora una volta sottolineo che penso che "non tipizzato" sia una buona caratterizzazione di Mathematica, ma mi piace anche il fatto che "tipo agnostico" elogia molte delle domande che vengono affrontate dalle varie risposte a questa domanda.
@ Yaroslav Bulatov: Il post che citavi riguarda la performance di Mathematica. Questa domanda di overflow dello stack non ha assolutamente nulla a che fare con le prestazioni di Mathematica. Si tratta di classificare il sistema di tipi di Mathematica. –
la domanda sembra soggettiva –
@ Yaroslav Bulatov: Come mai? –