Perché i linguaggi di programmazione scientifica sono così strani? [chiuso]

9

Mi sembra che i linguaggi di programmazione destinati all'uso in ambito scientifico e ingegneristico siano costantemente strani rispetto ai linguaggi di uso generale. Alcuni esempi in cima alla mia testa:

  • In Matlab, ciascuna funzione deve essere inserita in un file separato
  • In R, < - è l'operatore di assegment, in contrapposizione a = in quasi tutte le altre lingue
  • Matlab, R, Julia e altri sono tutti a 1 indice
  • Matlab utilizza% per i commenti e non lo standard # o //

Naturalmente, queste lingue hanno tutte diverse funzioni di progettazione che in realtà rendono più facili da usare per applicazioni scientifiche, come la notazione di matrici più naturali. Tuttavia, tutti inspiegabilmente fanno tutte queste scelte bizzarre che non rendono tutto più facile e potrebbero facilmente essere evitate se i progettisti di linguaggi avessero scelto di fare ciò che il 99% delle altre lingue fa. Il motivo è il blocco del fornitore? Una mancanza di contatto con la più ampia comunità di sviluppo software? Qualcos'altro?

Ho letto questo thread e non ha trovato le spiegazioni soddisfacenti. Solo perché R è stato progettato come linguaggio scientifico non significa che abbia ignorato completamente le convenzioni e usi < - invece di =.

    
posta haroba 21.02.2014 - 11:24
fonte

4 risposte

21
  • Esistono diverse convenzioni. Convenzioni in matematica, logica, scienze applicate e convenzioni nell'IT. I primi sono molto più vecchi.
  • I linguaggi scientifici sono fatti per rendere più comoda la vita dei LORO utenti. L'utente è visto come uno scienziato, che può realizzare qualche algoritmo di tanto in tanto o per controllare qualche teoria, senza la necessità di imparare qualcosa di veramente nuovo. Quindi, le lingue per gli scienziati DEVONO essere composte da standard non IT. Perché non sono pensati per l'uso di persone IT. Sono all'altezza degli altri standard e ciò è positivo a causa dell'audio di destinazione. Poiché la buona interfaccia utente SW e la lingua dell'interfaccia utente SW, devono essere eseguite in base alle esigenze dell'utente e non del codificatore.
  • I nostri standard IT sono standard del settore. L'IT è l'industria. La scienza non è l'industria. Gli scienziati ne sono orgogliosi. E con riluttanza avrebbero preso qualsiasi cosa dalla nostra pratica alla loro. E a loro non piacciono affatto gli standard. E a nessuno piacciono gli standard stranieri. Quindi, se qualcuno creerà un linguaggio scientifico che guarderà agli standard IT, difficilmente venderà bene, a causa dell'antipatia per l'uditorio di destinazione, anche se fosse oggettivamente più conveniente.

E anche se giudicheremo solo secondo gli standard IT ... Scusa, quali standard intendi? Hai provato a scrivere un prog in APL o SNOBOL? Queste due lingue sono, IMHO, le più potenti nei campi appropriati (conteggio e stringhe). Ma la sintassi è qualcosa di MOLTO strano (ed efficace) La lettura di una riga di codice APL potrebbe richiedere giorni. D'altra parte, tale linea è un pezzo serio di SW. Ritornerai a Mathlab con lacrime di sollievo.

Come per "=", molte persone hanno problemi ad essere abituati che non è l'uguaglianza, ma l'assegnazione. A proposito, in Pascal IS l'uguaglianza e l'assegnazione è ":=".

E pensi davvero che == per l'uguaglianza sia più naturale? Al contrario, mix = e == è l'errore più comune nella programmazione C, accade molto spesso anche negli IDE contemporanei, con il loro controllo automatico.

