Qual è il miglior codice Open Source che tu abbia mai visto? [chiuso]


19

Parte del valore di Open Source è fornire un ottimo esempio di codice alle persone che iniziano con una nuova piattaforma o lingua.

Qual è il miglior codice Open Source che hai incontrato e perché ti piace la tua scelta? Qualsiasi linguaggio lo farà, ma sono particolarmente interessato ai migliori esempi di Objective-C che puoi sottolineare.

Ovviamente questa è una domanda a risposta aperta, quindi lascerò la domanda aperta per un po 'e vedremo che tipo di risposte otteniamo.

Grazie!

EDIT: per "meglio" stavo pensando a un codice che segue i modi di dire nella lingua o piattaforma specificata, oltre a includere le parti che rendono il codice "professionale" - buona documentazione, una suite di test, ecc. Codice conciso, ma preferibilmente non troppo intelligente è un codice molto conciso o chiacchierone.


4
Qualche definizione particolare di "migliore" in mente?

La tua domanda è un po 'ampia. Forse puoi modificarlo per essere più specifico e definire cosa significa "migliore" per te. La migliore interfaccia utente, la migliore app desktop / web / telefonica, la migliore concisione, il miglior codice visivamente accattivante?
Walter

+1 per una buona domanda. Ti suggerisco di potarlo su un linguaggio / tecnologia specifici. Il confronto tra C per Linux e Java per il driver del database è francamente un'idea incoerente.
Fanatic23,

Sarebbe molto utile per gli altri leggere la domanda se hai modificato quel chiarimento in essa. :)
Michael K,

Risposte:


14

Devo dire che dopo aver esaminato frammenti di codice open source nel corso degli anni, sono stato enormemente deluso da quasi tutto.

La principale irritazione per me è che di solito ci sono pochissimi commenti, spesso i soli commenti sono un lungo e legale avviso sul copyright.

Il kernel di Linux è un esempio in cui i file spesso non hanno nemmeno un commento in essi che dice a quale scopo servono (ad esempio il driver per XYZ mi direbbe almeno che sono nel posto giusto).

Sono venuto dalla programmazione commerciale e di difesa in cui gli standard di codifica richiedono commenti comprensibili sensibili non solo per dire cosa fa un'unità di codice, ma attraverso il codice ci devono essere blocchi di commenti che descrivono algoritmi, metodi, peculiarità, hack / cose intelligenti , tutto in modo che chiunque venga dopo possa guardare e capire RAPIDAMENTE ciò che viene fatto invece di scrutare minuziosamente il codice attuale.

Forse la morale è: dimmi cosa stai facendo, non farmi capire.

Non ho trovato NESSUN codice open source che funzioni bene. Per quanto riguarda la ricerca dell'open source come mezzo per apprendere buone pratiche di codifica, il mio consiglio itterico è: Non farlo.


Concordo sul fatto che i progetti open source sono spesso scarsamente commentati e scarsamente documentati. Ma sono tutti volontari. È difficile motivare i volontari a fare cose spiacevoli di solito senza la ricompensa che stanno cercando (status, social, ottenere grandi cose o fare ciò che amano).

