Який найкращий відкритий код, який ви коли-небудь бачили? [зачинено]


19

Частина цінності Open Source полягає у наданні чудового прикладу коду людям, які розпочинають роботу з новою платформою чи мовою.

Який найкращий відкритий код, з яким ви стикалися, і чому вам подобається ваш вибір? Буде мова будь-якою мовою, але мене особливо цікавлять найкращі приклади Objective-C, які ви можете вказати.

Очевидно, що це питання відкритого типу, тому я залишу питання відкритим на деякий час і побачу, які типи відповідей ми отримуємо.

Спасибі!

EDIT: Для "кращих" я думав про код, який відповідає ідіомам даної мови чи платформи, а також включав частини, які роблять код "професійним" - хороша документація, набір тестувань тощо. Код є стислим, але не надто розумний віддається перевагу дуже лаконічному або балаканиному коду.


4
Будь-яке конкретне визначення "найкращого" на увазі?

Ваше запитання трохи широке. Можливо, ви можете відредагувати його, щоб бути більш конкретним і визначити, що для вас означає «найкраще». Кращий інтерфейс користувача, найкращий додаток для настільних ПК / веб / телефонів, найкраща привабливість, найкращий візуально привабливий код?
Вальтер

+1 за гарне запитання. Я пропоную вам підрізати його якоюсь конкретною мовою / технологією. Порівнювати C для Linux та Java для драйверів баз даних відверто непослідовною ідеєю.
Fanatic23

Було б дуже корисно для інших, хто читає питання, якби ви відредагували це пояснення в ньому. :)
Майкл К

Відповіді:


14

Я мушу сказати, що переглянувши біти відкритого коду протягом багатьох років, я був дуже розчарований в значній мірі все це.

Головне роздратування для мене полягає в тому, що коментарів, як правило, дуже мало, часто єдині коментарі - це довгі і легалістичні повідомлення про авторські права.

Ядро Linux - це приклад, коли у файлах часто навіть немає коментарів, які говорять, для чого вони служать (наприклад, драйвер для XYZ хоча б сказав мені, що я приблизно в потрібному місці).

Я прийшов з комерційного та оборонного програмування, де стандарти кодування вимагають розумних зрозумілих коментарів не просто для того, щоб сказати, що робить кодова одиниця, але і поза кодом повинні бути блоки коментарів, що описують алгоритми, методи, особливості, хакі / розумні речі , все так, що той, хто звертається за собою, зможе швидше подивитися і зрозуміти, що робиться, а не старанно перебираючи фактичний код.

Можливо, мораль така: Скажи мені, що ти робиш, не змушуй мене це зрозуміти.

Я не знайшов жодного відкритого коду, який би це зробив добре. Що стосується того, щоб шукати відкритий код як засіб вивчення хороших практик кодування, мій пожовклий рада: Не.


Я погоджуюсь, що проекти з відкритим кодом часто погано коментуються і погано документуються. Але всі вони добровольці. Важко мотивувати добровольців робити неприємні речі, як правило, без нагороди, яку вони шукають (статус, соціальне життя, досягнення чудових речей або те, що вони люблять).

