Windows, Mac OS X และ Linux เขียนด้วยภาษาใด


273

ฉันแค่สงสัยว่าใครรู้ว่าภาษาการเขียนโปรแกรม Windows, Mac OS X และ Linux ประกอบด้วยอะไรและภาษาใดที่ใช้สำหรับแต่ละส่วนของระบบปฏิบัติการ (เช่น: เคอร์เนล, สถาปัตยกรรมปลั๊กอิน, ส่วนประกอบ GUI, ฯลฯ )

ฉันคิดว่ามีหลายภาษาสำหรับแต่ละคนและแน่นอนฉันรู้เคอร์เนล Linux เขียนใน C.

ฉันคาดเดาทั้งหมดที่นี่ว่า Mac OS X มีโค้ด Objective-C จำนวนมากเนื่องจากเป็นภาษาของ Apple ที่ได้รับจาก NeXT

Windows, ฉันเคยได้ยินมี C, C ++ และ Intel Assembly Linux หรือ Mac OS มีรหัสชุดประกอบหรือไม่?

นอกจากนี้ยังมีภาษาสคริปต์เช่น Ruby, Python และอื่น ๆ ที่นักพัฒนาระบบปฏิบัติการใช้สำหรับการเขียนสคริปต์ส่วนต่างๆของระบบปฏิบัติการหรือไม่ ส่วนใดของระบบปฏิบัติการที่จะเขียนในแต่ละภาษา?



การแลกเปลี่ยน SOนี้อาจช่วยตอบคำถามสุดท้ายของคุณ
Bikramjeet Singh เมื่อ

คำตอบ:


269
  • Windows: C ++, เคอร์เนลอยู่ใน C
  • Mac: วัตถุประสงค์ C, เคอร์เนลอยู่ใน C (ระบบย่อย IO PnP เป็นฝังตัว C ++)
  • Linux: สิ่งส่วนใหญ่อยู่ใน C แอป userland จำนวนมากอยู่ใน Python KDE คือ C ++ ทั้งหมด

เมล็ดทั้งหมดจะใช้รหัสการประกอบเช่นกัน


13
ฉันควรเพิ่ม Gnome ว่า C ก็สวยมากเช่นกัน
Nathan Osman

17
Gnome ก็เล่นหูเล่นตากับ C # (โมโน)
Hristo Iliev

6
เคอร์เนล linux มีแอสเซมเบลอร์เช่นกัน
GL2014

9
จริงทุกเคอร์เนลจะมีแอสเซมบลีอย่างน้อยที่สุด
Ana Betts

4
เพื่อให้สิ่งต่าง ๆ ชัดเจน - ระบบย่อย IOKit ของเคอร์เนล Apple (สำหรับไดรเวอร์) ใช้ (เซตย่อยที่ จำกัด ของ) C ++ และในทั้ง 3 คือ Windows, Mac และ Linux แอปพลิเคชัน userland ที่สำคัญที่สุดจำนวนมากถูกเขียนใน C หรือ C ++ ยกตัวอย่างเช่น MS พยายามทำซ้ำ Office ใน. NET แต่กลับไปที่ C ++ และเคอร์เนล linux ใช้ภาษา C ++ มากมายเช่นสำนวน แต่ปรุงด้วยมือด้วยกันใน C เช่นการสืบทอดในรหัสไดรเวอร์
Erik Alapää

94

Linux: C. บางส่วนในชุดประกอบ

[... ] ส่วนใหญ่อยู่ใน C แต่คนส่วนใหญ่จะไม่เรียกสิ่งที่ฉันเขียน C. มันใช้ทุกคุณลักษณะที่เป็นไปได้ของ 386 ฉันสามารถหาได้เพราะมันเป็นโครงการที่จะสอนฉันเกี่ยวกับ 386 ตามที่ได้กล่าวไปแล้ว มันใช้ MMU สำหรับเพจจิ้ง (ยังไม่ดิสก์) และการแบ่งส่วน มันคือการแบ่งส่วนที่ทำให้มันขึ้นอยู่กับ 386 จริงๆ (ทุกงานมีส่วน 64Mb สำหรับรหัส & ข้อมูล - สูงสุด 64 งานใน 4Gb ใครก็ตามที่ต้องการคุกกี้มากกว่า 64Mb / งาน - ยาก) [... ] ไฟล์ "C" บางไฟล์ของฉัน (โดยเฉพาะ mm.c) เกือบจะเป็นแอสเซมเบลอร์เท่ากับ C. [... ] ซึ่งแตกต่างจากมินิกซ์ฉันยังเกิดขึ้นกับ LIKE interrupts ดังนั้นอินเตอร์รัปต์จึงจัดการโดยไม่พยายามซ่อน เหตุผลที่อยู่เบื้องหลังพวกเขา (ที่มา)

