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] trunk r114450: * dispnew.c (clear_glyph_row, copy_row_except_pointers): Date: Tue, 24 Sep 2013 08:26:24 -0700 Organization: UCLA Computer Science Department Message-ID: <5241AF20.7050802@cs.ucla.edu> References: <52417ADE.70007@dancol.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1380036402 16926 80.91.229.3 (24 Sep 2013 15:26:42 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 24 Sep 2013 15:26:42 +0000 (UTC) To: Daniel Colascione , emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Sep 24 17:26:45 2013 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 1VOUVh-0006Ge-5D for ged-emacs-devel@m.gmane.org; Tue, 24 Sep 2013 17:26:45 +0200 Original-Received: from localhost ([::1]:46646 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VOUVg-0001ux-Li for ged-emacs-devel@m.gmane.org; Tue, 24 Sep 2013 11:26:44 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:51945) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VOUVW-0001tp-Sj for emacs-devel@gnu.org; Tue, 24 Sep 2013 11:26:42 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VOUVP-0006nk-IU for emacs-devel@gnu.org; Tue, 24 Sep 2013 11:26:34 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:38907) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VOUVP-0006nU-CI for emacs-devel@gnu.org; Tue, 24 Sep 2013 11:26:27 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id ECAEB39E8108; Tue, 24 Sep 2013 08:26:25 -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 2hNgZVqnLyD3; Tue, 24 Sep 2013 08:26:25 -0700 (PDT) Original-Received: from [192.168.1.9] (pool-108-0-233-62.lsanca.fios.verizon.net [108.0.233.62]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 20FF039E80FF; Tue, 24 Sep 2013 08:26:25 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.0 In-Reply-To: <52417ADE.70007@dancol.org> X-Enigmail-Version: 1.5.2 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x 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:163609 Archived-At: Daniel Colascione wrote: > Signed integers have undefined overflow behavior and sometimes > result in less efficient code. If anything, we should prefer unsigned > integer types. The general Emacs style is to prefer signed integers to unsigned. That's why the Emacs source code prefers ptrdiff_t to size_t, for example. This is not a style that I originally favored, but I've learned to like its advantages. Most importantly, it leads to more-understandable code, since signed arithmetic is closer to how people normally understand numbers: it's counterintutive that a large positive number X can satisfy the predicate (X < -1), which can happen with unsigned arithmetic. And as a side effect, signed arithmetic often leads to more-efficient code, since the compiler can take advantage of the fact that behavior is undefined on overflow. There are a few exceptions to the general style; one is bitmasks (where the integers are not really numbers, but are bit strings). Another is char, where unsigned char is often used, as it's simpler (and typically, this doesn't have the problem with -1 anyway). Still another are hash values and a few other places where the performance advantage of unsigned arithmetic is compelling. But generally, we prefer signed integers.