@ pierre303 - Я створив і підтримую NoRMproject.org. Одне з головних, що я роблю, - це писати коментарі, коли я пишу код, і це допомагає. Я думаю, що вкладники працюватимуть над частинами, на яких наголошують лідери. У випадку з NoRM це був код тестів, коментарів та ідіоматичного (до c #) коду. Я думаю, що у нас є досить професійна, бездоганну кодову базу.
Ендрю Текен

Я погоджуюся, що коментарі повинні писатися під час написання коду. (Я також роблю це у всьому власному коді, головним чином тому, що я егоїстичний, і це допомагає мені написати розповідь перед блоком коду - він по-своєму пояснює, що мені потрібно зробити, перш ніж я насправді це роблю.)
quick_now

Нагадує мені про цю кумедну цитату, про яку я одного разу натрапив: "Якби мені було важко писати її, вони мали б важко її читати".
Денис де Бернарді

+1, @quickly_now - ви вважаєте, що код повинен бути добре спланований, добре перевірений і тепер добре прокоментований! На якій божевільній планеті ти живеш?

5

Я чув дуже гарні речі про кодову базу Sqlite .

З маленького, що я в це заглянув, це виглядає дуже чисто.


5
Він також має широкий набір тестів , що робить його навчальною моделлю для тестування програмного забезпечення.
Роберт Харві

Мені хотілося б, щоб він мав інтерфейс C ++: /
Матьє М.

5

Дональд Кнут написав дві програми, які допомогли йому набрати математичні формули у своїх книгах краще, ніж міг видавець.

Ці дві програми (у їх остаточній версії) були написані за допомогою грамотного програмування, що дозволило створити друковану, набрану версію вихідного коду, і вони були опубліковані як книги. Це просто найкращі документально підтверджені програми, які я коли-небудь читав!

  • "Комп'ютери та набір тексту, Том B: TeX: Програма"
  • "Комп'ютери та набір тексту, Том D: Метафонт: Програма"

Вони не доступні для читання в Інтернеті, але Amazon дозволяє вам також "заглянути всередину" книги Metafont за адресою http://www.amazon.com/Computers-Typesetting-D-Metafont-Program/dp/0201134381/

Попередження: Це важкі речі, тому кожна книга працює на 600 сторінках.


1
Примітка. Це версія набору , яка недоступна в Інтернеті. Джерело є повністю доступним, і його можна з невеликими зусиллями використовувати для створення друкованої версії.

4

Книга Beautiful Code намагається відповісти на це запитання кількома зразками того, що, як вважають учасники, є зразком прекрасного коду з проектів з відкритим кодом.
alt текст


4
Чи варто книгу перевірити?
Олівер Вайлер

Це не "реальний світ" з відкритим кодом у будь-якому сенсі. Ця відповідь обманює! : P
Нолдорін

1
Я ним володію, не був вражений. Більшість розділів нудні, але в ньому є кілька важливих моментів - карта / зменшення пояснюється, якщо я правильно пам’ятаю.
Мартін Вікман

4

CodeIgniter

Деякі з найчистіших, найкраще задокументованих вихідних кодів, які я бачив у проекті ОС.


1
php & найчистіший?
Кугель

1
@Kugel: Так для обох.
Джош К

Просто подивився джерело на CodeIgniter, і він справді здається дуже добре структурованим та чистим. Я думаю, як красиво у вас можна потрапити в php. :) І мені завжди сподобався гумор у вихідному коді: "// Ще не вказано БД? Побийте їх безглуздо ... if (! Isset ($ params ['dbdriver'])) ..."
Bjarke Freund-Hansen

2
У мене був швидкий погляд на вихідний код , і я повинен визнати , що це було добре документовані і легко слідувати, і я навіть не очікував від OS PHP.
OnesimusUnbound

2
Ще одна чудова рамка PHP для OS - це «топливо» ( fuelphp.com ), яке також задокументовано, чітко викладено та використовує правила іменування, які не змушують вас витягувати волосся. Це просто доводить, що не PHP винен у коді спагетті, зазвичай люди пишуть код.
Майкл СП

3

Я бачив 2 добре структуровані проекти:

  1. Джанго
  2. Хромовий проект

Тим більше, другий дуже цікавий на основі кількох речей:

  • Як він використовує процеси для багатьох речей (вкладки, плагіни) і як вони поєднуються разом
  • мультиплатформа з рідним графічним інтерфейсом для кожного Windows, Mac, Linux
  • інтеграція веб-набору

Також я чув, що Postgre написаний чисто (на відміну від MySql), але я сам не читав цього.


1
+1 для коду PostgreSQL. Він надзвичайно чистий і читабельний.
Дені де Бернарді,

