Mã nguồn mở tốt nhất bạn từng thấy là gì? [đóng cửa]


19

Một phần giá trị của Nguồn mở là cung cấp mã ví dụ tuyệt vời cho những người bắt đầu với một nền tảng hoặc ngôn ngữ mới.

Mã nguồn mở tốt nhất bạn gặp phải là gì và tại sao bạn thích lựa chọn của mình? Bất kỳ ngôn ngữ nào cũng được, nhưng tôi đặc biệt quan tâm đến các ví dụ tốt nhất về Objective-C mà bạn có thể chỉ ra.

Rõ ràng đây là một câu hỏi mở, vì vậy tôi sẽ để câu hỏi mở trong một thời gian và xem những loại câu trả lời chúng tôi nhận được.

Cảm ơn!

EDIT: Đối với "tốt nhất" tôi đã nghĩ đến mã theo các thành ngữ trong ngôn ngữ hoặc nền tảng nhất định, cũng như bao gồm các phần tạo mã "chuyên nghiệp" - tài liệu tốt, bộ kiểm tra, v.v. Mã đó ngắn gọn, nhưng không quá thông minh được ưu tiên cho mã rất ngắn gọn hoặc trò chuyện.


4
Bất kỳ định nghĩa cụ thể của "tốt nhất" trong tâm trí?

Câu hỏi của bạn hơi rộng. Có lẽ bạn có thể chỉnh sửa nó để cụ thể hơn và xác định "tốt nhất" có nghĩa gì với bạn. Giao diện người dùng tốt nhất, ứng dụng máy tính để bàn / web / điện thoại tốt nhất, tính đồng nhất tốt nhất, mã hấp dẫn trực quan nhất?
Walter

+1 cho một câu hỏi hay. Tôi đề nghị bạn cắt tỉa nó với một số ngôn ngữ / công nghệ cụ thể. So sánh C cho Linux và Java cho trình điều khiển cơ sở dữ liệu thực sự là một ý tưởng không nhất quán.
Fanatic23

Nó sẽ rất hữu ích cho những người khác đọc câu hỏi nếu bạn chỉnh sửa làm rõ điều đó. :)
Michael K

Câu trả lời:


14

Tôi phải nói rằng đã xem xét các bit của mã nguồn mở trong nhiều năm qua, tôi đã rất thất vọng với khá nhiều về nó.

Sự khó chịu chính đối với tôi là thường có rất ít bình luận, thường thì những bình luận duy nhất là một số thông báo bản quyền dài và hợp pháp.

Hạt nhân linux là một ví dụ trong đó các tệp thường không có bình luận trong đó cho biết mục đích của chúng là gì (ví dụ: trình điều khiển cho XYZ ít nhất sẽ cho tôi biết tôi đang ở đúng vị trí).

Tôi đến từ lập trình thương mại và quốc phòng nơi các tiêu chuẩn mã hóa đòi hỏi những nhận xét rõ ràng hợp lý không chỉ để nói đơn vị mã làm gì, mà thông qua mã phải có các khối nhận xét mô tả thuật toán, phương pháp, đặc thù, hack / điều thông minh , tất cả để bất cứ ai đến sau đều có thể nhìn và tìm ra NHANH CHÓNG những gì đang được thực hiện thay vì siêng năng lội qua mã thực tế.

Có lẽ đạo đức là: Hãy nói cho tôi biết bạn đang làm gì, đừng bắt tôi phải tìm ra nó.

Tôi đã không tìm thấy BẤT K code mã nguồn mở nào làm tốt điều này. Theo như tìm kiếm nguồn mở như một phương tiện để học các thực hành mã hóa tốt, lời khuyên vàng da của tôi là: Đừng.


Tôi đồng ý rằng các dự án nguồn mở thường được nhận xét kém và tài liệu kém. Nhưng họ đều là tình nguyện viên. Thật khó để thúc đẩy các tình nguyện viên làm những điều khó chịu thường không có phần thưởng mà họ đang tìm kiếm (địa vị, xã hội, đạt được những điều tuyệt vời hoặc làm những gì họ yêu thích).