Mac OS X: Cocoa ส่วนใหญ่อยู่ใน Objective-C เคอร์เนลเขียนใน C บางส่วนในการชุมนุม

Mac OS X ที่เคอร์เนลเลเยอร์ส่วนใหญ่เป็นระบบปฏิบัติการที่เก่ากว่าและฟรีที่เรียกว่า BSD (โดยเฉพาะมันคือดาร์วินซึ่งเป็นลูกผสมของ BSD, Mach และอีกหลายอย่าง) ... เกือบทั้งหมด C กับบิต ของผู้ประกอบโยนลงมา (ที่มา)

โกโก้ส่วนใหญ่ถูกนำไปใช้ใน Objective-C ซึ่งเป็นภาษาเชิงวัตถุซึ่งถูกรวบรวมเพื่อให้ทำงานด้วยความเร็วอย่างไม่น่าเชื่อ แต่ใช้รันไทม์แบบไดนามิกอย่างแท้จริงทำให้มีความยืดหยุ่นเป็นเอกลักษณ์ เนื่องจาก Objective-C เป็นชุดของ C จึงง่ายต่อการผสม C และแม้แต่ C ++ ลงในแอปพลิเคชัน Cocoa ของคุณ (ที่มา)

Windows: C, C ++, C # บางส่วนในแอสเซมเบลอร์

เราใช้ C, C ++ และ C # สำหรับ Windows เกือบทั้งหมด รหัสบางส่วนมีการปรับแต่งด้วยมือ / เขียนด้วยมือ (ที่มา)

Unix: C. บางส่วนในชุดประกอบ (ที่มา)


3
ระบบย่อยของไดรเวอร์ในดาร์วิน (IOKit) นั้นอาศัยโมเดลวัตถุที่คล้าย COM ที่เขียนขึ้นใน C ++
Hristo Iliev

@Tahlor ใช่ คุณจะเขียนสิ่งที่ระดับต่ำเช่นเคอร์เนลใน VB ได้อย่างไรเมื่อมันไม่มีแม้แต่โอเปอเรเตอร์สำหรับการเลื่อนบิต นี่คือสิ่งที่เรย์มอนด์เฉินกล่าวว่า แอพ Windows แตกต่าง
phuclv

15

Mac OS X ใช้ C ++ จำนวนมากในห้องสมุดบางแห่ง แต่ไม่ได้รับการเปิดเผยเนื่องจากพวกเขากลัวว่า ABI จะแตกหัก


13
อะไร? ครึ่งหนึ่งของโปรแกรมหยุดทำงานในทุก ๆ รุ่นใหม่
kinokijuf

7
คุณกรุณาให้การอ้างอิงบางอย่างสำหรับคำสั่ง"Mac OS X ใช้ C ++ จำนวนมากในห้องสมุดบางแห่ง" ได้ไหม? ฉันแค่พบว่ามันยากที่จะใช้คำพูดของคุณมัน! ฉันขอโทษที่สงสัย
Anish Ramaswamy

5
มองเข้าไปใน @AnishRamaswamy IOKit, และWebKit นอกจากนี้ยังมีการเหลือบมองGLKit dyldมันหนักมาก C ++
Maxthon Chan

1
ฉันแน่ใจว่า OSX Kernal เป็น C ไม่ใช่ C ++ จริง ๆ แล้วทุกระบบปฏิบัติการที่ฉันเจอมี C kernal
twigg

10

ฉันเข้าใจว่านี่เป็นโพสต์เก่า แต่ Windows ไม่ได้เขียนใน C ++ แน่นอน มี C ++ มากมาย แต่สิ่งที่เรากำหนดทางเทคนิคเป็นระบบปฏิบัติการไม่ได้อยู่ใน C ++ Windows API, เคอร์เนล Windows (ทั้งสองอย่างนี้มีความหมายว่าระบบปฏิบัติการคืออะไร) เขียนขึ้นในค. ปีที่แล้วฉันได้รับรหัสรั่วไหลออกมาทั้ง Windows 2000 และ Windows XP รหัสไม่เกือบสมบูรณ์พอที่จะรวบรวมเคอร์เนลหรือ API แต่เราสามารถรวบรวมโปรแกรมและบริการแต่ละรายการได้ ตัวอย่างเช่นเราสามารถรวบรวม Notepad.exe, mspaint.exe และบริการ spoolsv.exe (ตัวจัดคิวงานพิมพ์) ได้สำเร็จ ทั้งหมดที่เขียนใน C. ฉันไม่ได้ดูอีกครั้ง แต่ฉันแน่ใจว่ารหัสที่รั่วยังคงมีชีวิตอยู่ในขณะที่ไฟล์ torrent ออกมานั้นอาจยังคงมีอยู่


