Perché alcuni linguaggi di programmazione come Python o Julia sono considerati linguaggi di programmazione "scientifici"? Immagino la mia vera domanda quali sono i criteri che rendono scientifico un linguaggio di programmazione?
La tesi di dottorato di Jeff Bezanson su Julia, "Abstraction in Technical Computing" tratta questa domanda a lunghezza, raggiungendo solo risposte parziali. Ecco le citazioni chiave.
We propose that technical users crave the flexibility to pick notation for their problems, and language design — the highest level of abstraction — is where you go when you need this level of flexibility.
Quando si utilizzano linguaggi di uso generale per l'elaborazione scientifica,
Effective scientific libraries extensively employ polymorphism, custom operators, and compile time abstraction. Code generation approaches (writing programs that write programs) are unusually common.
In contrasto con le priorità di progettazione dei linguaggi di programmazione tradizionali rispetto alle lingue scientifiche (tecniche informatiche):
Theprioritiesineachrowarenotnecessarilyoppositesorevenmutuallyexclusive,butratherareamatterofemphasis.Itiscertainlypossibletohavebothparametricandadhocpolymorphismwithinthesamelanguage,butsyntax,recommendedidioms,andthedesignofthestandardlibrarywilltendtoemphasizeoneortheother.Ofcourse,thefeaturesontheleftsidecanalsobeusefulfortechnicalcomputing;weexaggeratetohelpmakethepoint.
Unaltrofattoreèla"convenienza" (produttività) in quanto è necessario sapere per utilizzare una determinata funzionalità,
This leads languages to adopt various forms of loose coupling, automation, and elision of software engineering distinctions that are considered important in other languages. ... These systems are function-oriented, typically providing a rather large number of functions and a much smaller number of data types. Type definitions and features for organizing large systems are de-emphasized.
Interpreto "elidere le distinzioni dell'ingegneria del software" come enfasi sullo sviluppo rapido ed esplorativo su lavoro di squadra, portabilità, manutenibilità, usabilità, testabilità, schierabilità, ecc.
Informally, in order to provide the desired experience a language needs to be able to assign a meaning to a brief and isolated piece of code such as
sin(x)
. This leads directly to making declarations and annotations optional, eliding administrative tasks like memory management, and leaving information implicit (for example the definition scopes and types of the identifierssin
andx
).
L'autore cita le differenze culturali, ad es. con l'operatore \
di MATLAB,
By writing only
A\B
, the user can solve square, over- or under-determined linear systems that are dense or sparse, for multiple data types. The arguments can even be scalars, in which case simple division is performed. In short, a large amount of linear algebra software is accessed via a single character! This contrasts with the software engineering tradition, where clarifying programmer intent would likely be considered more important.
Generalmente quando qualcuno fa riferimento a un linguaggio di programmazione come scientifico è perché ci sono librerie utili per l'uso in quel campo o la sintassi del linguaggio rende facile scrivere gli algoritmi richiesti. Tuttavia, solo perché un campo considera una lingua specifica come scientifica non significa che un campo diverso lo consideri uguale.
Python ha un sacco di librerie per la bioinformatica che probabilmente faranno parte del suo fascino. Fortran ha un sacco di librerie matematiche per scopi generici, quindi è spesso preferito per i campi altamente computazionali (anche la sintassi che affetta gli array può semplificare gli algoritmi). I linguaggi di programmazione funzionale possono spesso replicare più strettamente l'algebra grezza in modo che possano essere favoriti anche in alcuni circoli e nel caso di F # la funzionalità delle unità di misura dà al compilatore la possibilità di eseguire analisi dimensionali, che in alcuni campi possono essere un grande vantaggio (in particolare l'ingegneria quando è possibile utilizzare più sistemi di unità).
Un altro elemento che viene talvolta considerato è quanto sia veloce e facile scrivere codice. Devi scrivere molto codice della piastra della caldaia. Inoltre è facile chiamare il programma compilato con una semplice sintassi. Com'è facile aggiungere argomenti nella riga di comando e quanto sia facile entrare e uscire dal file. Fortran semplifica la scrittura di file di output a larghezza di colonna fissa (il che rende la revisione del precedente a mano invece di importarli in un programma di fogli di calcolo facile).
Leggi altre domande sui tag programming-languages python