@ pierre303 - Tôi đã thành lập và duy trì NoRMproject.org, Một trong những điều chính tôi làm là viết bình luận khi tôi viết mã, và điều này giúp ích. Tôi nghĩ rằng những người đóng góp sẽ làm việc trên các phần mà các nhà lãnh đạo nhấn mạnh. Trong trường hợp của NoRM, đó là mã Kiểm tra, Nhận xét và Thành ngữ (đến c #). Tôi nghĩ rằng chúng tôi có một codebase khá chuyên nghiệp, có thể bảo trì vì nó.
Andrew Theken

Tôi đồng ý rằng các ý kiến ​​nên được viết vì mã đang được viết. (Tôi cũng làm điều này trong tất cả các mã của riêng tôi, chủ yếu là bởi vì tôi ích kỷ và nó giúp tôi viết một câu chuyện trước khi khối mã -. Nó làm rõ trong tâm trí của riêng tôi những gì tôi cần phải làm trước khi tôi thực sự làm điều đó)
quick_now

Nhắc nhở tôi về câu nói hài hước này, tôi đã từng va vào: "Nếu tôi gặp khó khăn khi viết nó, họ nên có một thời gian khó đọc nó."
Denis de Bernardy

+1, @quickly_now - bạn nghĩ rằng mã đó phải được lên kế hoạch tốt, được thử nghiệm tốt và hiện được nhận xét tốt! Bạn đang sống trên loại hành tinh điên nào?


5

Donald Knuth đã viết hai chương trình để giúp anh ta sắp xếp các công thức toán học của mình trong các cuốn sách của mình tốt hơn so với nhà xuất bản của anh ta có thể.

Hai chương trình này (trong phiên bản cuối cùng của chúng) được viết bằng Lập trình Văn học , cho phép tạo ra một phiên bản in, sắp chữ của mã nguồn và chúng được xuất bản thành sách. Đây chỉ đơn giản là những chương trình tài liệu tốt nhất mà tôi từng đọc!

  • "Máy tính & sắp chữ, Tập B: TeX: Chương trình"
  • "Máy tính & sắp chữ, Tập D: Metafont: Chương trình"

Chúng không có sẵn để đọc trực tuyến, nhưng Amazon cũng cho phép bạn "Nhìn vào bên trong" cuốn sách Metafont tại http://www.amazon.com/Computers-Typesetting-D-Metafont-Program/dp/0201134381/

Cảnh báo: Đó là một thứ nặng nề, đó là lý do tại sao mỗi cuốn sách chạy ở 600 trang.


1
Lưu ý: Đây là phiên bản sắp chữ không có sẵn trực tuyến. Nguồn này có sẵn đầy đủ và có thể - với một nỗ lực nhỏ - được sử dụng để tạo phiên bản in.

4

Cuốn sách Beautiful Code cố gắng trả lời câu hỏi này bằng một số mẫu về những gì người đóng góp nghĩ là mẫu mực của mã đẹp từ các dự án nguồn mở.
văn bản thay thế


4
Là cuốn sách đáng để kiểm tra?
Oliver Weiler

Mặc dù vậy, đây không phải là mã nguồn mở "thế giới thực". Câu trả lời này là gian lận! : P
Noldorin

1
Tôi sở hữu nó, không ấn tượng. Hầu hết các chương đều nhàm chán, nhưng có một vài điểm nổi bật trong đó - bản đồ / thu nhỏ được giải thích nếu tôi nhớ chính xác.
Martin Wickman

4

CodeIgniter

Một số mã nguồn tài liệu tốt nhất, sạch nhất mà tôi đã thấy từ một dự án hệ điều hành.


1
php & sạch nhất?
Kugel

1
@Kugel: Có cho cả hai.
Josh K

Chỉ cần nhìn vào nguồn của CodeIgniter, và nó thực sự có vẻ rất có cấu trúc và sạch sẽ. Tôi nghĩ là đẹp như bạn có thể nhận được trong php. :) Và tôi luôn thích sự hài hước trong mã nguồn: "// Chưa có DB nào được chỉ định? Hãy đánh bại họ một cách vô nghĩa ... if (! [($ Params ['dbdriver']) ..."
Bjarke Freund-Hansen

2
Tôi đã có một cái nhìn vào mã nguồn và tôi phải thừa nhận nó đã được ghi nhận tốt và dễ dàng để làm theo, và tôi đã không mong đợi nó từ một hệ điều hành PHP.
OnesimusUnbound

2
Một khung công tác PHP hệ điều hành tuyệt vời khác là Fuelphp ( Fuelphp.com ) cũng được ghi lại, trình bày rõ ràng và sử dụng các quy ước đặt tên không khiến bạn phải nhổ tóc. Điều đó chỉ chứng minh rằng không phải PHP đổ lỗi cho mã spaghetti, mà thường là những người viết mã.
Michael JV

3

Tôi đã thấy 2 dự án có cấu trúc rất tốt:

  1. Django
  2. Dự án Chromium

Đặc biệt, thứ hai là rất thú vị dựa trên một vài điều:

  • Cách nó sử dụng các quy trình cho nhiều thứ (tab, trình cắm) và cách nó khớp với nhau
  • đa nền tảng với GUI gốc cho từng Windows, Mac, Linux
  • tích hợp web-kit

Ngoài ra, tôi nghe nói Postgre được viết sạch sẽ (trái ngược với MySql), nhưng tôi đã không tự đọc nó.


1
+1 cho mã PostgreSQL. Nó cực kỳ sạch sẽ và dễ đọc.
Denis de Bernardy

2

Một số người nói rằng mã C cho Linux Kernel khá tốt.

(Không phải tôi hiểu điều đó! Đây có thể là dự án C nguồn mở được viết tốt nhất xung quanh.)


1
Đối với mã được tối ưu hóa, nó thật tuyệt. Đối với khả năng đọc không tốt, theo kinh nghiệm của tôi. Tất nhiên, tôi chưa viết gì cả, chỉ cần đọc nó ...
Michael K

