From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18699 invoked by alias); 29 Apr 2003 20:06:05 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 18659 invoked from network); 29 Apr 2003 20:06:03 -0000 Received: from unknown (HELO localhost.redhat.com) (66.30.197.194) by sources.redhat.com with SMTP; 29 Apr 2003 20:06:03 -0000 Received: from redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id D0B212B2F; Tue, 29 Apr 2003 16:06:02 -0400 (EDT) Message-ID: <3EAEDB2A.2050207@redhat.com> Date: Tue, 29 Apr 2003 20:06:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.2) Gecko/20030223 X-Accept-Language: en-us, en MIME-Version: 1.0 To: David Carlton Cc: gdb , Elena Zannoni , Jim Blandy Subject: Re: [rfc] struct dictionary References: <3EA89AB3.6050403@redhat.com> <3EAE95CD.8070207@redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2003-04/txt/msg00334.txt.bz2 > On Tue, 29 Apr 2003 11:10:05 -0400, Andrew Cagney said: > > >>> On Fri, 25 Apr 2003 11:31:35 -0400, Andrew Cagney said: >>> > > >>>> Ok, humor me ... >>>> http://sources.redhat.com/ml/gdb/2003-04/msg00017.html why even >>>> build these data structures during symbol reading? It takes time >>>> and space, yet is probably never used. Why not on-demand build this >>>> dictionary specialized for the block? > >>> That sounds great to me if we can get it to work. It's certainly > > >>> another reason to try to get the symbol lookup stuff abstracted behind >>> an opaque interface: it makes lazy loading of data a lot easier. > > >> But which interface? > > >> A block has a language, and [I think] it's the language that, in the >> end decides that block's name->symbol lookup strategy. The language >> can, on demand, build a dictionary for its block. > > > Currently, all uses of symbols in blocks either iterate over all > symbols or else are looking for symbols with a given natural name. As > you say, because of the features of certain languages, sometimes you > need to refine the search further beyond that, but that's a good first > cut. So having iterators dict_iterator_{first,next} and > dict_iter_name_{first,next} is a good first step: it unifies all the > existing mechanisms for symbol lookup, but doesn't commit to any sort > of implementation mechanism. It certainly would allow for > constructing the actual data structures on demand: for example, we > could add an implementation that doesn't actually build the data > structures storing the symbols until the first time that an iterator > is called. > > I'm certainly willing to believe that the interface might change in > the future; but separating the interface from the implementation is a > good first step no matter what. > > I kind of get the impression that I'm missing your point somehow and > that we're talking past each other. I'll post a concrete patch soon > (Wednesday, maybe? It's done on my laptop, but I don't have my laptop > with me), and hopefully that will clarify matters. Sounds like it. I'm think I'm looking a step beyond your changes. Is the block's symbol search algorithm determined by the language? I believe it is, and hence it should be language specific code that constructs the blocks dictionary? Of course it could also be implemented on-demand. I think that would allow much C++ junk to be kicked out of the current symbol table readers. Instead they just read in simple lists of symbols in blocks. Andrew