From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Brian Newsgroups: gmane.lisp.guile.devel Subject: Performance impact of top level definitions Date: Tue, 08 May 2018 22:19:23 -0700 Message-ID: <542e7f030ad122e035a353f44465d4d3158d7f8c.camel@gmail.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Trace: blaine.gmane.org 1525842960 8300 195.159.176.226 (9 May 2018 05:16:00 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 9 May 2018 05:16:00 +0000 (UTC) To: guile-devel@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Wed May 09 07:15:55 2018 Return-path: Envelope-to: guile-devel@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 1fGHSC-00021x-PO for guile-devel@m.gmane.org; Wed, 09 May 2018 07:15:52 +0200 Original-Received: from localhost ([::1]:54528 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGHUJ-0000zw-P4 for guile-devel@m.gmane.org; Wed, 09 May 2018 01:18:03 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:41077) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGHUE-0000zq-Ks for guile-devel@gnu.org; Wed, 09 May 2018 01:17:59 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGHUD-00044g-K3 for guile-devel@gnu.org; Wed, 09 May 2018 01:17:58 -0400 Original-Received: from mail-pf0-x236.google.com ([2607:f8b0:400e:c00::236]:34798) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGHUD-00043J-C4 for guile-devel@gnu.org; Wed, 09 May 2018 01:17:57 -0400 Original-Received: by mail-pf0-x236.google.com with SMTP id a14so25063903pfi.1 for ; Tue, 08 May 2018 22:17:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:subject:from:to:date:mime-version :content-transfer-encoding; bh=v9fjt7d3qNaoUORpAi1JARu4leFzmDsvBwf/NZ1Ya2U=; b=uXAocqWlp/Y9RimghD/AJhOLT7Zr8ncwXWY7zip2zWjws8TGzrc98sVyPjkvITb0jO yD0+O3a3Z1d1aVUUXYjjV1zDIumPXYQGzp+NnSNIOccOpz0Vt14Y5d1UTstkyaRQVk14 bMWjD6h3SnSEsBq6C3RY7jQzVTqxF0n3ZD/9QU1cZDMugYLJ5VOEiu4OEAJiMjlwfFCg qNI4KzVvk21Z1lEcrHOk9hPjS9DN+bHA2qll0NBj0D27I2fbSP7gdOiicyXC9omlto4d 0KNf1pfqvX7xb0F8ZUA+l59kIeP1P8TrcXfPZ2mbGCwjt1dtoKEJJZKTI95zBQduXrBe 2SUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:date:mime-version :content-transfer-encoding; bh=v9fjt7d3qNaoUORpAi1JARu4leFzmDsvBwf/NZ1Ya2U=; b=jjR4OzQ9EVcSgOY6jkuwv+toAidkRjdEMnkntiCNkogsYEY/QPs7MFpxBmOg1CCjKe lqorl7y0PFy4nG9v0xgfHN0NgSjIrX9Xd0IyBAlTwrNL8fqOQFZY6KDXk/FRy24CiyRV 9uQWPf5YZN+KmRSgBFPPyD3LtsHYeVIZvdME2QIKZerXw73XMKPLN3KgYkSVUZ+tOYWe ujEGjuz0fdLChZwH201h2+PPXd/Tb3rwFII7kAl28VTHITy9R9QSWDMLyTaGJQd7DdKV lmiLkgsNIex2g37bHPodi6FnhTcQRqwXOlXm5j4BeY/afKQiRYXS/DrJ+gh5ZOtWPMZ3 9tqg== X-Gm-Message-State: ALQs6tCsj6tpdMX3dOF4Q4EomN35gjaFthZTGMwiIkLyahU42tkw1NMS +qttZMO+IVb9P1V6jCeEKFbpu1E3 X-Google-Smtp-Source: AB8JxZpvhEuQWiwjHK9JPBQcU0t3KY+TsOUMD/DFbkmUfbjpLOi6uG6RtdMYzLdOIEqSAdkX+B5RZg== X-Received: by 2002:a63:6f82:: with SMTP id k124-v6mr33846832pgc.301.1525843075467; Tue, 08 May 2018 22:17:55 -0700 (PDT) Original-Received: from yuri ([2601:602:9c01:c923:1a5e:fff:fe14:b135]) by smtp.googlemail.com with ESMTPSA id d3-v6sm41805850pgc.12.2018.05.08.22.17.54 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 08 May 2018 22:17:54 -0700 (PDT) X-Mailer: Evolution 3.28.1 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::236 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.21 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.org@gnu.org Original-Sender: "guile-devel" Xref: news.gmane.org gmane.lisp.guile.devel:19521 Archived-At: Hello, Today I found that top level defines have a significant performance impact on Guile (2.2.3). The following program takes about 108 seconds to complete on my ThinkPad (an i5-5200U with Arch Linux): (define node cons) (define node-left car) (define node-right cdr) (define (make d) (if (= d 0) (node #f #f) (let ([d2 (1- d)]) (node (make d2) (make d2))))) (define (check t) (if (node-left t) (+ 1 (check (node-left t)) (check (node-right t))) 1)) (define (main n) (define min-depth 4) (define max-depth (max (+ min-depth 2) n)) (define stretch-depth (1+ max-depth)) (format #t "stretch tree of depth ~a\t check: ~a\n" stretch-depth (check (make stretch-depth))) (let ([long-lived-tree (make max-depth)]) (do ([d 4 (+ d 2)]) ([not (< d (1+ max-depth))]) (let ([iterations (ash 1 (+ (- max-depth d) min-depth))]) (format #t "~a\t trees of depth ~a\t check: ~a\n" iterations d (let sum ([i iterations] [n 0]) (if (zero? i) n (sum (1- i) (+ n (check (make d))))))))) (format #t "long lived tree of depth ~a\t check: ~a\n" max-depth (check long-lived-tree)))) (main 21) By simply wrapping that code in a lambda the program finished in about 47 seconds. Using lets instead of defines is equally effective. I was quite surprised because I initially thought some optimization would just substitute those useless nodes symbols away, but it seems like that's not the case... Cheers!