Perché il segno di omissione è stato utilizzato per XOR anziché per l'esponenziazione?

26

Non che sia davvero un problema per chiunque abbia affrontato questo problema sintattico in precedenza, ma vedo una quantità selvaggia di confusione derivante dall'uso del segno di omissione ( ^ ) come operazione XOR al posto della matematica ampiamente accettata operazione di esponenziazione.

Ovviamente ci sono molti luoghi in cui l'uso (errato) del cursore è spiegato e corretto, ma non ho trovato alcuna fonte definitiva di perché il cursore è stato dato un significato diverso.

Era una questione di convenienza? Un incidente? Ovviamente il ragionamento potrebbe essere diverso per le varie lingue, quindi le informazioni a ogni riguardo sarebbero perspicaci.

    
posta Qix 19.09.2016 - 04:23
fonte

1 risposta

51

Sebbene esistessero precursori più vecchi, l'influente matematico francese Rene Descartes di solito è accreditato per aver introdotto esponenti esponenti (un b ) nella scrittura matematica, nel suo lavoro Geometrie che fu pubblicato nel 1637. Questa è la notazione ancora universalmente usata in matematica oggi.

Fortran è il più vecchio linguaggio di programmazione ampiamente utilizzato per i calcoli numerici che fornisce un operatore di esponenziazione, risale al 1954. L'operazione di esponenziazione è denotata da un doppio asterisco ** . Va notato che molti computer a quell'epoca utilizzavano codifiche di caratteri a 6 bit che non fornivano un carattere di accento% codice%. 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 ** di caret era la codifica ASCII a 7 bit che era la prima standardizzato nel 1963. Il più vecchio linguaggio di programmazione di cui sono a conoscenza che usasse il caret per indicare l'esponenziazione è il BASIC, che risale al 1964. Intorno alla stessa ora IBM adottò il EBCDIC codifica dei caratteri, che include anche il% caret% co_de.

Il linguaggio C è nato nel 1972. Non fornisce un operatore esponenziale, ma supporta l'esponenziazione tramite funzioni di libreria come ^ . Pertanto nessun simbolo deve essere messo da parte per l'esponenziazione in C e altre lingue successive nella 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é esisteva una "naturale affinità" di altre operazioni con determinati caratteri speciali, ad es. ^ per AND e pow() per NOT, non c'erano molte scelte per il simbolo per XOR.

Non sono a conoscenza di una spiegazione razionale fornita da Ritchie o Kernighan sul motivo per cui hanno scelto & per indicare specificamente XOR; La breve cronologia di C breve di Ritchie non tiene conto di questo problema. Uno sguardo alle specifiche del precursore di C, la lingua B , rivela che non ha avuto un operatore XOR, ma ha già utilizzato tutti i caratteri speciali diversi da ~ , ^ , ^ , $ .

[Aggiorna] Ho inviato un'email a Ken Thompson, creatore di B e uno dei co-creatori di C, chiedendo la logica per aver scelto @ come operatore XOR di C e chiedendo il permesso per condividere la risposta qui. La sua risposta (leggermente riformattata per la leggibilità):

From: Ken Thompson
Sent: Thursday, September 29, 2016 4:50 AM
To: Norbert Juffa
Subject: Re: Rationale behind choice of caret as XOR operator in C?

it was a random choice of the characters left.

if i had it to do over again (which i did) i would use the same operator for xor (^) and bit complement (~).

since ^ is now the better known operator, in go, ^ is xor and also complement.

L'uso di # per l'esponenziazione in "matematica" a cui si fa riferimento è effettivamente stabilito in una data successiva per la composizione di sistemi come Knuth's TeX che risale al 1978, interfacce a linea di comando per sistemi algebrici come Mathematica che risale al 1988 e calcola grafici all'inizio degli anni '90.

Perché questi prodotti adottano l'uso di ^ per l'esponenziazione? Nel caso delle calcolatrici sospetto l'influenza di BASIC. Durante gli anni '80 è stato un linguaggio di programmazione molto popolare ed è stato incorporato in altri prodotti software. La notazione quindi sarebbe stata familiare a molti compratori dei calcolatori. La mia memoria è vaga, ma credo che esistessero persino calcolatori che eseguivano in realtà semplici interpreti BASIC.

    
risposta data 19.09.2016 - 07:36
fonte

Leggi altre domande sui tag