Windows, Mac OS X và Linux được viết bằng ngôn ngữ nào?


273

Tôi chỉ tự hỏi ai biết ngôn ngữ lập trình Windows, Mac OS X và Linux được tạo từ và ngôn ngữ nào được sử dụng cho từng phần của HĐH (ví dụ: Kernel, kiến ​​trúc trình cắm, thành phần GUI, v.v.).

Tôi giả sử rằng có nhiều ngôn ngữ cho mỗi ngôn ngữ và rõ ràng tôi biết hạt nhân Linux được viết bằng C.

Tôi hoàn toàn đoán ở đây rằng Mac OS X chứa rất nhiều mã Objective-C vì đây là ngôn ngữ của Apple có nguồn gốc từ NeXT.

Windows, tôi đã nghe nói có chứa C, C ++ và Intel hội. Linux hay Mac OS có chứa mã hội nào không?

Ngoài ra, có các ngôn ngữ script như Ruby, Python, v.v. được các nhà phát triển HĐH sử dụng cho các phần script của OS không? Những phần nào của HĐH sẽ được viết bằng mỗi ngôn ngữ?



Trao đổi SO này có thể giúp trả lời phần cuối cùng của câu hỏi của bạn.
Bikramjeet Singh

Câu trả lời:


269
  • Windows: C ++, kernel nằm trong C
  • Mac: Objective C, kernel nằm trong C (Hệ thống con IO PnP được nhúng C ++)
  • Linux: Hầu hết mọi thứ đều bằng C, nhiều ứng dụng người dùng có trong Python, KDE là tất cả C ++

Tất cả các hạt nhân sẽ sử dụng một số mã lắp ráp là tốt.


13
Tôi nên thêm rằng Gnome cũng khá nhiều C.
Nathan Osman

17
Gnome cũng tán tỉnh C # (Mono).
Hristo Iliev

6
Hạt nhân linux cũng có trình biên dịch hợp ngữ.
GL2014

9
Đúng, mọi hạt nhân sẽ có ít nhất một số trình biên dịch
Ana Betts

4
Để làm cho mọi thứ rõ ràng - hệ thống con IOKit của hạt nhân Apple (dành cho trình điều khiển) sử dụng (một tập hợp con bị hạn chế) C ++. Và trên cả 3, tức là Windows, Mac và Linux, nhiều ứng dụng người dùng quan trọng nhất được viết bằng C hoặc C ++. Bị cáo buộc, ví dụ, MS đã cố gắng làm lại Office trong .NET nhưng đã quay lại C ++. Và nhân linux sử dụng nhiều thành ngữ giống như C ++ nhưng được nấu bằng tay với nhau trong C, ví dụ: kế thừa trong mã trình điều khiển.
Erik Alapää 23/2/2015

94

Linux: C. Một số bộ phận trong lắp ráp.

[...] Phần lớn là bằng C, nhưng hầu hết mọi người sẽ không gọi những gì tôi viết C. Nó sử dụng mọi đặc điểm có thể hiểu được của 386 tôi có thể tìm thấy, vì đó cũng là một dự án để dạy tôi về 386. Như đã đề cập , nó sử dụng MMU, cho cả phân trang (chưa vào đĩa) và phân đoạn. Đó là phân đoạn làm cho nó thực sự phụ thuộc vào 386 (mọi tác vụ đều có phân đoạn 64Mb cho mã & dữ liệu - tối đa 64 tác vụ trong 4Gb. Bất kỳ ai cần nhiều hơn 64Mb / tác vụ - cookie khó khăn). [...] Một số tệp "C" của tôi (cụ thể là mm.c) gần như là trình biên dịch mã nhiều như C. [...] Không giống như minix, tôi cũng xảy ra các ngắt THÍCH, do đó các ngắt được xử lý mà không cố ẩn lý do đằng sau họ. (Nguồn)

Mac OS X: Ca cao chủ yếu ở Objective-C. Kernel viết bằng C, một số phần trong lắp ráp.

Mac OS X, ở lớp kernel, phần lớn là hệ điều hành miễn phí cũ hơn có tên BSD (cụ thể là Darwin, một loại lai của BSD, Mach và một vài thứ khác) ... gần như hoàn toàn bằng C, với một chút của trình biên dịch được ném vào. (Nguồn)

Phần lớn ca cao được triển khai trong Objective-C, một ngôn ngữ hướng đối tượng được biên dịch để chạy ở tốc độ đáng kinh ngạc, nhưng sử dụng thời gian chạy thực sự năng động làm cho nó linh hoạt độc đáo. Vì Objective-C là siêu bộ của C, nên rất dễ trộn C và thậm chí C ++ vào các ứng dụng Cacao của bạn. (Nguồn)

Windows: C, C ++, C #. Một số bộ phận trong lắp ráp.

Chúng tôi sử dụng gần như hoàn toàn C, C ++ và C # cho Windows. Một số khu vực của mã được điều chỉnh bằng tay / lắp ráp bằng tay. (Nguồn)

