2009-02-01 9 views
11

La programmation fonctionnelle .. est comme classique (Mark Twain's type). En lisant un autre des articles sur SICP, où les gens parlent de les grandes fermetures d'impact avaient là-bas la pensée, je me suis souvenu de cela, que j'ai lu les âges il y afermetures et objets

Closures sont les objets de l'homme pauvre objets sont la fermeture de l'homme pauvre

(ne peut pas rappeler la source exacte, mais il a été programmeurs pierre rosetta, ou zen de la programmation, ou tau de la programmation ... Google est devenu tellement de monde qui ne peut pas aller à la source originale)

donc co-programmeurs ... Quelle est votre prise ... sont fermeture quelque chose que vous avez toujours manqué .. ou juste un peu de sucre syntaxique, qu'un préprocesseur peut faire !!

Répondre

18

http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03277.html

Le vénérable maître Qc Na se promenait avec son élève, Anton. Espérant inviter le maître dans une discussion, Anton a dit "Maître, j'ai entendu dire que objets sont une très bonne chose - est-ce vrai?" Qc Na a regardé avec pitié son étudiant et a répondu: "Les élèves stupides - les objets ne sont que des fermetures d'un homme pauvre." Chassé, Anton prit congé de son maître et retourna dans sa cellule, , dans l'intention d'étudier les fermetures. Il a lu attentivement toute la série de documents "Lambda: The Ultimate ..." et ses cousins, et a implémenté un petit interpréteur Scheme avec un système d'objets basé sur la fermeture. Il a beaucoup appris, et attendait avec impatience d'informer son maître de ses progrès.

Sur sa prochaine promenade avec Qc Na, Anton a tenté d'impressionner son maître en disant « Maître, j'ai étudié avec diligence la question, et maintenant comprendre que les objets sont vraiment les fermetures d'un pauvre homme. » Qc Na a répondu en frappant Anton avec son bâton, en disant "Quand allez-vous apprendre? Les fermetures sont l'objet d'un homme pauvre." À ce moment, Anton est devenu éclairé.

- Anton van Straaten

+1

Est-ce la source originale de la citation ou juste une autre citation? – AnthonyWJones

+0

Le message lié est la source originale de ce koan particulier. Il est apparu en réponse à une discussion sur la dualité fermeture/objet, de sorte que cette notion existe depuis plus longtemps que ce récit particulier. Suivez le lien pour plus de détails. – bendin

+0

Qu'est-ce qu'un rappel 'Qc Na' /' Anton'? J'ai regardé autour de moi, la recherche de ces termes ne fait apparaître que des références au koan lui-même. –

3

Les fermetures sont beaucoup plus que le sucre syntactique, bien que je pense que cela dépend un peu de votre définition de «sucre syntaxique». Pour moi, Java 1.5 pour chacun était du sucre syntaxique, mais, par exemple, les blocs Ruby vont bien au-delà. Les fermetures fournissent un niveau d'abstraction pratique, ce qui est utile pour la déclaration implicite d'intention - un grand pas vers la syntaxe DSL-ish.

4

Je me sers de la fermeture depuis longtemps en Javascript. Parfois, ils forment un «objet», d'autres fois ils sont un moyen utile de fournir des données d'instance à un rappel. En ce qui me concerne, ils sont un autre outil utile dans la boîte, mais il va au-delà du sucre. Le sucre se rapporte à quelque chose que vous pourriez raisonnablement faire avec une autre syntaxe un peu plus compliquée. Acheiving fermures dans une langue qui ne les supporte pas directement serait très difficile.

+0

Pire encore, l'implémentation de la fonctionnalité fournie par les fermetures dans un langage qui ne les supporte pas directement masquera vos intentions partout où il est utilisé. Ils * sont * sucre; mais quand vous faites des bonbons rock, vous ne devez pas négliger l'importance du sucre ... – Shog9

+0

@ Shog9: Je suis complètement d'accord avec votre première phrase. Je ne sais pas si je suis d'accord ou pas avec le second car je trouve cela difficile à comprendre. – AnthonyWJones

+3

Désolé, je finis par couper trop quand je suis limité à 300chars. Le bonbon de roche est simplement du sucre cristallisé; Si vous n'aimez pas le sucre, ça ne sert à rien. Beaucoup de constructions de programmation de haut niveau - des fermetures, des objets - sont simplement des outils pour communiquer avec d'autres programmeurs - du sucre. Nous écrivons rock candy. – Shog9

3

Les fermetures et les blocs anonymes sont des constructions de programmation assez importantes et je rencontre rapidement le manque en Java, C++, C, et à propos de tout autre langage qui leur manque. Ils sont particulièrement utiles avec les choses asynchrones et les événements. Ils rendent également les fonctions de prise de fonctions plus agréables à utiliser et offrent des choix pour faire plus de choses sans syntaxe supplémentaire. (voir: smalltalk et scheme)

+0

Les délégués et les lambdas de C# c ne le couvrent-ils pas assez bien? – krosenvold

+0

Les délégués semblent être une caractéristique intéressante. Je dépose le C# de la liste. – Cheery

+0

@Cherry: pourquoi laissez-vous tomber C# de la liste? – AnthonyWJones

2

Les fermetures sont comme des objets dans les langages OO. Mais les langages fonctionnels manquent de sous-typage et d'héritage.

+1

Vous les connaissez tous, n'est-ce pas? – Ingo