2

Деякі кажуть, що код С для ядра Linux досить проклятий.

(Не те, що я розумію в цьому! Це, можливо, найкраще написаний проект C з відкритим кодом.)


1
Для оптимізованого коду це чудово. На мій досвід, читабельність не дуже гарна. Звичайно, я нічого не писав , просто читав ...
Майкл К

1
Так, правда. На жаль, питання насправді не визначало "найкраще", тому я беру власне визначення. :)
Нолдорін

2

Я знайшов вихідний код LLVM дуже читабельним. Я впевнений, що це найчистіший C ++, який я бачив. Якщо ви не знайомі з цим, це в основному інструментарій побудови компілятора.

  • Він має широкий набір тестів. Насправді, у нього є щонайменше два: один набір для тестування функцій і один для тестування продуктивності (як самого LLVM, так і компільованих програм, які він генерує).
  • Код добре коментується.
  • Високо повторюваний код (наприклад, відповідність інструкцій у різних пакетах) автоматично генерується з опису DSL вищого рівня (називається TableGen).
    • Це також дозволяє генерувати декілька невід'ємних фрагментів коду з одного опису. Наприклад, специфікація резервного сервера використовується як частина резервного пакета компілятора, а також для збирачів і розбиральників.
  • Має досить гарну документацію.

Хоча це досить великий проект, тому не сподівайтеся, що зможете швидко зрозуміти, як все працює. Але огляд на високому рівні повинен бути досить легким.


1

Це не величезний проект, але SubSonic ORM мені надзвичайно легко зламати. Це був перший реальний проект з відкритим кодом, який я зміг точно змінити, як мені потрібно. Більшість інших я, нарешті, дивився на джерело і стукав головою об стіну. У мене він частково підтримував PostgreSQL (ґрунтуючись на речі постачальника SQL Server) протягом декількох годин. Це найбільш добре організований проект, який я бачив досі ... хоча і не сказати, що я переглядав багато проектів з відкритим кодом.


0

Спочатку простий приклад: Код для системи обробки подій zope.event. Я використовував інші системи подій, які посилали події різним слухачам подій. Коли я побачив код zope.event, це був час facepalm, коли я зрозумів, як деякі речі можуть бути простими.

Він написаний Python, і ось код у повному обсязі:

subscribers = []

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

Щоб додати абонента, зробіть це:

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

Найкращий приклад KISS, який я бачив.

Тоді складніший приклад: Марсіанська база коду дуже приємна і проста для читання, навіть якщо вона використовує деякі розумні хаки Python. Те ж саме стосується більшості коду Grok, який побудований за допомогою Марсіана.


3
Я не розумію, що з цим кодом чудово. Я не знаю пітона, але тут я бачу лише просте використання шаблону спостерігачів, і більше нічого.
barjak

Ви порівнювали це з іншими системами подій? Для простоти візьміть ще один приклад Python: pypi.python.org/pypi/pyjon.events/1.1.1
Lennart Regebro

1
Красиво - я насправді написав щось дуже схоже на JavaScript. Я думаю, я розумний? ;)
Майкл К

Тільки тому, що є події, які набагато гірші, не означає, що це чудовий код. Я бачив саме цей код на тонах мов. І що ще важливіше, я бачив безпечні реалізації.
back2dos

@ back2dos: Це безпечний тип.
Леннарт Регебро

0

Поміркуйте, прочитавши цю книгу "Архітектура програм з відкритим кодом" . Це повинно дати вам критику, чому і як приймалися проектні рішення в проектах, про які йдеться в книзі.

Замість того, щоб шукати найкращого, яке може вам довго ухилятися, спробуйте і оцініть дизайн деяких проектів, можливо, поза рамками книги. Це може допомогти вам наростити успіхи цих проектів замість того, щоб повторювати свої помилки (або, як прийнято називати, винаходити колесо).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.