Quel est le meilleur code Open Source que vous ayez jamais vu? [fermé]


19

Une partie de la valeur de l'Open Source est de fournir un excellent exemple de code aux personnes qui commencent avec une nouvelle plate-forme ou un nouveau langage.

Quel est le meilleur code Open Source que vous ayez rencontré, et pourquoi aimez-vous votre choix? N'importe quel langage fera l'affaire, mais je suis particulièrement intéressé par les meilleurs exemples d'Objective-C que vous pouvez signaler.

De toute évidence, il s'agit d'une question ouverte, je vais donc laisser la question ouverte pendant un certain temps et voir quels types de réponses nous obtenons.

Merci!

EDIT: Pour "le meilleur", je pensais à du code qui suit les idiomes dans le langage ou la plate-forme donnée, ainsi qu'à inclure les parties qui rendent le code "professionnel" - une bonne documentation, une suite de tests, etc. Code qui est concis, mais pas trop intelligent est préféré au code très laconique ou bavard.


4
Une définition particulière du «meilleur» à l'esprit?

Votre question est un peu large. Vous pouvez peut-être le modifier pour être plus précis et définir ce que "le meilleur" signifie pour vous. Meilleure interface utilisateur, meilleure application de bureau / Web / téléphone, meilleure concordance, meilleur code visuellement attrayant?
Walter

+1 pour une bonne question. Je vous suggère de le tailler à un langage / une technologie spécifique. Comparer C pour Linux contre Java pour le pilote de base de données est franchement une idée incohérente.
Fanatic23

Il serait très utile à d'autres personnes de lire la question si vous y apportiez des modifications. :)
Michael K

Réponses:


14

Je dois dire que, après avoir examiné des morceaux de code open source au fil des ans, j'ai été extrêmement déçu de presque tout cela.

L'irritation principale pour moi est qu'il y a généralement très peu de commentaires, souvent les seuls commentaires sont des avis de droit d'auteur longs et légalistes.

Le noyau Linux est un exemple où les fichiers n'ont souvent même pas de commentaire indiquant à quoi ils servent (par exemple, le pilote pour XYZ me dirait au moins que je suis à peu près au bon endroit).

Je viens de la programmation commerciale et de la défense où les normes de codage nécessitent des commentaires intelligibles sensibles non seulement pour dire ce que fait une unité de code, mais tout au long du code, il doit y avoir des blocs de commentaires qui décrivent des algorithmes, des méthodes, des particularités, des hacks / des choses intelligentes , tout cela pour que celui qui vient après puisse regarder et comprendre RAPIDEMENT ce qui se fait plutôt qu'en parcourant minutieusement le code réel.

Peut-être que la morale est: dites-moi ce que vous faites, ne me faites pas le comprendre.

Je n'ai trouvé AUCUN code open source qui fait cela bien. En ce qui concerne l'open source comme moyen d'apprendre de bonnes pratiques de codage, mon conseil ictère est le suivant: ne le faites pas.


Je conviens que les projets open source sont souvent mal commentés et mal documentés. Mais ce sont tous des bénévoles. Il est difficile de motiver les bénévoles à faire des choses désagréables généralement sans la récompense qu'ils recherchent (statut, social, réaliser de grandes choses ou faire ce qu'ils aiment).

@ pierre303 - J'ai fondé et maintiens NoRMproject.org, L'une des principales choses que je fais est d'écrire des commentaires lorsque j'écris le code, et cela aide. Je pense que les contributeurs travailleront sur les parties sur lesquelles les dirigeants insistent. Dans le cas de NoRM, il s'agissait du code Tests, Commentaires et Idiomatique (en c #). Je pense que nous avons une base de code assez professionnelle et maintenable à cause de cela.
Andrew Theken

