Какой лучший код с открытым исходным кодом вы когда-либо видели? [закрыто]


19

Частью ценности Open Source является предоставление отличного примера кода людям, начинающим работать с новой платформой или языком.

Какой лучший код с открытым исходным кодом вы встречали, и почему вам нравится ваш выбор? Подойдет любой язык, но мне особенно интересны лучшие примеры Objective-C, на которые вы можете указать.

Очевидно, что это открытый вопрос, поэтому я оставлю вопрос на некоторое время открытым и посмотрю, какие ответы мы получим.

Благодарность!

РЕДАКТИРОВАТЬ: Для «лучшего» я ​​думал о коде, который следует идиомам в данном языке или платформе, а также о частях, которые делают код «профессиональным» - хорошая документация, набор для тестирования и т. Д. Код, который является кратким, но не слишком умный предпочтительнее, чем очень краткий или болтливый код.


4
Любое конкретное определение «лучших» в виду?

Ваш вопрос немного широк. Возможно, вы можете отредактировать его, чтобы он был более конкретным и определил, что для вас значит «лучший». Лучший пользовательский интерфейс, лучшее приложение для рабочего стола / веб / телефон, лучшее соответствие, лучший визуально привлекательный код?
Уолтер

+1 за хороший вопрос. Я предлагаю вам сократить его до определенного языка / технологии. Сравнение C для Linux и Java для драйвера базы данных - откровенно противоречивая идея.
Fanatic23

Другим было бы очень полезно прочитать этот вопрос, если бы вы внесли в него это разъяснение. :)
Майкл К

Ответы:


14

Я должен сказать, что, взглянув на кусочки открытого исходного кода на протяжении многих лет, я был сильно разочарован почти всем этим.

Главное раздражение для меня - это то, что комментариев обычно очень мало, часто единственными комментариями являются некоторые длинные и законные уведомления об авторских правах.

Ядро linux является примером, в котором файлы часто даже не содержат комментариев, в которых говорится, для какой цели они служат (например, драйвер для XYZ, по крайней мере, скажет мне, что я нахожусь примерно в нужном месте).

Я пришел из коммерческого и оборонного программирования, где стандарты кодирования требуют разумных вразумительных комментариев не только для того, чтобы сказать, что делает блок кода, но и во всем коде должны быть блоки комментариев, которые описывают алгоритмы, методы, особенности, хаки / умные вещи все так, чтобы любой, кто придет, мог БЫСТРО взглянуть и понять, что делается, а не кропотливо пробираться сквозь реальный код.

Возможно, мораль такова: скажи мне, что ты делаешь, не заставляй меня это понимать.

Я не нашел ЛЮБОГО открытого исходного кода, который делает это хорошо. Что касается использования открытого исходного кода в качестве средства для изучения хороших практик кодирования, мой предвзятый совет: не надо.


Я согласен, что проекты с открытым исходным кодом часто плохо комментируются и плохо документируются. Но все они добровольцы. Трудно мотивировать добровольцев делать неприятные вещи, обычно без награды, которую они ищут (статус, общение, достижение великих дел или то, что они любят).

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

Я согласен, что комментарии должны быть написаны в процессе написания кода. (Я также делаю это во всем моем собственном коде, в основном потому , что я эгоист , и это помогает мне написать рассказ перед блоком кода -. Уточняются в моем собственном уме , что мне нужно сделать , прежде чем я на самом деле сделать это)
fast_now

Напоминает мне эту забавную цитату, которую я однажды наткнулся на: «Если бы мне было трудно писать это, им было бы трудно это прочитать».
Дени де Бернарди

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

5

Я слышал очень хорошие вещи о базе кода Sqlite .

Из того маленького, который я изучил, все выглядит очень чисто.


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

Я только хотел бы, чтобы у него был интерфейс C ++: /
Матье М.

5

Дональд Кнут написал две программы, которые помогли ему набирать математические формулы в своих книгах лучше, чем мог его издатель.

Эти две программы (в их окончательной версии) были написаны с использованием Literate Programming, что позволило создать печатную, набранную версию исходного кода, и они были опубликованы в виде книг. Это просто лучшие документированные программы, которые я когда-либо читал!

  • "Компьютеры и набор текста, том B: TeX: программа"
  • «Компьютеры и набор текста, том D: Метафонт: программа»