9

Windows: ส่วนใหญ่ C และ C ++ บาง C #


1
. NET มาพร้อมกับ Windows . NET จำนวนมากอยู่ใน C #
34432 Jonathan Jonathan Parker

มีข่าวลือว่า Windows ในอนาคต (Windows 8 อาจจะ) จะมีรหัส C ++ แทนที่ด้วย C # /. NET
34432 Jonathan Jonathan Parker

พวกเขาจัดการระบบปฏิบัติการที่ใช้งานได้ (เกือบ) อย่างสมบูรณ์ใน C # มันเรียกว่าภาวะเอกฐาน research.microsoft.com/en-us/projects/singularity
Randolpho

Luc M: ใช่มีรหัส C # ใน Windows แหย่ไปรอบ ๆ แล้วคุณจะพบมัน .Net มาพร้อมกับระบบปฏิบัติการ แต่ไม่ได้หมายความว่าระบบจะเขียนโดยใช้. Net และ Windows ไม่ได้เป็นเอกเทศ มีความแตกต่างอย่างมากระหว่างต้นแบบการวิจัยและระบบปฏิบัติการจริง
ReinstateMonica Larry Osterman

2
@ 1800Information - C # รวบรวมไปยังรหัสเครื่องจากนั้น JIT รวบรวมไปยังรหัสเครื่องเมื่อทำงาน? ฉันคิดว่าคุณเป็นคนสับสน มี bytecode และมีเครื่องเสมือน: en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf

9
  • windows: C ++
  • linux: C
  • mac: วัตถุประสงค์ C
  • android: JAVA, C, C ++
  • Solaris: C, C ++
  • iOS 7: Objective-C, Swift, C, C ++

Android เขียนด้วย Java ใช่ไหม จริงๆ?
nirvanaswap

3
Android: Java (UI) ที่มา: en.wikipedia.org/wiki/Android_(operating_system)
Nitesh Borad

3
การสนทนาเป็นเรื่องเกี่ยวกับระบบปฏิบัติการ ไม่สามารถสร้างระบบปฏิบัติการได้หากไม่มีภาษาการเขียนโปรแกรมระบบ ไม่สามารถทำการเขียนโปรแกรมระบบด้วย Java
Jam Risser

ย่ะ บางส่วนของระบบสามารถสร้างขึ้นใน Java และตัวอย่างบางส่วนมีอยู่แล้วเช่น JavaOS แม้ว่ามันจะไม่ประสบความสำเร็จ ฉันไม่ได้บอกว่าคุณสามารถสร้างระบบปฏิบัติการด้วย 100% java
Shukant Pal

2
@JamRisser Android ใช้เคอร์เนล Linux ซึ่งอยู่ใน C. ระบบเกือบจะจนถึงเลเยอร์ที่ลึกที่สุดถูกเขียนด้วย Java Dalvik VM ซึ่งเป็นเครื่องเสมือนจาวาที่เขียนโดย Google นั้นอยู่ใน C หรือ C ++
peterh - Reinstate Monica

7

ว้าว!!! คำถาม 9 ปี แต่ฉันเพิ่งเจอบทความภายในเกี่ยวกับประวัติ Windows Command Line และฉันคิดว่าบางส่วนของบทความอาจเกี่ยวข้องกับด้าน Windows ของคำถาม:

