ทำไม GCC ใช้ไวยากรณ์ AT&T เป็นค่าเริ่มต้น


9

ฉันคิดว่าชื่อกล่าวมันทั้งหมด :)

มีเหตุผลในทางปฏิบัติที่เฉพาะเจาะจงหรือไม่ (ฉันคิดว่าส่วนใหญ่เป็นประวัติศาสตร์ แต่ฉันไม่สามารถหาได้ด้วยตนเอง) ทำไม GCC ใช้ไวยากรณ์ AT & T / GAS

หมายเหตุ: ฉันรู้ว่านี่เป็นเพียงค่าเริ่มต้นและคุณสามารถเปลี่ยนได้

หมายเหตุ 2: ฉันพบว่า "ไวยากรณ์ของ Intel" สามารถอ่านได้มากขึ้นด้วยเหตุนี้มันจึงทำให้ฉันประหลาดใจ


3
คำตอบนั้นเป็นไปไม่ได้เว้นแต่คุณจะตามหาคนที่เพิ่มฟังก์ชั่นนั้นและถามว่า 'ทำไม'

1
@MichaelT ฉันตระหนักถึงความเป็นไปได้นั้น แต่ฉันก็ยังพบว่าหัวข้อที่น่าสนใจมาก ... อาจมีบางคนเห็นข้อความบ้าง
Vyktor

@Vyktor คำถามเช่นนี้บางครั้งไม่สามารถตอบได้ แต่ฉันยังคงพบว่าประวัติวิทยาการคอมพิวเตอร์น่าสนใจแม้ว่าในพื้นที่สีเทาของ " ในหัวข้อ "

@Snowman เห็นด้วย แต่ถ้าเกิดขึ้นกับฉันที่จะทำสิ่งที่ GlenH7 ทำ (ไปที่ประวัติของ gcc แทนที่จะเป็น googling why gcc uses at&t) ฉันจะไม่ถามคำถามนั้น
Vyktor

คำตอบ:


13

GCC ใช้ไวยากรณ์ AT&T เป็นค่าเริ่มต้นเพราะเดิมเขียนไว้ในระบบที่ใช้AT&T System V (ปัจจุบันเรียกว่า UNIX) หรือมีไวยากรณ์ที่คล้ายกับ System V

จากWikipedia บน GCC

ในความพยายามที่จะบู๊ตระบบปฏิบัติการ GNU ริชาร์ดสตอลแมนถามแอนดรูว์เอส. ทาเนนบอมผู้แต่ง Amsterdam Compiler Kit (หรือที่รู้จักในชื่อ Free University Compiler Kit) ถ้าเขาสามารถใช้ซอฟต์แวร์สำหรับ GNU ได้ เมื่อ Tanenbaum บอกเขาว่าในขณะที่ Free University ไม่มีค่าคอมไพเลอร์ไม่ Stallman ตัดสินใจเขียนเอง แผนเริ่มต้นของ Stallman คือการเขียนคอมไพเลอร์ที่มีอยู่จาก Lawrence Livermore Laboratory จาก Pastel ถึง C ด้วยความช่วยเหลือจาก Len Tower และอื่น ๆ สตอลแมนเขียนส่วนหน้า C ใหม่สำหรับคอมไพเลอร์ลิเวอร์มอร์ แต่แล้วก็รู้ว่ามันต้องใช้เมกะไบต์ของพื้นที่ว่างเป็นไปไม่ได้ในระบบ 68000 Unix ที่มีเพียง 64K และสรุปว่าเขาจะต้องเขียนคอมไพเลอร์ใหม่ตั้งแต่เริ่มต้น ไม่มีโค้ดคอมไพเลอร์ Pastel ใน GCC แม้ว่าสตอลแมนจะใช้ส่วนหน้า C ที่เขาเขียน

หมายเหตุส่วนต่อไปนี้:

Stallman เขียนส่วนหน้า C ใหม่สำหรับคอมไพเลอร์ Livermore แต่แล้วก็รู้ว่ามันต้องการเมกะไบต์พื้นที่ว่างเป็นไปไม่ได้ในระบบ 68000 Unix ที่มีเพียง 64K ...

เนื่องจากGCC was first released March 22, 1987*และSystem V Release 3 was released in 1986**นั้นมีความเป็นไปได้สูงที่ GCC จะถูกเขียนลงบน SVR2 หรือ SVR3