Informazioni sull'indicizzazione da 1 - è l'unico naturale. Quando eri un bambino, hai imparato poesie e canzoni, dove hai contato: uno, due, tre ... E non 0,1,2 ... Nella matematica scolastica abbiamo studiato che il conteggio inizia da 1, e che 0 non appartiene ai numeri naturali / di conteggio. Solo con la definizione di funzioni arrivano indici non naturali. Dopotutto, lo 0 fu inventato molte migliaia di anni dopo che il nostro antenato sollevò un dito.

0-start è stato più semplice da realizzare e si è immediatamente inserito nella pratica IT dopo l'apparizione di C. Ma in Fortran, la prima lingua, viene utilizzato l'indice 1. Lo stesso con altre lingue dell'epoca preindustriale.

E sì, avevo letto l'articolo di Dyjkstra sulla naturalezza del conteggio a 0. E totalmente in disaccordo con le sue argomentazioni. È naturale per i musicisti. E anche 0 appassionati che creano i compilatori C e Java, contano le linee del codice INIZIA DA 1!

    
risposta data 21.02.2014 - 11:44
fonte
16

L'indicizzazione da 1 non è strana, è completamente normale e prevista tranne per i programmatori , perché sono stati condizionati a prevedere il conteggio a 0 da parte di C (che era condizionato dalle proprietà del processore architettura).

I commenti sono denotati in molti, molti modi diversi in diverse lingue; c'è un no modo standard, ogni lingua sceglie un simbolo o un digramma che non è già stato preso.

L'assegnazione è allo stesso modo un concetto strano e incomprensibile, tranne i programmatori ; la maggior parte delle persone non si preoccupa di meno se è = o := o <- , faticano a capire il significato (e per loro, in realtà è meglio non per usare = , perché questo enfatizza che l'assegnazione non è l'uguaglianza - l'ostacolo più comune per i non programmatori per capire il codice).

In breve, i linguaggi di programmazione destinati a persone diverse dai programmatori professionisti sono diversi perché le persone che li utilizzano lo preferiscono in questo modo.

    
risposta data 21.02.2014 - 11:40
fonte
5

Ci sono tre problemi:

  1. Non conosci certe tradizioni e le buone ragioni per determinate scelte.
  2. Metti troppa enfasi sulla sintassi, troppo poco sulla semantica.
  3. Ingegneri e scienziati non hanno esperienza nella progettazione del linguaggio, il che porta a una sintassi discutibile.

Ora per i tuoi punti specifici:

  • Non conosco Matlab, quindi non posso commentare i requisiti dell'organizzazione di file. Nota che Java vuole che tu usi un file per classe pubblica.

  • In R, = può essere utilizzato anche come operatore di assegnazione. Nota che ha bisogno di più operatori di assegnazione <- e <<- per gestire il suo concetto di scoping ( <<- assegna a un simbolo in un ambito esterno invece di creare un nuovo simbolo all'interno di una funzione). Le frecce possono essere utilizzate anche nell'altra direzione, rendendo potenzialmente più pulito il codice: complex_calculation() -> x .

  • L'indicizzazione basata su 1 è lo standard in matematica, che è quello con cui gli utenti di Matlab e R sono più a loro agio di C. Julia segue Matlab per avere una curva di apprendimento migliore.

  • % per i commenti viene anche utilizzato in TeX / LaTeX. Il # è solo una convenzione dei linguaggi di scripting di Unix e dei loro discendenti.

Ignori anche che i linguaggi di programmazione "reali" hanno molte parti strane. Perché Scheme non usa = ? Invece:

(define foo 5)

Perché C usa * per il dereferenziamento, quando ovviamente un tasso di attenzione ^x è più comune in altre tradizioni?

    
risposta data 21.02.2014 - 11:43
fonte
1

Penso che dipenda dalla tua esposizione ad altre lingue. In cima alla mia testa:

  • C / C ++ ha file sorgente separati (.c / .cpp & .h)
  • Il - > i caratteri sono usati in C # per le espressioni lambda
  • Le vecchie versioni di VB utilizzavano 1 come indice predefinito (sebbene questo potesse essere modificato con Option Base)
risposta data 21.02.2014 - 11:41
fonte

Leggi altre domande sui tag