Unix: C. Một số bộ phận trong lắp ráp. (Nguồn)


3
Hệ thống con trình điều khiển ở Darwin (IOKit) phụ thuộc rất nhiều vào mô hình đối tượng giống COM được viết trong một tập hợp con của C ++.
Hristo Iliev

@Tahlor có. Làm thế nào bạn có thể viết một thứ cấp thấp như kernel trong VB khi nó thậm chí không có toán tử để dịch chuyển bit? Đây là những gì Raymond Chen nói . Các ứng dụng Windows thì khác
phuclv

15

Mac OS X sử dụng một lượng lớn C ++ bên trong một số thư viện, nhưng nó không bị lộ vì họ sợ ABI phá vỡ.


13
Gì? Một nửa số chương trình ngừng hoạt động trên mỗi bản phát hành mới.
kinokijuf

7
Bạn có thể vui lòng cung cấp một số trích dẫn cho câu lệnh "Mac OS X sử dụng số lượng lớn C ++ trong một số thư viện" không? Tôi chỉ thấy khó khăn khi chỉ nhận lời của bạn cho nó! Tôi xin lỗi vì đã hoài nghi.
Anish Ramaswamy

5
@AquerRamaswamy Nhìn vào IOKit, WebKitGLKit. Cũng có một cái nhìn thoáng qua dyld. Những cái đó rất nặng C ++.
Maxthon Chan

1
Tôi chắc chắn OSX Kernal là C chứ không phải C ++, trên thực tế tất cả các hệ điều hành tôi đã gặp đều có
Cernern

10

Tôi hiểu rằng đây là một bài viết cũ nhưng Windows chắc chắn không được viết bằng C ++. Có rất nhiều C ++ trong đó nhưng những gì chúng tôi định nghĩa kỹ thuật là một hệ điều hành không có trong C ++. API Windows, nhân Windows (cả hai về bản chất là hệ điều hành) được viết bằng C. Cách đây nhiều năm, tôi đã nhận được một số mã bị rò rỉ cho cả Windows 2000 và Windows XP. Mã này gần như không đủ để biên dịch kernel hoặc API nhưng chúng tôi có thể biên dịch các chương trình và dịch vụ riêng lẻ. Ví dụ: chúng tôi đã có thể biên dịch thành công Notepad.exe, mspaint.exe và dịch vụ spoolsv.exe (bộ đệm in). Tất cả được viết bằng C. Tôi đã không nhìn lại nhưng tôi chắc chắn rằng mã bị rò rỉ vẫn tồn tại dưới dạng các tệp torrent ngoài đó vẫn có thể có sẵn.


9

Windows: Chủ yếu là C và C ++, một số C #


1
.NET được vận chuyển cùng với Windows. Rất nhiều .NET có trong C #.
Jonathan Parker

Có tin đồn rằng các phiên bản trong tương lai (có thể là Windows 8) của Windows sẽ có một số mã C ++ được thay thế bằng C # /. NET.
Jonathan Parker

Họ đã quản lý một hệ điều hành hoạt động (gần như) hoàn toàn bằng C #. Nó được gọi là Singularity. research.microsoft.com/en-us/projects/singularity
Randolpho

Luc M: Vâng, có mã C # trong Windows. Chọc xung quanh và bạn sẽ tìm thấy nó. .Net được vận chuyển cùng với HĐH nhưng điều đó không có nghĩa là HĐH được viết bằng .Net. Và Windows không phải là Singularity. Có một sự khác biệt rất lớn giữa một nguyên mẫu nghiên cứu và một hệ điều hành thực sự.
Tái lậpMonica Larry Osterman

2
@ 1800Thông tin - C # biên dịch thành mã máy từ đó JIT biên dịch thành mã máy khi chạy? Tôi nghĩ bạn là một trong những nhầm lẫn. Có mã byte IS và có máy ảo: en.wikipedia.org/wiki/Common_Inter liền_Lingu
Brock Woolf

9
  • cửa sổ: C ++
  • linux: C
  • mac: Mục tiêu C
  • Android: JAVA, C, C ++
  • Solaris: C, C ++
  • iOS 7: Mục tiêu-C, Swift, C, C ++

Android được viết bằng Java? Có thật không?
nirvanaswap

3
Android: Java (Giao diện người dùng). Nguồn: en.wikipedia.org/wiki/Android_(operating_system)
Nitesh Borad

3
Các cuộc thảo luận là về hệ điều hành. Một hệ điều hành không thể được xây dựng mà không có ngôn ngữ lập trình hệ thống. Không thể lập trình hệ thống với Java.
Jam Risser

Yah Một số phần của một hệ thống có thể được xây dựng bằng Java và một số ví dụ đã có sẵn như JavaOS, mặc dù nó không thành công. Tôi không nói rằng bạn có thể xây dựng hệ điều hành với 100% java.
Shukant Pal