Они недоступны для онлайн-чтения, но Amazon также позволяет вам «заглянуть внутрь» книги Metafont по адресу http://www.amazon.com/Computers-Typesetting-D-Metafont-Program/dp/0201134381/.

Предупреждение: это тяжелый материал, поэтому каждая книга занимает 600 страниц.


1
Примечание. Это версия с набором текста, которая недоступна в Интернете. Источник полностью доступен и может - с небольшими усилиями - использоваться для создания печатной версии.

4

Книга Beautiful Code пытается ответить на этот вопрос несколькими примерами того, что авторы считают образцами красивого кода из проектов с открытым исходным кодом.
альтернативный текст


4
Книга стоит проверить?
Оливер Вейлер

Хотя это не открытый код в реальном мире. Этот ответ обманывает! : P
Нолдорин

1
Я владею им, не впечатлен. Большинство глав скучны, но в них есть несколько основных моментов - карта / уменьшение объясняется, если я правильно помню.
Мартин Уикман,

4

CodeIgniter

Некоторые из самых чистых, лучше всего документированных исходных кодов, которые я видел в проекте ОС.


1
php & cleanest?
Кугель

1
@ Кугель: Да, обоим.
Джош К

Просто взглянул на исходный код CodeIgniter, и он действительно выглядит очень хорошо структурированным и чистым. Я думаю как красиво у тебя может попасть в php. :) И мне всегда нравился юмор в исходном коде: "// БД еще не определена? Бить их бессмысленно ... if (! Isset ($ params ['dbdriver']) ..."
Бьярке Фрейнд-Хансен

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

2
Еще одна отличная платформа PHP для ОС - это Fuelphp ( fuelphp.com ), который также задокументирован, аккуратно изложен и использует соглашения об именах, которые не заставляют вас задуматься. Это просто доказывает, что не PHP обвиняют в спагетти-коде, обычно это люди, которые пишут код.
Майкл СП

3

Я видел 2 проекта, которые очень хорошо структурированы:

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

Тем более, что второй очень интересный, основанный на нескольких вещах:

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

Также я слышал, что Postgre написан чисто (в отличие от MySql), но я сам не читал.


1
+1 за код PostgreSQL. Это очень чистый и читаемый.
Дени де Бернарди

2

Некоторые говорят, что код C для ядра Linux чертовски хорош.

(Не то, чтобы я это понимал! Возможно, это лучший из всех написанных проектов с открытым исходным кодом.)


1
Для оптимизированного кода это здорово. Для читабельности не так хорошо, по моему опыту. Конечно, я не написал ни одного, просто прочитал это ...
Майкл К

1
Да, верно. К сожалению, вопрос на самом деле не определил «лучший», поэтому я беру свое собственное определение. :)
Нолдорин

2

Я обнаружил, что исходный код LLVM очень удобен для чтения. Я уверен, что это самый чистый C ++, который я когда-либо видел. Если вы не знакомы с ним, это в основном набор инструментов для компиляции.

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

Это довольно большой проект, поэтому не ожидайте, что сможете быстро понять, как все работает. Но получить обзор высокого уровня довольно просто.


1

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


0

Сначала простой пример: код для системы обработки событий zope.event. Я использовал другие системы событий, которые отправляли события различным слушателям событий. Когда я увидел код zope.event, пришло время, когда я понял, насколько простыми могут быть некоторые вещи.

Он написан на Python, и вот код целиком:

subscribers = []

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

Чтобы добавить подписчика, вы делаете это:

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

Лучший пример поцелуя, который я видел.

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


3
Я не понимаю, что хорошо с этим кодом. Я не знаю Python, но я вижу только простое использование паттерна наблюдателя здесь и ничего больше.
Барджак

Вы сравнили это с другими системами событий? Для простоты возьмем другой пример Python: pypi.python.org/pypi/pyjon.events/1.1.1
Леннарт Регевро,

1
Прекрасно - на самом деле я написал что-то очень похожее на javascript. Я думаю, что я умный? ;)
Майкл К

То, что есть системы событий, которые намного хуже, не означает, что это отличный код. Я видел именно этот код на тоннах языков. И что более важно, я видел безопасные реализации типов.
back2dos

@ back2dos: это безопасный тип.
Леннарт Регебро

0

Вы можете прочитать эту книгу «Архитектура приложений с открытым исходным кодом» . Это должно дать вам критику того, почему и как проектные решения были приняты в проектах, которые обсуждаются в книге.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.