Je suis d'accord que les commentaires doivent être écrits pendant que le code est en cours d'écriture. (Je le fais aussi dans tout mon propre code, principalement parce que je suis égoïste et cela m'aide à écrire un récit avant le bloc de code - il clarifie dans mon esprit ce que je dois faire avant de le faire.)
quick_now

Cela me rappelle cette citation amusante que j'ai rencontrée une fois: "Si j'avais du mal à l'écrire, ils devraient avoir du mal à la lire."
Denis de Bernardy

+1, @quickly_now - vous pensez que le code doit être bien planifié, bien testé et maintenant bien commenté! Sur quel genre de planète folle vivez-vous?


5

Donald Knuth a écrit deux programmes pour l'aider à mieux composer ses formules mathématiques dans ses livres que son éditeur ne le pourrait.

Ces deux programmes (dans leur version finale) ont été écrits en utilisant Literate Programming qui a permis de créer une version imprimée et typée du code source, et ils ont été publiés sous forme de livres. Ce sont simplement les programmes les mieux documentés que j'ai jamais lus!

  • "Ordinateurs et composition, Volume B: TeX: le programme"
  • "Ordinateurs et composition, Volume D: Metafont: le programme"

Ils ne sont pas disponibles pour la lecture en ligne, mais Amazon vous permet également de "regarder à l'intérieur" du livre Metafont sur http://www.amazon.com/Computers-Typesetting-D-Metafont-Program/dp/0201134381/

Attention: c'est un truc lourd, c'est pourquoi chaque livre fait 600 pages.


1
Remarque: c'est la version de composition qui n'est pas disponible en ligne. La source est entièrement disponible et peut - avec un petit effort - être utilisée pour générer la version imprimée.

4

Le livre Beautiful Code essaie de répondre à cette question avec plusieurs exemples de ce que les contributeurs pensent être des exemples de beau code de projets open source.
texte alternatif


4
Le livre vaut-il la peine d'être vérifié?
Oliver Weiler

Ce n'est cependant pas du code open source "du monde réel". Cette réponse est de la triche! : P
Noldorin

1
Je le possède, je n'ai pas été impressionné. La plupart des chapitres sont ennuyeux, mais il y a quelques points saillants - map / réduire est expliqué si je me souviens bien.
Martin Wickman

4

CodeIgniter

Certains des codes sources les plus propres et les mieux documentés que j'ai vus d'un projet de système d'exploitation.


1
php et le plus propre?
Kugel

1
@Kugel: Oui aux deux.
Josh K

Je viens de jeter un œil à la source de CodeIgniter, et il semble en effet très bien structuré et propre. Je pense que vous pouvez être aussi beau en php. :) Et j'ai toujours aimé l'humour dans le code source: "// Pas encore de DB spécifié? Battez-les insensés ... if (! Isset ($ params ['dbdriver'])) ..."
Bjarke Freund-Hansen

2
J'ai jeté un œil au code source et je dois admettre qu'il était bien documenté et facile à suivre, et je ne m'y attendais pas d'un OS PHP.
OnesimusUnbound

2
Un autre excellent framework PHP OS est fuelphp ( fuelphp.com ) qui est également documenté, présenté clairement et utilise des conventions de dénomination qui ne vous font pas vous arracher les cheveux. Cela prouve simplement que ce n'est pas PHP à blâmer pour le code spaghetti, ce sont généralement les personnes qui écrivent le code.
Michael JV

3

J'ai vu 2 projets très bien structurés:

  1. Django
  2. Projet Chrome

Surtout, le second est très intéressant sur la base de quelques éléments:

  • Comment il utilise les processus pour de nombreuses choses (onglets, plug-ins) et comment ils s'emboîtent
  • multiplateforme avec interface graphique native pour chaque Windows, Mac, Linux
  • intégration de kit Web

J'ai également entendu que Postgre est écrit proprement (par opposition à MySql), mais je ne l'ai pas lu moi-même.


1
+1 pour le code PostgreSQL. C'est extrêmement propre et lisible.
Denis de Bernardy

2

Certains disent que le code C pour le noyau Linux est plutôt bon.

