From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Andy Wingo Newsgroups: gmane.lisp.guile.bugs Subject: bug#24887: procedure-sources not working Date: Wed, 01 Mar 2017 15:09:06 +0100 Message-ID: <878topgkcd.fsf__34592.0872911394$1488377414$gmane$org@pobox.com> References: <20161105220110.GA3991@protected.rcdrun.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1488377414 8590 195.159.176.226 (1 Mar 2017 14:10:14 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 1 Mar 2017 14:10:14 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) Cc: 24887@debbugs.gnu.org, guile-devel@gnu.org To: Jean Louis Original-X-From: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Wed Mar 01 15:10:10 2017 Return-path: Envelope-to: guile-bugs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cj4xF-0001kz-MP for guile-bugs@m.gmane.org; Wed, 01 Mar 2017 15:10:10 +0100 Original-Received: from localhost ([::1]:46770 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cj4xL-0000iS-PN for guile-bugs@m.gmane.org; Wed, 01 Mar 2017 09:10:15 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:58074) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cj4xD-0000ex-4d for bug-guile@gnu.org; Wed, 01 Mar 2017 09:10:08 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cj4x8-0001j0-5Y for bug-guile@gnu.org; Wed, 01 Mar 2017 09:10:07 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:34811) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cj4x8-0001ik-2j for bug-guile@gnu.org; Wed, 01 Mar 2017 09:10:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1cj4x7-00007j-TN for bug-guile@gnu.org; Wed, 01 Mar 2017 09:10:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Andy Wingo Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Wed, 01 Mar 2017 14:10:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24887 X-GNU-PR-Package: guile X-GNU-PR-Keywords: Original-Received: via spool by 24887-submit@debbugs.gnu.org id=B24887.1488377358378 (code B ref 24887); Wed, 01 Mar 2017 14:10:01 +0000 Original-Received: (at 24887) by debbugs.gnu.org; 1 Mar 2017 14:09:18 +0000 Original-Received: from localhost ([127.0.0.1]:33010 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cj4wP-000062-QT for submit@debbugs.gnu.org; Wed, 01 Mar 2017 09:09:18 -0500 Original-Received: from pb-sasl2.pobox.com ([64.147.108.67]:61226 helo=sasl.smtp.pobox.com) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cj4wO-00005u-NR for 24887@debbugs.gnu.org; Wed, 01 Mar 2017 09:09:17 -0500 Original-Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by pb-sasl2.pobox.com (Postfix) with ESMTP id 5BDE9659AA; Wed, 1 Mar 2017 09:09:14 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type; s=sasl; bh=MImGCrtADyHeqxLQAPU2mFSwwiY=; b=QIwsOY MS55Dx6YLHaCUPQ5nXhvRBGRCDDApYL/xIWG1bPJSh9Q0a7vL+H/xnnitC2epgPM 1Pe9rg7zuzUOYoJR7e517rtD7epbmyeCi7QQ5acD8NZho/5dXuqd9oNCxDt8/7DE 72M/Fz12UrgYTNNQdaZB/OkwnXUehki228lpQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type; q=dns; s=sasl; b=NA27UmRsM+2wgoXmfrH8wm4YeRnl0/4V kan/qrybOkLdTRd7RT3XIS0pDKaTJPzI/IrXC0BgbaQxjo5/o2UkcgQh4fZ/UMLV HcnlqJ+LCttT1xXkeipmWK87p4hby1Mq6nbAc0WCg41mpHDEpe+k4FXRY1VT6i7p nCRTaGxud+M= Original-Received: from pb-sasl2.nyi.icgroup.com (unknown [127.0.0.1]) by pb-sasl2.pobox.com (Postfix) with ESMTP id 53893659A9; Wed, 1 Mar 2017 09:09:14 -0500 (EST) Original-Received: from clucks (unknown [109.190.228.233]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by pb-sasl2.pobox.com (Postfix) with ESMTPSA id 42521659A8; Wed, 1 Mar 2017 09:09:13 -0500 (EST) In-Reply-To: <20161105220110.GA3991@protected.rcdrun.com> (Jean Louis's message of "Sun, 6 Nov 2016 01:01:10 +0300") X-Pobox-Relay-ID: A5EF6504-FE88-11E6-8B15-85AB91A0D1B0-02397024!pb-sasl2.pobox.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Original-Sender: "bug-guile" Xref: news.gmane.org gmane.lisp.guile.bugs:8620 Archived-At: On Sat 05 Nov 2016 23:01, Jean Louis writes: > Sadly, the procedure-source is not working. This would be very useful > for programming. > > Jean > > scheme@(guile-user) [50]> (define (dosomething text) (write text)) > scheme@(guile-user) [50]> (dosomething "Hello") > "Hello"scheme@(guile-user) [50]> (procedure-source dosomething ) > $93 = #f > scheme@(guile-user) [50]> Sadly I think I am going to WONTFIX this one :/ The reason is complicated. First of all, a procedure's source only makes sense within an environment: in a module and in a lexical context, and you're not guaranteed to be able to reconstruct either of those. Also a procedure's source is expressed in some dialect via macros; what should the source be for even this simple example? Should it be: (define (dosomething text) (write text)) or (lambda (text) (write text)) And if we can't get it right (i.e., don't even know what the right answer is) for even this simple case, how can we get it right for something that uses macros or is defined by a macro? What use is it, really? Better to just be able to link back to the source location at which it was defined (we can do that) or to disassemble what it does (we can do that too). It's possible to imagine environments where you can edit the procedure's source and continue directly, but that's not Guile -- we compile away extraneous information that maybe you might would need if you edit a procedure's source (e.g. you introduce a reference to a variable bound in some outer scope that wasn't referenced before). All that said, it's possible to attach arbitrary properties to source. So consider: (define-syntax-rule (define-with-source (proc . args) body ...) (define (proc . args) ;; this is how you attach arbitrary literals as procedure ;; properties efficiently, inside source #((source . (lambda args body ...))) body ...)) (define-with-source (my-proc a b) (list a b)) (procedure-property my-proc 'source) => (lambda (a b) (list a b)) Indeed because procedure-source just looks for the 'source property on my-proc, you can do: (procedure-source my-proc) => (lambda (a b) (list a b)) Hope this helps. Not sure if we should bless a "define-with-source" in Guile; thoughts? Is it even useful at all? Andy