From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.help Subject: Re: Closures - do you understand them well? Date: Thu, 02 Mar 2023 19:50:14 +0100 Message-ID: <87ttz3dm3d.fsf@dataswamp.org> References: <87h6y5pt8k.fsf@web.de> <87bkodpqnk.fsf@web.de> <87k030tlfh.fsf@web.de> <87ilike1l8.fsf@gnu.org> <87cz8suv92.fsf@dataswamp.org> <87pmcpo1wz.fsf@web.de> <87pmcpm9vn.fsf@web.de> <87sfg8xcps.fsf@dataswamp.org> <87h6wmacdn.fsf@web.de> <87v8krlo9q.fsf@dataswamp.org> <875ycrsd2c.fsf@web.de> <87ilfowq63.fsf@dataswamp.org> <877cw2yu6a.fsf@web.de> <87y1ofcsvy.fsf@web.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34679"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:QlePyGu9aKEdtEfjh8pN2RuIOBk= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Thu Mar 02 22:32:18 2023 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pXqXC-0008kl-1X for geh-help-gnu-emacs@m.gmane-mx.org; Thu, 02 Mar 2023 22:32:18 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pXqX2-0003r0-4y; Thu, 02 Mar 2023 16:32:09 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pXo0y-00017e-7U for help-gnu-emacs@gnu.org; Thu, 02 Mar 2023 13:50:52 -0500 Original-Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pXo0o-0006Y0-IS for help-gnu-emacs@gnu.org; Thu, 02 Mar 2023 13:50:44 -0500 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1pXo0b-0005EE-4o for help-gnu-emacs@gnu.org; Thu, 02 Mar 2023 19:50:29 +0100 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: help-gnu-emacs@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 02 Mar 2023 16:32:01 -0500 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.help:142898 Archived-At: Michael Heerdegen wrote: > Maybe I should mention oclosures where you can access > variables with accessor functions "from the outside". > But this is also a high-level thing, the internal structure > of oclosures is not important and an implementation like for > "normal" function values. Here is the abstract: While folklore teaches us that closures and objects are two sides of the same coin, they remain quite different in practice, most notably because closures are opaque, the only supported operation being to call them. In this article we discuss a few cases where we need functions to be less opaque, and propose to satisfy this need by extending our beloved 𝜆 so as to expose as sorts of record fields some of the variables it captures. These open closures are close relatives of CLOS’s funcallable objects as well as of the function objects of traditional object-oriented languages like Java, except that they are functions made to behave like objects rather than the reverse. We present the design and implementation of such a feature in the context of Emacs Lisp. [1] There is a list of use case, they seem to have a lot to do with really specific situations and fringe cases were one would previous hack one's way thru it each time, and not rely on ideomatic, clean code, so now with oclosures that's much easier. Good, but if so it's maybe nothing indispensible for the Joe Emacs Hacker, whereas the top-level lexical let-closures are one or two small steps forward with the three use cases I have identified (no/less global varaibles, share variables between functions, preserved variable values between function calls). But I'm all for the esoteric stuff as well so it's all good. [1] https://www.iro.umontreal.ca/~monnier/oclosure.pdf -- underground experts united https://dataswamp.org/~incal