@ pierre303 - Ho fondato e manutenuto NoRMproject.org, una delle cose principali che faccio è scrivere commenti quando scrivo il codice, e questo aiuta. Penso che i collaboratori lavoreranno sulle parti che i leader sottolineano. Nel caso di NoRM, si trattava di test, commenti e codice idiomatico (in c #). Penso che abbiamo una base di codice abbastanza professionale e gestibile per questo.
Andrew Theken,

Sono d'accordo che i commenti dovrebbero essere scritti mentre il codice viene scritto. (Lo faccio anche in tutto il mio codice, principalmente perché sono egoista e mi aiuta a scrivere una narrazione prima del blocco di codice - chiarisce nella mia mente cosa devo fare prima di farlo davvero.)
quick_now

Mi ricorda questa citazione divertente che una volta mi sono imbattuto in: "Se ho avuto difficoltà a scriverlo, dovrebbero avere difficoltà a leggerlo."
Denis de Bernardy,

+1, @quickly_now - pensi che il codice dovrebbe essere ben pianificato, ben testato e ora ben commentato! Su che tipo di pianeta pazzo stai vivendo?


5

Donald Knuth scrisse due programmi per aiutarlo a comporre le sue formule matematiche nei suoi libri meglio del suo editore.

Questi due programmi (nella loro versione finale) sono stati scritti usando Literate Programming che ha permesso di creare una versione stampata e composta del codice sorgente e sono stati pubblicati come libri. Questi sono semplicemente i migliori programmi documentati che abbia mai letto!

  • "Computer e composizione, volume B: TeX: il programma"
  • "Computer e composizione, volume D: Metafont: il programma"

Non sono disponibili per la lettura online, ma Amazon ti consente anche di "Guardare dentro" il libro Metafont su http://www.amazon.com/Computers-Typesetting-D-Metafont-Program/dp/0201134381/

Avvertenza: è roba pesante, motivo per cui ogni libro ha una durata di 600 pagine.


1
Nota: è la versione composta non disponibile online. La fonte è completamente disponibile e può - con un piccolo sforzo - essere utilizzata per generare la versione stampata.

4

Il libro Beautiful Code cerca di rispondere a questa domanda con diversi esempi di ciò che i partecipanti pensano siano esemplari di bellissimo codice da progetti open source.
testo alternativo


4
Vale la pena dare un'occhiata al libro?
Oliver Weiler,

Questo non è comunque un codice open source "mondo reale". Questa risposta è barare! : P
Noldorin,

1
Lo possiedo, non sono stato colpito. La maggior parte dei capitoli è noiosa, ma contiene alcuni punti salienti: la mappa / riduzione viene spiegata se ricordo bene.
Martin Wickman,

4

CodeIgniter

Alcuni dei codici sorgente più puliti e meglio documentati che ho visto da un progetto OS.


1
php e più pulito?
Kugel,

1
@Kugel: Sì a entrambi.
Josh K,

Ho appena dato un'occhiata alla fonte di CodeIgniter, e in effetti sembra molto ben strutturato e pulito. Penso che quanto tu possa essere bello in php. :) E mi è sempre piaciuto l'umorismo nel codice sorgente: "// Nessun DB ancora specificato? Battili insensati ... if (! Isset ($ params ['dbdriver']) ..."
Bjarke Freund-Hansen

2
Ho dato una sbirciatina al codice sorgente e devo ammettere che era ben documentato e facile da seguire, e non me lo aspettavo da un sistema operativo PHP.
Onesimus Nessun impegno specifico

2
Un altro ottimo framework per PHP del sistema operativo è fuelphp ( fuelphp.com ) che è anche documentato, strutturato in modo pulito e utilizza convenzioni di denominazione che non ti fanno strappare i capelli. Ciò dimostra che non è colpa di PHP per il codice spaghetti, di solito è la gente che scrive il codice.
Michael JV,

3

Ho visto 2 progetti molto ben strutturati:

  1. Django
  2. Progetto Chromium

In particolare, il secondo è molto interessante in base a poche cose:

  • Come utilizza i processi per molte cose (schede, plug-in) e come si adatta insieme
  • multipiattaforma con GUI nativa per ogni Windows, Mac, Linux
  • integrazione web-kit

Inoltre ho sentito che Postgre è scritto in modo pulito (al contrario di MySql), ma non l'ho letto da solo.


1
+1 per il codice PostgreSQL. È estremamente pulito e leggibile.
Denis de Bernardy,

2

Alcuni sostengono che il codice C per il kernel Linux sia dannatamente buono.

(Non che io capisca la cosa! È probabilmente il miglior progetto C open source scritto in circolazione.)


1
Per un codice ottimizzato è fantastico. Per la leggibilità non così buona, nella mia esperienza. Certo, non ne ho scritto nessuno, basta leggerlo ...
Michael K,

1
Si vero. Sfortunatamente la domanda non ha definito "il migliore", quindi sto prendendo la mia definizione. :)
Noldorin,

