<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<TITLE>Message</TITLE>

<META content="MSHTML 6.00.2900.2523" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial size=2><FONT size=2>
<P>I have a very broad question related to the implementation of the symbol type 
in the inards of scheme interpreters and compilers. This may seem way off topic 
and I apologize for that. It seemed to me that the participants in this mailing 
list would have the answers I'm looking for.</P>
<P>Here is the problem background.</P>
<P>I'm developing an industrial automation protcol for IEEE 1394.(Firewire). My 
company makes "sensors" for the electronics assembly industry. We have a new 
project where we want to use1394. Unfortunately we couldn't find a suitable high 
level automation protcol for 1394 so we are rolling our own. I had been playing 
around with mzscheme for about 2 years. I started thinking about how nice it 
would be to just send a scheme expressions to a device and have the device 
evaluate it. A "command" to the device would be a scheme expression. The 
"response" would be result produced by evaluation. I have succeed in putting 
together a workable protocol based on this idea. The language has a very small 
number of forms stolen from the mzscheme OOP model. Objects can be created using 
the (new ..) form. Methods can be invoked using the (send ..) form. Variables 
are created using a (define ...) form. The language does not support functions 
of any kind. The protocol is not tightly coupled to mzscheme or any other 
functional language. I'm planning on using C++ to implement both the sensor 
firmware and the host protocol software. </P>
<P>Here is a simple example to give you the flavor of the language.</P>
<P>(send sensor serial-number) </P>
<P></P>
<P>There is a predefined variable "sensor" whose value refers to the root 
"sensor" object. The "serial-number" method is used to retrieve the device's 
serial-number. There are other objects associated with the sensor object. There 
are methods that allow you to navigate from the sensor object to these other 
objects.</P>
<P>Here is the problem:</P>
<P>Everything was going great until I started really thinking about the symbol 
data type. My original idea was just to have a pre-defined code-word for every 
symbol need in the interface. For example the symbol "red" might get assigned 
the code-word 105. This encoding would be hard-coded into both the sensor 
firmware and the host software that talks to the sensor. After a while I 
realized that this approach did not scale well. There ends up being a large 
number of symbols. There has to be as symbol for every class-name, method-name, 
and enumeration value. Managing the encodings for a single type of device would 
be tedious. If I wanted to add a second type of device it would be a nightmare. 
The symbol encoding would have to be managed globally across the entire set of 
device classes. </P>
<P>I'm looking for a solution to this problem. One approach I've been thinking 
about is to have dynamicly assigned code words. There would have to be an 
initial negotiation between the host computer and the device to come up with a 
common set of symbol encodings. For example the host computer could ask the 
decice the provide all of the ascii representation of all of the symbols needed 
to communicate and also the code-word corresponding to each one. Suppose the 
host was talking to two different devices simultaneously. The first device might 
use the code-word 105 for the symbol "red" while the second would use the 
code-word 432. I'm not very excited about this solution. If the hsot computer 
were talking to 23 different devices simultaneously it would have to maintain 23 
different symbol mappings.</P>
<P>This same problem must come up in the implementation of scheme interpreters 
and compilers. I don't really know but my guess is that inside mzscheme at 
runtime there is a single instance of a symbol like "red" and that a symbol 
value in a list like (1 red 17) is just a pointer back to this instance. To 
compare two symbols it is just necessary to compare the pointer values. Now 
according to the documentation "MzScheme's units are ... separately compilable 
and reusable components". How is a symbol like "red" represented in a separately 
compiled unit. How is this encoding mapped back to a run-time symbol value when 
the unit is loaded.</P>
<P>I would appreciate advice or even just an article reference that would help 
me solve this problem in an elegant manner. 
</P></FONT></FONT></DIV></BODY></HTML>