2
@JamRisser Android sử dụng nhân Linux, có trong C. Hệ thống, gần như cho đến khi các lớp sâu nhất, được viết bằng Java. Máy ảo Dalvik, một máy ảo java được viết bởi Google, có dạng C hoặc C ++.
peterh - Phục hồi lại

7

Chà !!! 9 năm câu hỏi nhưng tôi vừa bắt gặp một loạt bài viết nội bộ về lịch sử Dòng lệnh của Windows và tôi nghĩ rằng một phần của câu hỏi có thể liên quan đến phía Windows của câu hỏi:

Đối với những người quan tâm đến những điều như vậy: Nhiều người đã hỏi liệu Windows được viết bằng C hay C ++. Câu trả lời là - mặc dù thiết kế dựa trên đối tượng của NT - giống như hầu hết các hệ điều hành ', Windows gần như được viết hoàn toàn bằng chữ' C '. Tại sao? C ++ giới thiệu một chi phí về dấu chân bộ nhớ và chi phí thực thi mã. Thậm chí ngày nay, các chi phí ẩn của mã được viết bằng C ++ có thể gây ngạc nhiên, nhưng vào cuối những năm 1990, khi bộ nhớ có giá ~ 60 đô la / MB (vâng, $ 60 mỗi MEGABYTE!), chi phí bộ nhớ ẩn của vtables, vv là đáng kể. Ngoài ra, chi phí cho việc gọi điện thoại theo phương thức ảo và hội thảo đối tượng có thể dẫn đến các hình phạt hiệu suất và quy mô rất đáng kể cho mã C ++ tại thời điểm đó. Mặc dù người ta vẫn cần phải cẩn thận, nhưng chi phí hoạt động của C ++ hiện đại trên các máy tính hiện đại ít đáng quan tâm hơn và thường là sự đánh đổi chấp nhận được khi xem xét các lợi ích bảo mật, dễ đọc và bảo trì của nó ... đó là lý do tại sao chúng ta nâng cấp đều đặn mã của Console lên C ++ hiện đại.


6

Bạn đúng MacOSX có Objective-C trong lõi.

Windows C ++

Linux C

Về ngôn ngữ kịch bản, không, chúng có trình độ khá cao.


7
Windows trong C: kernel, trình điều khiển, API. Chỉ có các ứng dụng và công cụ hệ thống trong C ++, tôi đoán vậy. Vì vậy, rõ ràng hơn khi chỉ nói C
abatishchev

5

Tôi đã đọc hoặc nghe nói rằng Mac OS X được viết chủ yếu bằng Objective-C với một số phần cấp thấp hơn, chẳng hạn như kernel và trình điều khiển thiết bị phần cứng được viết bằng C. Tôi tin rằng Apple "ăn thức ăn cho chó của riêng mình ", Có nghĩa là họ viết Mac OS X bằng Công cụ dành cho nhà phát triển Xcode của riêng họ . Các GCC (GNU Compiler Collection) biên dịch-mối liên kết là công cụ dòng lệnh unix mà Xcode sử dụng cho hầu hết của nó biên dịch và / hoặc liên kết của tập tin thực thi. Trong số các ngôn ngữ có thể khác, tôi biết GCC biên dịch mã nguồn từ các ngôn ngữ C, Objective-C, C ++ và Objective-C ++.


4

Hạt nhân Linux chủ yếu được viết bằng C (và một chút ngôn ngữ lắp ráp, tôi tưởng tượng), nhưng một số tiện ích không gian người dùng (chương trình) quan trọng là các tập lệnh shell được viết bằng ngôn ngữ kịch bản Bash. Ngoài ra, thật khó để định nghĩa "Linux" vì về cơ bản bạn xây dựng một hệ thống Linux bằng cách chọn các bit và phần bạn muốn và đặt chúng lại với nhau, và tùy thuộc vào những gì một người dùng Linux muốn, bạn có thể có được bất kỳ ngôn ngữ nào có liên quan. (Như Paul đã nói, Python và C ++ đóng vai trò quan trọng)


3

Là một bổ sung về cốt lõi của Mac OS X, Finder đã không được viết trong Objective-C trước Snow Leopard. Trong Snow Leopard, nó được viết bằng ca cao, Objective-C



1

Windows rõ ràng không được viết bằng C # (!)

Chỉ cần xem mã nguồn của Windows và bạn sẽ thấy ...


36
"Đơn giản chỉ cần xem mã nguồn của Windows" nếu bạn là một trong số ít được phép / có thể làm điều đó ...
Joachim Sauer

1
Có rất nhiều phần mã nguồn Windows trong Torrents, cũng có một vài đánh giá về nó
abatishchev

4
Các phần của mã Windows đã bị rò rỉ ra ngoài, nhiều năm trước. Xem ví dụ chủ đề cũ này: < kuro5hin.org/story/2004/2/15/71552/7795 >. :)
thư giãn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.