2

Ho trovato il codice sorgente LLVM molto leggibile. Sono abbastanza sicuro che sia il C ++ più pulito che abbia mai visto. Se non lo conosci, è fondamentalmente un toolkit di costruzione di compilatori.

  • Ha una vasta suite di test. Bene, in realtà ne ha almeno due: un set per testare le funzionalità e uno per testare le prestazioni (di LLVM stesso e dei programmi compilati che genera).
  • Il codice è ben commentato.
  • Il codice altamente ripetitivo (come la corrispondenza delle istruzioni nei vari backend) viene generato automaticamente da una descrizione DSL di livello superiore (chiamata TableGen).
    • Ciò consente anche di generare più pezzi di codice disgiunti dalla stessa descrizione. Ad esempio, la specifica del back-end viene utilizzata come parte di un back-end del compilatore, ma anche per assemblatori e disassemblatori.
  • Ha una documentazione abbastanza buona.

È un progetto piuttosto grande, quindi non aspettarti di essere in grado di capire rapidamente come funziona tutto. Ma dovrebbe essere abbastanza facile ottenere una panoramica di alto livello.


1

Non è un grande progetto, ma il SubSonic ORM è stato estremamente facile da hackerare. È stato il primo vero progetto open source che sono stato in grado di modificare esattamente come mi serviva. La maggior parte degli altri ho finito per guardare la fonte e sbattere la testa contro un muro. L'ho avuto parzialmente supportando PostgreSQL (basandolo sulla cosa del provider SQL Server) entro poche ore. È il progetto più ben organizzato che abbia mai visto ... anche se non per dire che ho visto molti progetti open source.


0

Innanzitutto un semplice esempio: il codice per il sistema di gestione degli eventi zope.event. Avevo usato altri sistemi di eventi, che inviavano eventi a diversi ascoltatori di eventi. Quando ho visto il codice zope.event era il momento di facepalm, quando ho capito quanto potevano essere semplici alcune cose.

È scritto in Python, ed ecco il codice nella sua interezza:

subscribers = []

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

Per aggiungere un abbonato, procedere come segue:

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

Il miglior esempio di KISS che ho visto.

Quindi un esempio più complesso: la base di codice marziano è molto bella e facile da leggere, anche se sta usando alcuni hack intelligenti di Python. Lo stesso vale per la maggior parte del codice di Grok, che viene creato utilizzando Martian.


3
Non capisco cosa è fantastico con questo codice. Non conosco Python, ma posso vedere solo un semplice uso del modello di osservatore qui, e nient'altro.
Barjak,

L'hai confrontato con altri sistemi di eventi? Per semplicità, prendi un altro esempio di Python: pypi.python.org/pypi/pyjon.events/1.1.1
Lennart Regebro,

1
Bello - In realtà ho scritto qualcosa di molto simile in JavaScript. Immagino di essere intelligente? ;)
Michael K,

Solo perché ci sono sistemi di eventi che sono molto peggio, non significa che questo sia un ottimo codice. Ho visto esattamente questo codice in tonnellate di lingue. E, soprattutto, ho visto implementazioni sicure di tipo.
back2dos,

@ back2dos: questo è sicuro.
Lennart Regebro,

0

Considera di leggere questo libro The Architecture of Open Source Applications . Dovrebbe darti una critica del perché e del modo in cui le decisioni di progettazione sono state prese nei progetti discussi nel libro.

Invece di cercare il meglio, che può sfuggirti a lungo, prova ad apprezzare il design di alcuni progetti, forse oltre lo scopo del libro. Ciò potrebbe aiutarti a sfruttare i successi di questi progetti invece di ripetere i loro errori (o, come viene comunemente chiamato, reinventare la ruota).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.