สำหรับผู้ที่สนใจสิ่งต่าง ๆ : หลายคนถามว่า Windows เขียนใน C หรือ C ++ หรือไม่ คำตอบคือ - แม้จะมีการออกแบบตามวัตถุของ NT - เหมือนกับ OS ส่วนใหญ่ แต่ Windows ก็เกือบทั้งหมดเขียนด้วย 'C' ทำไม? C ++ แนะนำค่าใช้จ่ายในแง่ของหน่วยความจำรอยเท้าและค่าใช้จ่ายในการดำเนินการรหัส แม้กระทั่งทุกวันนี้ค่าใช้จ่ายแอบแฝงของโค้ดที่เขียนใน C ++ อาจเป็นเรื่องที่น่าแปลกใจ แต่ในช่วงปลายปี 1990 เมื่อหน่วยความจำมีราคา ~ $ 60 / MB (ใช่… $ 60 ต่อMEGABYTE!) ค่าใช้จ่ายหน่วยความจำที่ซ่อนอยู่ของ vtables ฯลฯ มีความสำคัญ นอกจากนี้ค่าใช้จ่ายของการโทรทางอ้อมวิธีเสมือนและการยกเลิกการอ้างอิงวัตถุอาจส่งผลให้เกิดประสิทธิภาพและการปรับสเกลที่สำคัญมากสำหรับรหัส C ++ ในเวลานั้น ในขณะที่ยังคงต้องระวังค่าใช้จ่ายด้านประสิทธิภาพของ C ++ ที่ทันสมัยในคอมพิวเตอร์สมัยใหม่นั้นมีความกังวลน้อยมากและมักจะเป็นการแลกเปลี่ยนที่ยอมรับได้เมื่อพิจารณาถึงความปลอดภัยการอ่านและผลประโยชน์การบำรุงรักษา ... ซึ่งเป็นเหตุผลว่าทำไมเรา ทำการอัพเกรดรหัสของคอนโซลเป็น C ++ ที่ทันสมัย


6

คุณพูดถูกแล้ว MacOSX มี Objective-C อยู่ในแกน

Windows C ++

Linux C

เกี่ยวกับภาษาสคริปต์พวกมันค่อนข้างสูงมาก


7
Windows ใน C: เคอร์เนลไดรเวอร์ API เฉพาะแอปพลิเคชันและเครื่องมือระบบใน C ++ ฉันเดา ดังนั้นจึงชัดเจนยิ่งขึ้นที่จะบอกเพียง C
abatishchev

5

ฉันได้อ่านหรือได้ยินมาว่า Mac OS X ส่วนใหญ่เขียนใน Objective-C ซึ่งมีชิ้นส่วนระดับล่างเช่นเคอร์เนลและไดรเวอร์อุปกรณ์ฮาร์ดแวร์ที่เขียนด้วย C ฉันเชื่อว่า Apple "กินอาหารสุนัขของตัวเอง "หมายถึงว่าพวกเขาเขียน Mac OS X โดยใช้Xcode Developer Tools ของตนเอง GCC (GNU เก็บสะสม)คอมไพเลอร์-ลิงเกอร์เป็นเครื่องมือบรรทัดคำสั่งยูนิกซ์ที่ Xcode ที่ใช้มากที่สุดในการรวบรวมและ / หรือการเชื่อมโยงของ executables ในบรรดาภาษาอื่น ๆ ที่เป็นไปได้ฉันรู้ว่า GCC รวบรวมซอร์สโค้ดจากภาษา C, Objective-C, C ++ และ Objective-C ++


4

เคอร์เนลลินุกซ์ส่วนใหญ่เขียนด้วยภาษาซี (และภาษาแอสเซมบลีนิดหน่อยผมนึกภาพ) แต่ยูทิลิตี้สเปซที่สำคัญบางโปรแกรม (โปรแกรม) คือเชลล์สคริปต์ที่เขียนในภาษาสคริปต์ Bash นอกเหนือจากนั้นมันยากที่จะนิยาม "Linux" เนื่องจากคุณสร้างระบบลินุกซ์โดยการเลือกบิตและชิ้นส่วนที่คุณต้องการและนำมารวมกันและขึ้นอยู่กับสิ่งที่ผู้ใช้ Linux แต่ละคนต้องการ (ดังที่เปาโลกล่าวไว้ Python และ C ++ มีบทบาทสำคัญ)


3

นอกเหนือจากแกนหลักของ Mac OS X แล้ว Finder ไม่ได้ถูกเขียนใน Objective-C ก่อน Snow Leopard ใน Snow Leopard มันถูกเขียนใน Cocoa, Objective-C



1

เห็นได้ชัดว่า Windows ไม่ได้เขียนใน C # (!)

เพียงดูซอร์สโค้ดของ Windows แล้วคุณจะเห็น ...


36
"เพียงแค่ดูรหัสที่มาของวินโดวส์" ถ้าคุณเป็นหนึ่งในไม่กี่คนที่ได้รับอนุญาต / สามารถที่กำลังจะทำอย่างนั้น ...
โจอาคิมซาวเออร์

1
มีชิ้นส่วนซอร์สโค้ดของ Windows จำนวนมากใน Torrents และยังมีรีวิวบางส่วนอีกด้วย
abatishchev

4
บางส่วนของรหัส Windows ได้รั่วไหลออกมาหลายปีแล้ว ดูตัวอย่างหัวข้อเก่านี้: < kuro5hin.org/story/2004/2/15/71552/7795 > :)
คลาย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.