1
Vâng đúng. Thật không may, câu hỏi không thực sự xác định "tốt nhất", vì vậy tôi đang lấy định nghĩa của riêng mình. :)
Noldorin

2

Tôi đã tìm thấy mã nguồn LLVM rất dễ đọc. Tôi khá chắc chắn rằng đó là C ++ sạch nhất tôi từng thấy. Nếu bạn không quen thuộc với nó, về cơ bản nó là một bộ công cụ xây dựng trình biên dịch.

  • Nó có một bộ thử nghiệm rộng rãi. Thực tế, nó có ít nhất hai: một bộ cho các tính năng thử nghiệm và một cho hiệu năng thử nghiệm (của chính LLVM cũng như các chương trình được biên dịch mà nó tạo ra).
  • Các mã được bình luận tốt.
  • Mã lặp lại cao (như khớp lệnh trong các phụ trợ khác nhau) được tạo tự động từ mô tả DSL cấp cao hơn (gọi là TableGen).
    • Điều này cũng cho phép tạo ra nhiều đoạn mã rời rạc từ cùng một mô tả. Ví dụ, đặc tả phụ trợ được sử dụng như một phần của phụ trợ trình biên dịch, nhưng cũng dành cho trình biên dịch và trình dịch ngược.
  • Nó có tài liệu khá tốt.

Tuy nhiên, đây là một dự án khá lớn, vì vậy đừng hy vọng có thể nhanh chóng hiểu chính xác mọi thứ hoạt động như thế nào. Nhưng nó sẽ khá dễ dàng để có được một cái nhìn tổng quan cấp cao.


1

Đó không phải là một dự án lớn, nhưng ORS SubSonic cực kỳ dễ dàng để tôi hack. Đó là dự án nguồn mở thực sự đầu tiên tôi có thể sửa đổi chính xác những gì tôi cần. Hầu hết những người khác cuối cùng tôi nhìn vào nguồn và đập đầu vào tường. Tôi đã có nó hỗ trợ một phần PostgreSQL (dựa trên điều nhà cung cấp SQL Server) trong vài giờ. Đó là dự án được tổ chức tốt nhất mà tôi từng thấy ... mặc dù không nói rằng tôi đã xem xét rất nhiều dự án nguồn mở.


0

Đầu tiên là một ví dụ đơn giản: Mã cho hệ thống xử lý sự kiện zope.event. Tôi đã sử dụng các hệ thống sự kiện khác, đã gửi các sự kiện đến những người nghe sự kiện khác nhau. Khi tôi nhìn thấy mã zope.event, đó là thời gian facepalm, khi tôi nhận ra một số thứ có thể đơn giản như thế nào.

Nó được viết bằng Python và đây là toàn bộ mã:

subscribers = []

def notify(event):
    """ Notify all subscribers of ``event``.
    """
    for subscriber in subscribers:
        subscriber(event)

Để thêm một thuê bao, bạn làm điều này:

from zope.event import subscribers
subscribers.add(MySubscriber())

Ví dụ tốt nhất về KISS tôi đã thấy.

Sau đó, một ví dụ phức tạp hơn: Cơ sở mã sao Hỏa rất đẹp và dễ đọc, mặc dù nó sử dụng một số hack Python thông minh. Điều tương tự cũng xảy ra với hầu hết mã của Grok, được xây dựng bằng Martian.


3
Tôi không hiểu điều gì là tuyệt vời với mã này. Tôi không biết trăn, nhưng tôi chỉ có thể thấy một cách sử dụng đơn giản mẫu quan sát viên ở đây, và không có gì khác.
barjak

Bạn đã so sánh nó với các hệ thống sự kiện khác? Để đơn giản, hãy lấy một ví dụ Python khác: pypi.python.org/pypi/pyjon.events/1.1.1
Lennart Regebro

1
Đẹp - Tôi thực sự đã viết một cái gì đó rất giống trong javascript. Tôi đoán tôi thông minh? ;)
Michael K

Chỉ vì có hệ thống sự kiện tồi tệ hơn nhiều, không có nghĩa đây là mã tuyệt vời. Tôi thấy chính xác mã này trong hàng tấn ngôn ngữ. Và quan trọng hơn, tôi thấy loại triển khai an toàn.
back2dos

@ back2dos: Đây là loại an toàn.
Lennart Regebro

0

Xem xét việc đọc cuốn sách này Kiến trúc của các ứng dụng nguồn mở . Nó sẽ cung cấp cho bạn một bài phê bình về lý do tại sao và làm thế nào các quyết định thiết kế đã được thực hiện trong các dự án được thảo luận trong cuốn sách.

Thay vì tìm kiếm thứ tốt nhất, thứ có thể trốn tránh bạn lâu dài, hãy thử và đánh giá cao thiết kế của một số dự án, có lẽ vượt quá phạm vi của cuốn sách. Điều đó có thể giúp bạn xây dựng dựa trên những thành công của các dự án này thay vì lặp lại sai lầm của họ (hoặc, như cách gọi phổ biến, phát minh lại bánh xe).

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.