From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Andy Wingo Newsgroups: gmane.lisp.guile.devel Subject: Re: GNU Guile 2.9.9 Released [beta] Date: Tue, 14 Jan 2020 15:32:43 +0100 Message-ID: <87pnfmglbo.fsf@pobox.com> References: <87zherlphs.fsf@pobox.com> <87eew2i8z3.fsf@pobox.com> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="28316"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) Cc: Andy Wingo , guile-devel To: Mikael Djurfeldt Original-X-From: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Tue Jan 14 15:34:43 2020 Return-path: Envelope-to: guile-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1irNHG-0006Y6-Pv for guile-devel@m.gmane-mx.org; Tue, 14 Jan 2020 15:34:43 +0100 Original-Received: from localhost ([::1]:40852 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1irNH9-00012d-Oe for guile-devel@m.gmane-mx.org; Tue, 14 Jan 2020 09:34:35 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:59624) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1irNFg-00080N-Il for guile-devel@gnu.org; Tue, 14 Jan 2020 09:33:06 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1irNFe-0000sg-K6 for guile-devel@gnu.org; Tue, 14 Jan 2020 09:33:04 -0500 Original-Received: from fanzine.igalia.com ([178.60.130.6]:38011) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1irNFe-0000rB-0Z for guile-devel@gnu.org; Tue, 14 Jan 2020 09:33:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date:References:Subject:Cc:To:From; bh=L4EIUKiDe8J0kNXMlswNf2Mgu50K0H9LB8xBJiIJjwg=; b=sshGYKXWql1BInJVeHud9CR1s6LhjZ/JlOUcfzNebQXsFP6Z8fAvPbGBUvxPH0F562J3Qk8HVlNWdZXHoYs2Ir224LP+b+aNbd0jOBy/ky5XNt3JjNwrHukkUru+giIR21Q4kY1x10rPHfbXZv8nTPHwxws+PWFbPnqMucyGc1kWurVy8DdZwgdYNk4M9IBmBXNurMHvcl+0Mt/oezJlJX7aUeES2lT7MWTvFNz7RWJ91OATYIyE8nATlYdV8Ur7Ntyj15z1DJp+wLQ4wnoAAsMb0VrXd+sLp/0gR6nBrGVTlMCuzw+z9COSAnEIn0NaqSv3GrW+bmYzZVuwnf6ryA==; Original-Received: from [37.172.151.250] (helo=sparrow) by fanzine.igalia.com with esmtpsa (Cipher TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim) id 1irNFX-0007tB-L0; Tue, 14 Jan 2020 15:32:55 +0100 In-Reply-To: (Mikael Djurfeldt's message of "Tue, 14 Jan 2020 13:18:28 +0100") X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] [fuzzy] X-Received-From: 178.60.130.6 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Original-Sender: "guile-devel" Xref: news.gmane.org gmane.lisp.guile.devel:20266 Archived-At: On Tue 14 Jan 2020 13:18, Mikael Djurfeldt writes: > I probably don't have a clue about what you are talking about (or at > least hope so), but this---the "eq change"---sounds scary to me. > > One of the *strengths* of Scheme is that procedures are first class > citizens. As wonderfully show-cased in e.g. SICP this can be used to > obtain expressive and concise programs, where procedures can occur > many times as values outside operator position. > > I would certainly *not* want to trade in an important optimization > step in those cases to obtain intuitive procedure equality. The risk > is then that you would tend to avoid passing around procedures as > values. Is this true? (eq? '() '()) What about this? (eq? '(a) '(a)) And yet, are datums not first-class values? What does being first-class have to do with it? Does it matter whether it's eq? or eqv? What about: (eq? (lambda () 10) (lambda () 10)) What's the difference? What's the difference in the lambda calculus between "\x.f x" and "f"? What if in a partial evaluator, you see a `(eq? x y)`, and you notice that `x' is bound to a lambda expression? Can you say anything about the value of the expression? Does comparing procedures for equality mean anything at all? https://cs-syd.eu/posts/2016-01-17-function-equality-in-haskell Anyway :) All that is a bit of trolling on my part. What I mean to say is that instincts are tricky when it comes to object identity, equality, equivalence, and especially all of those combined with procedures. The R6RS (what can be more Schemely than a Scheme standard?) makes this clear. All that said, with the recent patch, I believe that Guile 3.0's behavior preserves your intuitions. Bug reports very welcome! Andy