From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: [Emacs-diffs] /srv/bzr/emacs/trunk r109327: Generalize INTERNAL_FIELD between buffers, keyboards and frames. Date: Fri, 03 Aug 2012 11:58:21 -0700 Organization: UCLA Computer Science Department Message-ID: <501C1F4D.5010007@cs.ucla.edu> References: <50191B54.2070705@yandex.ru> <5019FE2D.2060005@yandex.ru> <501B8C48.3000704@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Trace: dough.gmane.org 1344020315 24896 80.91.229.3 (3 Aug 2012 18:58:35 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 3 Aug 2012 18:58:35 +0000 (UTC) Cc: Stefan Monnier , emacs-devel@gnu.org To: Dmitry Antipov Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Aug 03 20:58:35 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SxN50-0006a1-JC for ged-emacs-devel@m.gmane.org; Fri, 03 Aug 2012 20:58:34 +0200 Original-Received: from localhost ([::1]:47256 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SxN50-0004a6-1T for ged-emacs-devel@m.gmane.org; Fri, 03 Aug 2012 14:58:34 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:57592) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SxN4x-0004Zv-1O for emacs-devel@gnu.org; Fri, 03 Aug 2012 14:58:32 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SxN4v-0003Hc-7T for emacs-devel@gnu.org; Fri, 03 Aug 2012 14:58:30 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:41518) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SxN4v-0003Fg-2Y for emacs-devel@gnu.org; Fri, 03 Aug 2012 14:58:29 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 1D94B39E8018; Fri, 3 Aug 2012 11:58:21 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8FkUdUPosTms; Fri, 3 Aug 2012 11:58:20 -0700 (PDT) Original-Received: from [192.168.1.4] (pool-108-23-119-2.lsanca.fios.verizon.net [108.23.119.2]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id A3E1439E8008; Fri, 3 Aug 2012 11:58:20 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20120714 Thunderbird/14.0 In-Reply-To: <501B8C48.3000704@yandex.ru> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 131.179.128.62 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:152149 Archived-At: On 08/03/2012 01:31 AM, Dmitry Antipov wrote: > why (F|W)VARs are so bad but (B|K)VARs are OK? The short answer is they're all bad. :-) FVAR is bad partly because it has the syntax of a C function, but not the semantics; it cannot be implemented as a function. How about if we compromise by switching to functional notation? That should be easier to read. That is, instead of this: return XFRAME (frame)->buffer_list; or this: return FVAR (XFRAME (frame), buffer_list); we write this: return frame_buffer_list (XFRAME (frame)); Also, instead instead of this: f->buffer_list = Fcons (buf, Qnil); or this: FVAR (f, buffer_list) = Fcons (buf, Qnil); we write this: set_frame_buffer_list (f, Fcons (buf, Qnil)); We needn't use capital letters for the functions, since they can be implemented as true functions (inline, so that the code is just as fast as before). This will help readability too. Doing this will give us the opportunity to instrument all accesses to the buffer_list member of frames. It's a bit more complicated in the .h file, but it makes the rest of the code easier to read than FVAR does. Similarly for WVAR, etc.