<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>RE: [ANN] [UPDATES] Squeak 3.4 now in beta</TITLE>
</HEAD>
<BODY>
<BR>

<P><FONT SIZE=2>Hello.</FONT>
</P>

<P><FONT SIZE=2>&gt; Oh dear. The Unix guys really have been far-sighted when they created (or maybe adopted) the single-rooted path name hierarchy. It's _so_ much simpler to use than everything else out there ... No wonder it was adopted for URLs, too. Can't we just do the same? That is, use Unix/URL-like notation in the image and let the VM worry about mapping that to platform path names?</FONT></P>

<P><FONT SIZE=2>It's simple and homogeneous.&nbsp; Of course it should work, as opposed to Java's 59 reserved words.</FONT>
</P>

<P><FONT SIZE=2>Here's something that just crossed my mind.&nbsp; Make / a binary message.&nbsp; So /usr/bin/gcc/gcc becomes:</FONT>
</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>Root / 'usr' / 'bin' / 'gcc' / 'gcc'</FONT>
</P>

<P><FONT SIZE=2>To have extra meaningfulness without resorting to parentheses, use keyword messages:</FONT>
</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>Root / 'usr' / 'bin' / 'gcc' streamForFileNamed: 'gcc'</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>Root / 'usr' / 'bin' / 'gcc' hasFileNamed: 'gcc'</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>Root / 'usr' / 'bin' hasFolderNamed: 'gcc'</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>Root foldersDo: aBlock</FONT>
</P>

<P><FONT SIZE=2>The pattern is to use binary messages to aggregate and keyword ones to actually do something when you reach the point of interest.&nbsp; The keyword selectors would have to be extremely well chosen.</FONT></P>

<P><FONT SIZE=2>Now I also realize that Root could just be the empty string which would indicate absolute names, as opposed to names whose first component is not empty hence they're relative.</FONT></P>

<P><FONT SIZE=2>In my experience, applying this pattern to blocks and the binary comma message produces interesting things such as</FONT>
</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>[x], [y], [z]</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>ifAllTrue:</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>ifAnyTrue:</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>otherwise:</FONT>
</P>

<P><FONT SIZE=2>Or (remember nil class == UndefinedObject):</FONT>
</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>[x], [y], [z]</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>ifAllDefined:</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>ifAnyDefined:</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>otherwise:</FONT>
</P>

<P><FONT SIZE=2>Not to mention</FONT>
</P>

<P><FONT SIZE=2>isWhatever</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>&quot;^(x1 or: [x2]) or: [y1 and: [y2]]&quot;</FONT>
</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>^[x1], [x2] orAllOf: [y1], [y2]</FONT>
</P>

<P><FONT SIZE=2>Note how parentheses, nesting, and superfluous logical connectors are eliminated.&nbsp; It works really well.</FONT>
</P>

<P><FONT SIZE=2>Andres.</FONT>
</P>

</BODY>
</HTML>