<div dir="ltr">Hi, Juan, <div><br></div><div>probably there is something that makes it faster using what you propose, but a general convention between languages is a dot as a separator for namespaces. VW is adopting this. (and BTW it seems more elegant too...) .</div><div>Any case, I just started tasting Cuis water, and I have to say that, after the first moment of confusion (starting with git seems not natural for an old smalltalk programmer...) , I begin to appreciate the work you did in these years.</div><div>ciao</div><div>giorgio</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Apr 27, 2020 at 11:19 PM Juan Vuletich <<a href="mailto:juan@jvuletich.org">juan@jvuletich.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><u></u>
<div bgcolor="#ffffff">
Hi Folks,<br>
<br>
On 4/27/2020 12:52 PM, Luciano Notarfrancesco via Cuis-dev wrote:
<blockquote type="cite">
<div>
<div dir="auto">I also dislike prefixes a lot. But fortunately
name clashes are less common in Cuis because there are not as
many classes as in Pharo. Personally, I’d love to have
namespaces, or have class names be local to a package.</div>
</div>
</blockquote>
<br>
Ok, this got me thinking. So, what would it take to do just that?<br>
<br>
We could make each package be a namespace. That means that classes
that are defined in a package will not be globals. But, any package
declaring a prerequisite would also behave as if in Python you did
'From package import *'. So, the compiler would know that it is
compiling some code for some package, and it would try to find class
names in all packages that were declared as prerequisites.<br>
<br>
This would have the added benefit that the compiler would check for
you that you actually declared prerequisites. Code not in a package
would not have access to classes defined at any package.<br>
<br>
Usually, there would be no need to specify namespaces when accessing
'globals', even if they belong in a different package/namespace.
Just declaring the prerequisites for your package just once, will
do. The only case where explicit call for a namespace would be
needed, is if you ask two prerequisites, they both define classes
with the same name, and there is ambiguity. In such casses something
like:<br>
a := `Smalltalk@#PackageName1@#ClassName` new.<br>
b := `Smalltalk@#PackageName2@#ClassName` new.<br>
would work as expected. See that class resolution is done at compile
time because of the use of backticks. So there's no performance
penalty. Also, there's no new syntax!<br>
<br>
If we add package names to the Smalltlak global namespace, then we
could also do:<br>
a := `PackageName1@#ClassName` new.<br>
b := `PackageName2@#ClassName` new.<br>
<br>
Again, this is only when the case is that you decided to depend on
two different packages that happen to clash. So, you are already
aware of the situation. This would never get in your way when good
old Smalltalk would do!<br>
<br>
There's some work to be done in Browsers and other tools, but I feel
it is not too much...<br>
<br>
Also note that I'd not include nested namespaces, just like we don't
have nested packages. I'd also avoid having namespaces as a separate
thing from packages. I'd have a single concept for both. So, it
would be simpler than what is available in other Smalltalks that
support namespaces.<br>
<br>
Does this make sense? I am missing something?<br>
<br>
Thanks,<br>
<pre cols="72">--
Juan Vuletich
<a href="http://www.cuis-smalltalk.org" target="_blank">www.cuis-smalltalk.org</a>
<a href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev" target="_blank">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a href="https://github.com/jvuletich" target="_blank">https://github.com/jvuletich</a>
<a href="https://www.linkedin.com/in/juan-vuletich-75611b3" target="_blank">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
@JuanVuletich</pre>
<br>
<blockquote type="cite">
<div><br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Mon, 27 Apr 2020 at 10:46
PM, giorgio ferraris via Cuis-dev <<a href="mailto:cuis-dev@lists.cuis.st" target="_blank">cuis-dev@lists.cuis.st</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Hello,
<div>prefixes have a long story, in use also on
VisualSmalltalk or SmalltalkV long, long time ago. Not
having namespaces on many Smalltalk dialects makes
prefix the only (ugly) solution.
<div>The resulting names are horrible, I
personally dislike it a lot, but class' names clashing
is something that could easily happens.</div>
<div><br>
</div>
<div>ciao</div>
</div>
</div>
<div dir="ltr">
<div>
<div><br>
</div>
<div>giorgio</div>
<div><br>
</div>
<div><br>
</div>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Mon, Apr 27, 2020 at
5:34 PM Erik Stel via Cuis-dev <<a href="mailto:cuis-dev@lists.cuis.st" target="_blank">cuis-dev@lists.cuis.st</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi Ken,<br>
<br>
I think you just answered my question ;-).<br>
<br>
It can indeed be a Pharo ’thing’. In Pharo (default
image) you have class names like ’ZnWebSocket’. It
represents a WebSocket and comes from the ‘Zinc’
framework. I think it coexisted with WebSocket for some
time (the later is no longer part of the default Pharo
image). Also ‘MCPackage’ is a package from Monticello
(the versioning system). A full name like
‘MonticelloPackage’ would have solved that issue of name
conflict I suppose.<br>
<br>
Regards,<br>
Erik<br>
<br>
<br>
> On 27 Apr 2020, at 17:13, <a href="mailto:ken.dickey@whidbey.com" target="_blank">ken.dickey@whidbey.com</a>
wrote:<br>
> <br>
> On 2020-04-27 07:28, Erik Stel via Cuis-dev wrote:<br>
>> Hi,<br>
>> Short question:<br>
>> Also using Pharo, I’m used to creating classes
with prefixed names<br>
>> because of possible name collisions. What is
the Cuis take on these<br>
>> prefixes? I do not see any prefixes being used
in the<br>
>> packages/features I’m using at the moment.<br>
>> Regards,<br>
>> Erik<br>
> <br>
> Examples?<br>
> <br>
> What is the context?<br>
> <br>
> Not being a Pharo user, I have no idea what you are
talking about.<br>
> <br>
> Typically, one wants to use meaningful names in a
way that orients one and makes code reads like
sentences.<br>
> <br>
> Note that the base Cuis image typically has between
500 and 600 classes. The latest Pharo base image has
over 9000 classes. Perhaps the (pre)fix is for a Pharo
problem..<br>
> <br>
> -KenD<br>
> <br>
<br>
-- <br>
Cuis-dev mailing list<br>
<a href="mailto:Cuis-dev@lists.cuis.st" target="_blank">Cuis-dev@lists.cuis.st</a><br>
<a href="https://lists.cuis.st/mailman/listinfo/cuis-dev" rel="noreferrer" target="_blank">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
</blockquote>
</div>
-- <br>
Cuis-dev mailing list<br>
<a href="mailto:Cuis-dev@lists.cuis.st" target="_blank">Cuis-dev@lists.cuis.st</a><br>
<a href="https://lists.cuis.st/mailman/listinfo/cuis-dev" rel="noreferrer" target="_blank">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
</blockquote>
</div>
</div>
</blockquote>
<br>
</div>
</blockquote></div>