From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Kevin Rodgers Newsgroups: gmane.emacs.help Subject: Re: LISP Questions - random, random elements and memory management Date: Wed, 18 Nov 2009 20:03:51 -0700 Message-ID: References: <20091118.075428.224836459.jeff@chaosphere.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1258599891 20607 80.91.229.12 (19 Nov 2009 03:04:51 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 19 Nov 2009 03:04:51 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Nov 19 04:04:44 2009 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1NAxK6-0007AU-UU for geh-help-gnu-emacs@m.gmane.org; Thu, 19 Nov 2009 04:04:43 +0100 Original-Received: from localhost ([127.0.0.1]:53075 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NAxK6-0002Wx-Fc for geh-help-gnu-emacs@m.gmane.org; Wed, 18 Nov 2009 22:04:42 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NAxJo-0002Ws-0g for help-gnu-emacs@gnu.org; Wed, 18 Nov 2009 22:04:24 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NAxJj-0002UO-HJ for help-gnu-emacs@gnu.org; Wed, 18 Nov 2009 22:04:23 -0500 Original-Received: from [199.232.76.173] (port=49859 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NAxJj-0002UL-7j for help-gnu-emacs@gnu.org; Wed, 18 Nov 2009 22:04:19 -0500 Original-Received: from lo.gmane.org ([80.91.229.12]:44941) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NAxJi-0007q9-IN for help-gnu-emacs@gnu.org; Wed, 18 Nov 2009 22:04:18 -0500 Original-Received: from list by lo.gmane.org with local (Exim 4.50) id 1NAxJf-000712-Ai for help-gnu-emacs@gnu.org; Thu, 19 Nov 2009 04:04:15 +0100 Original-Received: from c-71-237-24-138.hsd1.co.comcast.net ([71.237.24.138]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 19 Nov 2009 04:04:15 +0100 Original-Received: from kevin.d.rodgers by c-71-237-24-138.hsd1.co.comcast.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 19 Nov 2009 04:04:15 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 31 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: c-71-237-24-138.hsd1.co.comcast.net User-Agent: Thunderbird 2.0.0.23 (Macintosh/20090812) In-Reply-To: <20091118.075428.224836459.jeff@chaosphere.com> X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:69895 Archived-At: Jeff Clough wrote: > Lastly, I have a function that takes two lists, pulls a random element > from each and concats the elements to form a string (a random name > generator). It works just swell with the lists as defconsts, but one > of the lists is quite large (88,000 elements today) and burns about a > megabyte of RAM. It takes above half a second to evaluate the > defconst, but then using the list is zippy (even nth'ing near the end > of the list takes no time). > > What is the done thing in Emacs Lisp to keep this data out of memory > until it's needed that also lets the function stay zippy? Bonus > points if I can keep the data and function bundled up in the same .el > file. The data *is* in memory. The function is zippy because nth is fast, in turn because cdr is fast (and implemented in C). And perhaps the cons cells for the list are allocated in adjacent memory, if it is constructed all at once. Of course you can put the data (defconst forms) and function (defun) in the same .el file! > I've taken a look at autoload, provide and require, but I'm not > certain I understand them fully or how they would be used to solve > this problem. Me neither. -- Kevin Rodgers Denver, Colorado, USA