คำพูดของวิกิพีเดียทำให้เห็นชัดเจนว่าสตอลแมนกำลังทำงานกับอุปกรณ์ของลอเรนซ์ลิเวอร์มอร์แล็บซึ่งเป็นระบบปฏิบัติการยูนิกซ์และด้วยเหตุนี้ระบบวีดังนั้นเราจึงหยุดที่นั่นและพูดว่า "นั่นคือสิ่งที่เขาต้องทำ แต่ก็น่าสนใจที่จะดูระบบMS-DOS / PC-DOSที่มีอยู่ ณ เวลานั้น ตามระยะเวลานี้ผู้สมัครที่มีแนวโน้มจะเป็น PC-DOS 1จะเป็นเวอร์ชั่น 3.2

พีซี (คอมพิวเตอร์ส่วนบุคคล) ไม่ได้ใช้กันอย่างแพร่หลายในการตั้งค่าทางการศึกษาหรือการวิจัย ณ เวลานั้นเนื่องจากอุปกรณ์เครือข่ายของพวกเขาไม่ดีเท่าที่ระบบพื้นฐานของ Unix สามารถให้ได้ นอกจากนี้ยังมีการตั้งค่าประวัติสำหรับสภาพแวดล้อมประเภทเซิร์ฟเวอร์ / เทอร์มินัล ระบบเซิร์ฟเวอร์ / เทอร์มินัลนั้นมีให้ใช้งานก่อนที่จะมีพีซีและโดยทั่วไปจะให้กำลังการประมวลผลและทรัพยากรอื่น ๆ มากกว่าที่พีซีสามารถจ่ายได้

ดังนั้นในขณะที่สตอลแมนสามารถพัฒนา GCC บนพีซีได้เขาก็คงจะไม่อยากทำเพราะงานหลักของเขาจะเป็นระบบยูนิกซ์

และตามที่ระบุไว้ในความคิดเห็นมีความแตกต่างทางสถาปัตยกรรมพื้นฐานระหว่าง CPU ที่จ่ายไฟให้กับระบบ Unix และพีซี

รวบรวมชิ้นส่วนเหล่านั้นเข้าด้วยกันและมันค่อนข้างชัดเจนว่าทำไมสตอลแมนเลือกไวยากรณ์ AT&T บน Intel เมื่อพัฒนา GCC

1 โปรดทราบว่าเป็นการง่ายที่สุดที่จะบอกว่า MS-DOS เรียกว่า PC-DOS ก่อนหน้าเวอร์ชัน 3.31 ที่ถูกกล่าวมีประวัติของการพัฒนา DOS ที่อยู่นอกขอบเขตของคำถามนี้มากมาย


ฉันไม่เข้าใจว่าฉันพลาดเรื่องนี้ได้อย่างไร " ไวยากรณ์ของ Intel โดดเด่นในโลก MS-DOS และ Windows และไวยากรณ์ของ AT&T มีความโดดเด่นในโลก Unix เนื่องจาก Unix ถูกสร้างขึ้นที่ AT&T Bell Labs " เข้าร่วมกับคำตอบของคุณ ตรงไปข้างหน้า
Vyktor

สิ่งที่คำตอบนี้ไม่ได้สัมผัสอย่างไรก็ตามคือสาเหตุที่ GAS ใช้ไวยากรณ์ "ดั้งเดิม" สำหรับสถาปัตยกรรมซีพียูอื่น ๆ มากมาย x86 CPUs ดูเหมือนว่าฉันจะเป็นหนึ่งในไม่กี่แห่งที่ใช้ไวยากรณ์ AT&T
Dolda2000

"... มีความแตกต่างทางสถาปัตยกรรมพื้นฐานระหว่างซีพียูที่จ่ายกำลังให้กับระบบ Unix และพีซี" ฮะ? ซีพียูเหมือนกัน สถาปัตยกรรมชุดคำสั่งเหมือนกัน ไวยากรณ์ AT&T เป็นสัญกรณ์ทางเลือกเสมอสำหรับสถาปัตยกรรมพื้นฐานเดียวกัน ขวา?
Maxpm

1
@ Maxm - ซีพียูไม่เหมือนกันและนี่คือสิ่งที่สถาปัตยกรรม endian ใหญ่กับเล็ก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.