Sebbene esistessero precursori più anziani, all'influente matematico francese René Descartes viene generalmente attribuita l' introduzione di esponenti supercritti (a b ) nella scrittura matematica, nel suo lavoro Geometrie, pubblicato nel 1637. Questa è la notazione ancora oggi universalmente usata in matematica.
Fortran è il più antico linguaggio di programmazione ampiamente utilizzato per i calcoli numerici che fornisce un operatore di esponenziazione, risale al 1954. L'operazione di esponenziazione è indicata da un doppio asterisco **
. Va notato che molti computer in quel momento utilizzavano codifiche di caratteri a 6 bit che non fornivano un carattere di inserimento ^
. L'uso di è **
stato successivamente adottato dai creatori di vari linguaggi di programmazione più recenti che offrono un'operazione di esponenziazione, come Python.
Il primo set di caratteri ampiamente adottato che conteneva il punto di inserimento ^
era la codifica ASCII a 7 bit che fu standardizzata per la prima volta nel 1963. Il linguaggio di programmazione più antico di cui sono a conoscenza che utilizzava il punto di inserimento per indicare l'espiazione è BASIC, che risale al 1964. Circa lo stesso quando IBM ha adottato la codifica dei caratteri EBCDIC , che include anche il punto di inserimento ^
.
Il linguaggio C è nato nel 1972. Non fornisce un operatore di esponenziazione, ma supporta l'espiazione tramite funzioni di libreria come pow()
. Pertanto, nessun simbolo deve essere messo da parte per l'espiazione in C e in altre lingue successive della famiglia C, come C ++ e CUDA.
D'altra parte, e non comune per i linguaggi di programmazione fino a quel momento, C fornisce simboli per operazioni bit a bit. Il numero di caratteri speciali disponibili in ASCII a 7 bit era limitato e, poiché vi era una "affinità naturale" di altre operazioni con determinati caratteri speciali, ad esempio &
per AND e ~
per NOT, non c'erano così tante scelte per il simbolo per XOR .
Non sono a conoscenza di una logica pubblicata fornita da Ritchie o Kernighan sul motivo per cui hanno scelto ^
di indicare specificamente XOR; La breve storia di C di Ritchie tace su questo tema. Uno sguardo al disciplinare della precursore di C, il linguaggio B , rivela che non aveva un operatore XOR, ma già utilizzato tutti i caratteri speciali diversi da quelli ^
, $
, @
, #
.
[Aggiornamento] Ho inviato un'e-mail a Ken Thompson, creatore di B e uno dei co-creatori di C, chiedendo la logica per la scelta ^
come operatore XOR di C e chiedendo il permesso di condividere la risposta qui. La sua risposta (leggermente riformattata per leggibilità):
Da: Ken Thompson
Inviato: giovedì 29 settembre 2016 4:50
A: Norbert Juffa
Oggetto: Re: Ragioni alla base della scelta del personale come operatore XOR in C?
è stata una scelta casuale dei personaggi rimasti.
se dovessi farlo di nuovo (cosa che ho fatto) avrei usato lo stesso operatore per xor (^) e il complemento di bit (~).
poiché ^ è ora l'operatore più noto, in go ^ è xor e anche complemento.
L'uso di ^
esponenziazione in "matematica" a cui si fa riferimento è in realtà un uso stabilito in un momento molto più tardi per sistemi di composizione come TeX di Knuth che risale al 1978, interfacce a riga di comando per sistemi algebrici come Mathematica che risale al 1988 e grafica calcolatrici nei primi anni '90.
Perché questi prodotti hanno adottato l'uso di ^
esponenziazione? Nel caso dei calcolatori sospetto l'influenza di BASIC. Durante gli anni '80 è stato un primo linguaggio di programmazione molto popolare ed è stato incorporato anche in altri prodotti software. La notazione quindi sarebbe stata familiare a molti acquirenti dei calcolatori. La mia memoria è vaga, ma credo che ci fossero persino calcolatori che eseguivano in realtà semplici interpreti BASIC.