Perché GCC utilizza la sintassi AT&T per impostazione predefinita?


9

Penso che il titolo dica tutto :)

C'è qualche motivo pratico particolare (immagino che sia per lo più storico, ma non riesco a trovarlo da solo) perché GCC utilizza la sintassi AT & T / GAS?

Nota: so che questo è solo predefinito e puoi cambiarlo

Nota 2: personalmente trovo che la "sintassi Intel" sia molto più leggibile, quindi è per questo che mi sorprende.


3
La risposta è probabilmente inconoscibile se non dai la caccia alla persona che ha aggiunto quella funzionalità e ti ha chiesto "perché".

1
@MichaelT Sono consapevole di questa possibilità, ma trovo ancora quell'argomento abbastanza interessante ... Forse qualcuno ha visto qualche citazione o giù di lì.
Vyktor,

@Vyktor domande come questa a volte sono senza risposta, ma trovo ancora interessante la storia dell'informatica anche se nell'area grigia di " on-topic "

@Snowman è d'accordo, ma se mi venisse in mente di fare quello che ha fatto GlenH7 (passare attraverso la storia di gcc invece di cercare su Google why gcc uses at&t) non farei questa domanda.
Vyktor,

Risposte:


13

GCC utilizza la sintassi AT&T per impostazione predefinita perché originariamente era scritta su un sistema che utilizzava AT&T System V (ora noto come UNIX) o aveva una sintassi che assomigliava molto al System V.

Da Wikipedia su GCC

Nel tentativo di avviare il sistema operativo GNU, Richard Stallman chiese ad Andrew S. Tanenbaum, l'autore del kit compilatore di Amsterdam (noto anche come kit compilatore della Free University) se poteva usare quel software per GNU. Quando Tanenbaum gli disse che mentre la Free University era libera, il compilatore no, Stallman decise di scrivere la sua. Il piano iniziale di Stallman era di riscrivere un compilatore esistente dal Lawrence Livermore Laboratory da Pastel a C con l'aiuto della Len Tower e di altri. Stallman scrisse un nuovo front-end C per il compilatore Livermore, ma poi si rese conto che richiedeva megabyte di spazio stack, un'impossibilità su un sistema Unix 68000 con solo 64 KB, e concluse che avrebbe dovuto scrivere un nuovo compilatore da zero. Nessuno dei codici del compilatore Pastel finì in GCC, sebbene Stallman usasse il front-end C che aveva scritto.

Nota la parte seguente:

Stallman scrisse un nuovo front-end in C per il compilatore Livermore, ma poi si rese conto che richiedeva megabyte di spazio stack, un'impossibilità su un sistema Unix 68000 con solo 64 KB ...

Dato che GCC was first released March 22, 1987* e quello System V Release 3 was released in 1986** , è molto probabile che GCC sia stato scritto su SVR2 o SVR3.


La citazione di Wikipedia chiarisce che Stallman stava lavorando sull'apparecchiatura di Lawrence Livermore Labs, che era basata su Unix e quindi su System V. Quindi potevamo fermarci lì e dire semplicemente "questo è ciò su cui doveva lavorare". Ma è anche interessante guardare i sistemi MS-DOS / PC-DOS disponibili in quel momento. Secondo questa linea temporale , il probabile candidato per PC-DOS 1 sarebbe stato la versione 3.2.

I PC (personal computer) non erano così ampiamente utilizzati in contesti accademici o di ricerca in quel momento perché le loro strutture di rete non erano buone quanto ciò che i sistemi basati su Unix potevano fornire. C'era anche una preferenza storica per ambienti di tipo server / terminale. I sistemi server / terminali erano stati disponibili prima dell'esistenza dei PC e generalmente fornivano una potenza di elaborazione molto maggiore e altre risorse rispetto a quelle che un PC poteva offrire in modo economico.

Quindi, mentre Stallman avrebbe potuto sviluppare GCC su un PC, probabilmente non avrebbe voluto dal momento che il suo lavoro principale sarebbe stato sui sistemi Unix.

E come notato in un commento , c'era una differenza architettonica alla base tra le CPU che alimentavano i sistemi Unix e i PC.

Metti insieme tutti quei pezzi ed è abbastanza chiaro perché Stallman abbia scelto la sintassi AT&T su Intel durante lo sviluppo di GCC.

1 Notare che è più facile dire che MS-DOS era chiamato PC-DOS prima della versione 3.31. Detto questo, c'è molto nella storia dello sviluppo di DOS che non rientra nell'ambito di questa domanda.


Non capisco quanto mi sia sfuggito questo "La sintassi Intel è dominante nel mondo MS-DOS e Windows, e la sintassi AT&T è dominante nel mondo Unix, poiché Unix è stato creato presso AT&T Bell Labs. " Unito alla tua risposta sembra proprio così diretto.
Vyktor,

Ciò su cui questa risposta non tocca, tuttavia, è perché GAS utilizza la sintassi "nativa" per molte altre architetture di CPU. Le CPU x86 mi sembrano essere tra le poche per le quali utilizza effettivamente la sintassi AT&T.
Dolda2000,

"... c'era una differenza architettonica alla base tra le CPU che alimentavano i sistemi Unix e i PC." Eh? Le CPU erano uguali. L'architettura del set di istruzioni era la stessa. La sintassi AT&T è sempre stata una notazione alternativa per la stessa architettura sottostante. Giusto?
Max

1
@Maxpm - Le CPU non erano le stesse, ed è qui che contano le architetture big vs. little endian.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.