(Pas que je comprenne la chose! C'est peut-être le meilleur projet C open-source écrit.)


1
Pour du code optimisé, c'est génial. Pour une lisibilité pas si bonne, d'après mon expérience. Bien sûr, je n'en ai pas écrit , il suffit de le lire ...
Michael K

1
Ouais vrai. Malheureusement, la question n'a pas vraiment défini le «meilleur», donc je prends ma propre définition. :)
Noldorin

2

J'ai trouvé le code source LLVM très lisible. Je suis sûr que c'est le C ++ le plus propre que j'ai vu. Si vous ne le connaissez pas, il s'agit essentiellement d'une boîte à outils de construction de compilateur.

  • Il dispose d'une vaste suite de tests. Eh bien, en fait, il en a au moins deux: un ensemble pour tester les fonctionnalités et un pour tester les performances (de LLVM lui-même ainsi que des programmes compilés qu'il génère).
  • Le code est bien commenté.
  • Le code hautement répétitif (tel que la correspondance d'instructions dans les différents backends) est généré automatiquement à partir d'une description DSL de niveau supérieur (appelée TableGen).
    • Cela permet également de générer plusieurs morceaux de code disjoints à partir de la même description. Par exemple, la spécification de backend est utilisée dans le cadre d'un backend de compilateur, mais aussi pour les assembleurs et les désassembleurs.
  • Il a une assez bonne documentation.

C'est un projet assez important, alors ne vous attendez pas à pouvoir comprendre rapidement comment tout fonctionne. Mais il devrait être assez facile d'obtenir une vue d'ensemble de haut niveau.


1

Ce n'est pas un projet énorme, mais l' ORM SubSonic a été extrêmement facile à pirater. C'était le premier vrai projet open source dont j'ai pu modifier exactement la façon dont j'avais besoin. La plupart des autres, j'ai fini par regarder la source et me cogner la tête contre un mur. Je l'avais partiellement pris en charge PostgreSQL (en le basant sur le fournisseur SQL Server) en quelques heures. C'est le projet le mieux organisé que j'aie jamais vu ... mais cela ne veut pas dire que j'ai regardé beaucoup de projets open source.


0

D'abord un exemple simple: le code du système de gestion d'événements zope.event. J'avais utilisé d'autres systèmes d'événements, qui envoyaient des événements à différents écouteurs d'événements. Quand j'ai vu le code zope.event, c'était le temps de facepalm, quand j'ai réalisé à quel point certaines choses pouvaient être simples.

Il est écrit en Python, et voici le code dans son intégralité:

subscribers = []

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

Pour ajouter un abonné, procédez comme suit:

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

Le meilleur exemple de KISS que j'ai vu.

Ensuite, un exemple plus complexe: la base de code martienne est très agréable et facile à lire, même si elle utilise des hacks Python intelligents. Il en va de même pour la plupart du code de Grok, qui est construit en utilisant Martian.


3
Je ne comprends pas ce qui est génial avec ce code. Je ne connais pas python, mais je ne peux voir ici qu'une simple utilisation du modèle d'observateur, et rien d'autre.
barjak

L'avez-vous comparé à d'autres systèmes d'événements? Pour plus de simplicité, prenez un autre exemple Python: pypi.python.org/pypi/pyjon.events/1.1.1
Lennart Regebro

1
Magnifique - j'ai en fait écrit quelque chose de très similaire en javascript. Je suppose que je suis intelligent? ;)
Michael K

Ce n'est pas parce qu'il y a des systèmes d'événements bien pires que c'est un excellent code. J'ai vu exactement ce code dans des tonnes de langues. Et plus important encore, j'ai vu des implémentations sûres de type.
back2dos

@ back2dos: il s'agit d'un type sûr.
Lennart Regebro

0

Pensez à lire ce livre L'architecture des applications Open Source . Il devrait vous donner une critique de pourquoi et comment les décisions de conception ont été prises dans les projets qui sont discutés dans le livre.

Au lieu de chercher le meilleur, qui peut vous échapper longtemps, essayez d'apprécier la conception de certains projets, peut-être au-delà de la portée du livre. Cela pourrait vous aider à bâtir sur les succès de ces projets au lieu de répéter leurs erreurs (ou, comme on dit communément, réinventer la roue).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.