Re: Universal Virtual Machine

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: Universal Virtual Machine

David Simmons
"Steve Wart" <[hidden email]> wrote in message
news:Ryyi6.95397$[hidden email]...
> One thing that has disappointed me about .NET and Java is that these VMs
do
> not appear to provide good support for Smalltalk.
>
> [ re. .NET -- I have been a little confused by some of David Simmons'
posts.
> Although he has been quite helpful and informative, I am left with the
> impression that .NET will support SmallScript, but not Smalltalk as most
of
> us in this group understand Smalltalk.]

Sorry for creating that confusion. Maybe this post will help?

Then again, it is really long and almost certainly controversial so it may
actually do the opposite :-(

Hopefully those who choose to comment upon it, will comment on selected
sections in separate posts rather than bundling it all together :) [which of
course I didn't do]

>
> Whether .NET supports Smalltalk or not is not relevant.

Well, its relevant to me as the person who has developed Smalltalk for .NET
and has worked long and hard with Microsoft to continue to ensure that .NET
has the necessary elements to support Smalltalk.

> It is proprietary
> and closed (I wonder if Microsoft understands that .NET is supposed to be
> the operating system, not something you package with Windows or Windows CE
> or whatever they're calling it now).

Your comments regarding "proprietary" and "closed" are not "strictly
speaking" correct. The .NET specification is open and becoming a standard
via the ECMA process. A standard which is likely to be ratified and adopted
before the end of this year; in a process which involves many companies
including (and perhaps most notably) Sun Microsystems.

http://msdn.microsoft.com/net/ecma/

http://www.gotdotnet.com

The idea that Microsoft may not understand that .NET is "supposed to be an
operating system" is coming from left field.

I.e., Microsoft created and defined .NET, so de-facto they "defined" what it
is "supposed to be".

More to the point, I would contend that they intentionally designed it as a
technology to enable them to break their technology base free of both the
INTEL and Windows OS Family ties [and perhaps the Justice Department focus].
Which means they defined a "platform", which is not the same thing as an
"operating system".

Microsoft's .NET itself is very real and it really works. Microsoft has
barely begun marketing it. It will be at least as pervasive as COM, ActiveX,
Visual Basic, and IE/ASP/IIS Scripting. The heat in this area just has not
been turned up by Microsoft because they are, as usual, being
(instinctually) wily/smart about preparing all the adjunct software they own
or believe is key for the .NET. Once they reach that stage, they'll crank up
the heat and .NET will be de-facto reality.

In my judgment, one thing to understand about Microsoft is that their
*typical* "pragmatic" pattern, unlike companies such as Sun and Apple, is to
have solved a problem and implemented a solution that "to their
satisfaction" corresponds to what they think/believe they are promoting.
Their rationale is that by the time the world starts to care Microsoft has a
huge lead or dominant position that everyone else has to try and
overcome/catch up to.

That's part of how COM/ActiveX/OLE was able to completely crush Apple's
OpenDoc (and IBM's SOM) component technology [which is/was competition to
CORBA]. And .NET is just the next evolution of the COM/ActiveX/OLE
components and systems interop scalability story.

I would suggest that .NET is about Microsoft's efforts to keep moving
towards a dominant position regarding internet (and enterprise) deployment
and systems platform technology. I.e., .NET platform versus JVM platform
versus Apache/Linux collective, In my opinion, for Microsoft, it was never
about the language of Java -- that's why those who made or make noise about
C# are just missing the whole point.

>
> Neither does the Java VM support Smalltalk the way we know it today
(Bistro
> is a nice idea, but I don't think it's Smalltalk).
>
> In general, languages like Java, C#, and even Bistro and SmallScript
(IMHO)
> seem to be taking Smalltalk in the opposite direction it should be going.

What does Java or C# have to do with where Smalltalk is or is *not* going?

Where is SmallScript taking Smalltalk, that it should not be going?

    Smaller?
    Faster?
    More portable?
    Applicable to more of today's software tasks?
    More interoperable with other languages and systems?
    More capable of supporting multiple dialects/libraries
         simultaneously (incl non-Smalltalk)?
    More expressive for explicit enforcement of contracts?
    More scalable and deployable via the namespace, module,
         and interface technology QKS defined?
    More approachable and mainstream via familiar constructs
         from languages such as python, jscript, and c++?
    Retaining Smalltalk syntax/source compatibility.

The wrong directions are backwards and status quo.

There is a lot of important pioneering/implementation work that has been
done in the non st-80 derived dialects; and still continues to be done to
keep Smalltalk growing, evolving and competitive as a technology and as a
marketplace.

For example, take Smalltalk MT which has pioneered important new techniques
for Smalltalk implementation with their static compilation and its ability
to make small components/modules. It has significantly opened the
possibilities for Smalltalk applicability.

> And Smalltalk definitely needs to be going somewhere. For example, Self
> seems like a step in the right direction to me. But Self was buried by
Java
> and it doesn't appear to have much energy right now.
>
> Boris' recent posts regarding Lisp (here and in comp.lang.lisp) have me
> intrigued about things like meta-object capabilities. In our own work on
> Visual Knowledge, the modeling constructs provided by "vanilla" Smalltalk
> have proved inadequate and we have tried to extend those in creative ways
> (e.g. by developing a rather baroque, but useful prototyping system).
>
> IBM was trumpeting a UVM as part of their VisualAge offerings a year or
two
> ago, but I haven't seen much reference to that of late.
>
> What I am thinking of is an open source project to create a standard VM
for
> Smalltalk but that also supports other languages, such as Java and perl,
and
> more importantly, new language directions for Self-like and MOP extensions
> to Smalltalk. Similar to the Transmeta architecture (except all in
> software), one could define pluggable byte code dictionaries that the VM
> could swap in as required.

As far as pluggable byte code sets, both SmalltalkAgents(r) on QKS' Mac and
Win32 VM's had them. It is not the ideal model you want to use for a VM
design. It has importance only if you're building an interpreter and
interpreters should have CISC instruction sets to achieve best performance
and overall design characteristics. We demonstrated and explored this key
design area when we worked with Apple and IBM on our UVM system (AOS) in
the early 90's.

A jitter requires a different instruction set design that should be neither
CISC or RISC, but rather lend itself to supporting fast analysis and
optimization [of which, in my opinion, the JVM set is a poor example].

On today's technology (where memory is cheaper and processors and their
caches are the driver) a jitter approach has many more desirable
characteristics. It is just more complicated to build well enough to make it
better than a good interpreter (Dolphin ST is an example here). A jitter
also has the "potential" to be better and more desirable than a static
compiler -- but the competitive challenges and some of the basic tradeoffs
make it even harder to develop a jit that is better than a static system (a
hybrid approach may in fact be the best model).

Microsoft's .NET technology investment is a pragmatic foray/exploration into
this very space -- especially for implementing languages such as C++ (where
they have a good static compiler).

A VM with a pluggable jitter framework/architecture is the approach I've
used in the AOS design. With that architecture I can readily use a
cross-jitter to translate from one byte code set to another and then jit
that into native code. So there is no reason to have "pluggable" byte code
dictionaries.

The goal is not one of having "pluggable" byte code sets, but rather to have
a rich object model and efficient structured access to the metadata such as
type information and well structured information for analyzing data flow in
an instruction/opcode stream. The AOS current architecture of pluggable
jitters is similar to but not exactly the same as byte code dictionaries.
The AOS platform on which our native SmallScript runs has four jitters
within it. Only one of them actually generates native cpu code, the others
are cross-jitters of one form or another.
----------

Regarding UVM thoughts, let me make a few comments. I've been in the UVM
area for many years. I originally designed our VM in 1990-1991 to host a
variety of dynamic languages. In those days the term "platform" had not
become popularized and we called our Agents Object System (AOS) UVM platform
a "backplane" (stemming from my minicomputer and EE/VLSI background :).

We danced with Apple for three plus years and signed a system deal with them
in 1996 to make our VM the UVM for all the MacOS dynamic and scripting
languages other than Java -- A deal that Sun indirectly contributed to
screwing up, one day after signing, by assisting Apple's stock plummet to a
junk bond status which froze all Apple investment and technology funds. But
that is another of the sad Smalltalk history stories...

Today that is water (stained with my BST) under the bridge.

So, back to the present day:

SmallScript and its virtual machine (AOS) will be free.
However, the AOS will not be open sourced.

The VM is part of a separate technology known as the Agents Object
System(tm)[AOS(tm)]. The AOS platform is a UVM and a corresponding object
model (CLS - common language specification) that has the elements to support
a wide range of languages that include the ability to support pointer based
languages and languages with strongly typed fields like Java. It
intentionally has the necessary mechanisms to support the lisp family of
languages.

FYI: There is already work underway on a native scheme implementation. And,
a large part of the work for python, and jscript has already been done. I
also have a very strong desire to see Java and VB implemented natively as
well. (each of these implementations, if they become available, I would
expect to be free -- which is better than open source GPL restrictions).

The AOS represents my collective knowledge (and investment) from over 10
years of direct (first hand) design and experience in the building of
sophisticated virtual machine technology and object models. As an
individual, I may not be the smartest or most linguistically expert or
rigorous in this field, and there are certainly others who have explored
this area over the years; some who did so quite a few years before me. But
I'm pretty certain that by now I've explored it at least if not more broadly
(possibly even more deeply), and perhaps as long and hard as anyone you'll
find in the area of dynamic languages (especially for UVM facilities).

I'm confident that my work (based on my involvement with Apple, IBM,
Microsoft, and seeing some of what has been published, et cetera) has
continually been at the forefront of evolution in this area for the last ten
years. I'm equally certain that there is a great deal more evolution and
improvement to be made in this area, and in specifics on my work.

SmallScript represents an even longer span of my knowledge and experience
applied to developing (and continuing to evolve) the minimum (core) set of
classes and methods necessary (on top of the AOS) to build any current
Smalltalk implementation using only SmallScript language constructs.

Noting that the core framework includes a complete SmallScript compiler, and
that SmallScript can compile "vanilla" Smalltalk and all the known dialect
specific extensions *I am aware of* (other than primitives -- which don't
[need to] exist in SmallScript).

That means that on each platform on which the AOS runs, every AOS ported
language or AOS ported Smalltalk dialect would be able to run.

SmallScript for .NET represents the translation of my knowledge (investment)
to the .NET platform, and my educating, lobbying, and actually getting
Microsoft to make the essential .NET changes needed to support dynamic
languages in general (which includes not only Smalltalk, but almost every
scripting language, and the lisp family).

That work alone, ignoring other historical investments, has cost me a lot of
personal sacrifice, time and money to create. I can tell you that without
the up front investment on my part to create the technology and demonstrate
its capabilities, Microsoft would not have been willing to make the changes
they have or consider the additional features I've requested so ensure
Smalltalk and other dynamic languages could be developed for the .NET
platform. And I have other irons in the fire with Intel for dynamic language
technology support.

----------------------
.NET Limitations Today
----------------------
Code that has been built in "vanilla" Smalltalk will compile and execute on
the AOS SmallScript system, and thereby should compile and run on
SmallScript.NET with good performance (significantly better than a JVM based
Smalltalk).

Specifically on .NET, there are provisos for areas such as dynamic MOP
operations, and object space enumeration that have to do with both security
issues and overall design constraints of the current V1 implementation of
.NET.

------------
Back to the question of what is "Smalltalk" and the idea of what a standard
Smalltalk library base could or should be...

The various dialect specific class libraries are proprietary in one form or
another. (I consider "Open Source" to be as proprietary as any other source
license since it has restrictions on its use).

If your goal is a good framework base to provide a standard set of
additional services, then that standard base should be based on a true
bsd-style source license. I.e.,a freely redistributable (without limitation)
set of core library sources. Such a free base library would put more
emphasis on dialects adding value in terms of solutions and integrated
toolsets for those solutions.

<opinion:volatile-topic>

"Advance warning: If you wish to discuss this section further, let's please
take it to comp.lang.advocacy"

I would also tell you that too much emphasis on making everything free and
unrestricted will eventually erode Smalltalk as viable business technology
because it won't be adequately supported and it won't evolve to meet
commercial needs. Like many of you we've all had time to watch the "Open
Source" movement.

Unlike some of you, I've had personal first hand experience with watching
its impact in areas such as the tools (separate from tools solutions)
market; an area that has (perhaps by definition) always suffered financially
relative to other software sectors. "When money flows, technology grows.
When ideas and their implementation have no value so to does the act and
effort of developing and creating them. Correspondingly, when ideas and
their implementation are constrained (as in patents and virtual monopolies
without open/unrestrained competition) then ideas and their implementation
get equally stifled."

So, I will tell you that in my opinion, it is important and valuable to have
"some" elements owned by the "collective" (which means freely
redistributable without limitation). But taken too far its negative effects
begin to significantly outweigh its benefits - striking a balance is
important. Otherwise, you end up just creating a service economy where there
is no value to software goods and intellectual as well as social achievement
and effort is not rewarded and is therefore effectively discouraged -- and
I'd like to think we have enough of that (at least in the US) already.

</opinion:volatile-topic>

I suggest that the process of defining Smalltalk should begin with defining
an object model (i.e., UVM and its associated MOP). A design that requires
looking well beyond current Smalltalk features.

As to some important but missing frameworks... It is possible to build
portable user-interface frameworks that allow full access and integration
with native services. Having such frameworks would be an important and
powerful enhancement for Smalltalk. But my experience suggests that it
should not be done in a st-80 style (self contained world) approach and it
can't be done properly without a modular Smalltalk.

It requires layering the frameworks where the principle of greatest common
set of features must be supported, rather than least common set of
features -- which means that platform services from one system may need to
be synthetically emulated on other platforms.

I have typically used a two (or more) layer approach where you have a native
base layer, and a generalized portable layer built on top of the native
layer. I've done it for the Mac and Windows platforms, and I am intimate
with what it takes to support X windows. And we all know that there just
aren't that many operating systems (or more broadly, platforms); so the
number of different native user interface layers to build is limited. One of
the key enablers for this was the rich graphics framework and event systems
I developed.

Being able to properly build a native layer means having standard language
mechanisms for interop with other languages. Something Smalltalk is
surprisingly poor at doing. The marshalling process and level of custom
coding effort is always significant and typically requires very specialized
Smalltalk skills and knowledge. And even then, there is the whole question
of performance costs for transitioning back and forth between Smalltalk and
the native world.

I am arguing that classic Smalltalk is not efficient or well architected for
native integration. Just as a few examples: it does not [as a language]
support concepts of structured (typed) fields, different forms of memory
references, pinned data pointers, foreign functions mechanisms, threads of
execution, or types in general for marshalling and interop.

The language doesn't address specific aspects of execution specification and
semantics that are needed for intrinsic foreign language interop. Noting
that foreign language interop is essential for any form of native system
access or, for that matter, integration with the rest of the world.

And a large reason for all of this is that it never adequately addressed or
rigorously explored the object model or execution engine architecture. So it
could not and did not get properly defined in terms of it. The closest it
came was in the Smalltalk-80 language and implementation book.

Here's just one pet peeve of mine:
---------------------------------
Primitives are lame and represent an old and limiting technique for
supporting interop (which really is the same as extending the language or
virtual machine). The mere fact that they exist is a glaring symptom of some
of what the Smalltalk language is missing (if it is to be able to function
as a full featured (general purpose) first class language in today's
software
world).

The whole concept of primitives is fundamentally outside the bounds of the
Smalltalk language. Yet we are exposed to them at the Smalltalk level. We
often cannot rewrite them, or when we can write them or write our own
primitives we have to do so in some external system and environment and
shutdown and rebuild our Smalltalk virtual machine to use them -- which
means that something is clearly missing in the Smalltalk language.

>
> This would allow one VM to work with several Smalltalk dialects, without
> requiring vendors to agree on a standard set of byte codes. The issues
with
> the Garbage Collector seem more difficult to me, but if Microsoft can
claim
> that .NET is a multi-language VM that provides GC services to any
language,
> than it should be possible to do this for Smalltalk as well, shouldn't it?

NOTE: .NET is much more than a multi-language VM that provides GC
services...

Given what you've described you're looking for, why couldn't you use a
*free* system like SmallScript to build your portable dialects that
contained only "vanilla" Smalltalk?

If your answer is that you want to see more platform ports than those which
are planned for SmallScript, I'm open to solving that issue.

If your answer is that you want to ensure bugs can get fixed in the
"restricted source", I'm also open to solving that issue.

If you have some other reasons I'd want to discuss and understand them. Its
a guess, but I suspect that at their heart are questions of business
investment and recovery: intellectual property, patents (which I abhor), and
to a large degree the very nature of what it takes for financially/business
oriented people (like me) to be in a position to be able/willing to make or
sustain "free" contributions into the Smalltalk community.

>
> I would like to attend Smalltalk Solutions this year, but it falls on my
> son's birthday. Perhaps if I get some time in the next few weeks I will
pick
> up Squeak again and see if I can get my head around some of the VM issues.
> E-mail is no substitute for face-to-face discussion, however :-(.
>
> Maybe the issues of a standard Smalltalk VM and taking Smalltalk to a new
> level by opening up the meta object model are old topics and maybe they
are
> independent of one another. I know that there are some people who are
> (hopefully still) reading this who have a much better understanding of VMs
> and Meta Object models than I do.

I'm guessing that some, if not all, the things that you don't have comfort
with in SmallScript are the result of opening up the meta object protocol of
a UVM.

To be a UVM, much more is required than what a "Smalltalk" implementation
needs. So if you're serious about wanting a UVM, we should publicly explore
the things about SmallScript that you classify as:

  "SmallScript, but not Smalltalk as most of us
   in this group understand Smalltalk"

What I have trouble understanding is the very statement that SmallScript is
not really Smalltalk. I would really like to understand this perception.

I believe I understand Dave Harris position on this quite well. His argument
is that SmallScript has additional features Smalltalk does not have and
therefore it is not Smalltalk because not only can you access those
features, but you will use them because they offer the option to utilize new
or more expressive patterns -- at which point you are no longer thinking or
programming in Smalltalk, but in the new language of SmallScript.

So I think I understand Dave Harris' point of view although I don't fully
know where I stand on it (I should point out that it is only a technical
issue to disable/turn-off the extended features).

But here is what is odd to me. SmallScript compiles Smalltalk code and
executes Smalltalk code just like any of the known dialects do today. If it
can do that, then why isn't it a Smalltalk?

It can't simply be because of a question of class libraries. Because those
can be implemented at will given a full "language" implementation of
Smalltalk. Which in turn allows one to bypass the whole dialect and bytecode
compatibility issue -- although there is great value in building a common
base of frameworks. And this is further enhanced because SmallScript and the
AOS object model makes it possible to have multiple libraries/frameworks
co-resident in a running application without conflict.

If it is some question of supporting the ANSI X3J20 standard I helped to
develop, that too should just be a question of creating a portable library
from basic Smalltalk language constructs and should be independent of
implementation -- especially because it doesn't address implementation
issues. The X3J20 standard is not (in my opinion) the correct or complete
set of "classes" needed to implement the language and therefore it is *not*
the language and thereby it is not the *core* framework for the language.
AND, even if it were, it doesn't address issues of object model or execution
engine behavior.

The fact that SmallScript can do *more* than this should not exclude it from
being a Smalltalk. I think I can make a good case that it is the purest (in
the sense of just being about the language elements and MOP) form of the
"language" that has been built in the last 20 years. The fact that the
implementation additionally supports the SmallScript language features and
constructs, is *no* different than having a python, scheme, jscript, vb, or
java compiler available within the same system.

SmallScript embodies my understanding of the essence of the Smalltalk
language without the extra baggage and confusion of those frameworks which
are not actually required to implement the language in itself. I.e., to
define itself via a compiler written in itself and run on itself.

Given such a core essence, and a rich UVM and MOP, it should be possible to
build the various frameworks (we call dialects) on top of it without VM or
platform specific dependencies.

As I mentioned a few paragraphs above, that includes implementing the ANSI
x320 standard frameworks which I both helped work on, and which I feel, by
themselves, have limited value. The X3J20 work is woefully incomplete for
what a Smalltalk language standard needs to contain to enable standardized
yet extensible implementation, and has a large number of elements that are
superfluous and should be extruded and placed into (standard) adjunct
libraries.

The basic reasoning, within this and similar threads, about what is
"Smalltalk" or not, is awfully reminiscent of my time spent on the ANSI
X3j20 (Smalltalk standards) committee. A time and place where the X3j20
group was not even willing to accept there was line, let alone try and draw
the line between the language and its adjunct class libraries/frameworks.

A line that I would argue *must* be drawn to create a useful Smalltalk
language definition/standard. A standard from which a truly small and
portable Smalltalk could be built. A base from which Smalltalk can be recast
to be more competitive and useful as a substitute/replacement for the
popular and fast growing languages of today. And it is those very
questions/frustrations with the X3j20 work that lead me to develop
SmallScript -- hence my wanting to really understand why SmallScript is not
perceived as a valid Smalltalk?

The UVM question is distinctly separate from Smalltalk. Just like the JVM is
not well suited to dynamic languages, a classic Smalltalk VM is not suited
to static languages (and is missing a variety of other elements).  A MOP
architecture reflects the UVM's object model, *not* the languages that are
implemented on that UVM. Let's not confuse these two separate and distinct
ideas or we will be no better than Java and JVM (which is strikingly similar
to in its own myopic way to a Smalltalk-80 world).

> Is this concept viable?

Yes, it certainly is.

>
> Steve

Ahhh, shewh. That was a long and almost certainly a controversial post. I'm
sure I'm not ready for all the questions and responses it may raise...

-- Dave Simmons [www.qks.com / www.smallscript.com]
  "Effectively solving a problem begins with how you express it."


Reply | Threaded
Open this post in threaded view
|

Re: Universal Virtual Machine

Steve Wart-3
This post is a response to David's observations or concerns that I may have
made glib statements about .NET or SmallScript that are confusing or
inaccurate. It may be partly off-topic, but I want to ensure my
clarifications are in the original posted groups.

Please direct all followups to comp.lang.smalltalk.advocacy (also please do
not post complaints regarding availability of that newsgroup).

"David Simmons" <[hidden email]>
> "Steve Wart" <[hidden email]> wrote
> > One thing that has disappointed me about .NET and Java is that these VMs
do
> > not appear to provide good support for Smalltalk.
> >
> > [ re. .NET -- I have been a little confused by some of David Simmons'
posts.
> > Although he has been quite helpful and informative, I am left with the
> > impression that .NET will support SmallScript, but not Smalltalk as most
of
> > us in this group understand Smalltalk.]
>
> Sorry for creating that confusion. Maybe this post will help?
>
> Then again, it is really long and almost certainly controversial so it may
> actually do the opposite :-(
>
> Hopefully those who choose to comment upon it, will comment on selected
> sections in separate posts rather than bundling it all together :) [which
of
> course I didn't do]

Thanks for doing this. I have seen some very long posts from you in the past
and it is probably my own impatience that has led to my confusion.

I would like to split up your post, but not necessarily to respond to every
point. There is some useful stuff here that should be put up in a Smalltalk
and .NET FAQ.

> > Whether .NET supports Smalltalk or not is not relevant.
>
> Well, its relevant to me as the person who has developed Smalltalk for
.NET
> and has worked long and hard with Microsoft to continue to ensure that
.NET
> has the necessary elements to support Smalltalk.
>
> > It is proprietary
> > and closed (I wonder if Microsoft understands that .NET is supposed to
be
> > the operating system, not something you package with Windows or Windows
CE
> > or whatever they're calling it now).
>
> Your comments regarding "proprietary" and "closed" are not "strictly
> speaking" correct. The .NET specification is open and becoming a standard
> via the ECMA process. A standard which is likely to be ratified and
adopted

> before the end of this year; in a process which involves many companies
> including (and perhaps most notably) Sun Microsystems.
>
> http://msdn.microsoft.com/net/ecma/
>
> http://www.gotdotnet.com
>
> The idea that Microsoft may not understand that .NET is "supposed to be an
> operating system" is coming from left field.
>
> I.e., Microsoft created and defined .NET, so de-facto they "defined" what
it
> is "supposed to be".

Fair points. I apologize for the FUD. My perception of .NET is that is a
technology platform to allow MS to extend their reach to hardware devices
beyond the PC as we know it, as you suggest below. But my assumption is that
they want to extend their OS entrenchment to these devices as well.

Therefore, it is not the .NET VM that is a problem for me, but rather my
belief that .NET will require the presence of MS operating system services
in order to be useful. When I first heard of .NET, I thought of products
like VB, Word and Excel (which I have heard are pCode-based), and of course
Perl and Smalltalk, that would be good candidates for a VM implementation.

My perception of MS and the CE market is that MS is "hurting" because of the
porting efforts required to get not only CE running on all these different
devices, but also each application that needs to be redeployed for each
hardware vendor. The solution provided by .NET will allow MS (and more
importantly application developers) to have their products run on all such
devices without a recompile (or worse, a porting effort). But my assumption
is that these devices will still require the presence of a commercial MS
operating system.

Also, my bias stems from discussions I have read on the MSDN web site
regarding C# and C++ and the "controversy" around the fact that C# does not
provide "synchronous or deterministic destructors" (see
http://msdn.microsoft.com/library/Welcome/dsmsdn/deepc10192000.htm) [Warning
to Smalltalkers: do not look at this link if you have just had lunch].

The C++ development community is important to MS, and they are the primary
market for C#. Based on what you have said it is not likely that MS will
break the language independence in .NET in order to satisfy these concerns.
I especially appreciate your lobbying efforts with MS to ensure that MS
supports dynamic languages like Smalltalk (and beyond!).

But in its desire to be all things to all programmers, the logical concern
is that .NET (like Windows) will be extraordinarily complex and consequently
take years to stabilize. Maybe this is a problem with all software. But is
especially difficult to deal with in commercal software (see David's
comments below regarding the balance of free tools and funding for tool
development).

Until recently, I have been quite positive about Microsoft operating systems
and applications. In fact, I still believe the level of quality and
usefulness of their products is unsurpassed. But in the software industry,
upgrade revenues are like the goose that laid the golden egg. Microsoft has
thousands of clever people whose sole job appears to be finding ways of
tricking their customers into upgrading software that works perfectly well
for them, wasting valuable time and eroding the value proposition that these
products allegedly provided in the first place.

Hence my comment that .NET "should be" the operating system. When you buy or
build computer hardware, you need an O/S. To use that hardware you must
license an O/S. If that O/S is commercial software, there is a conflict on
the part of the vendor between selling product upgrades and providing a
stable platform for development and deployment. I remember reading a quote
recently that the only purpose of an O/S is to provide such a platform. To
me, a standard VM should be an important part of such an O/S.

And also, my point regarding the irrelevance of Smalltalk on .NET was not
intended to be insulting to you or your efforts (I apologize for the
crassness of this remark, and also commend you for not flaming me into a
black patch of dirt). My point was really that .NET is not relevant to me
based on the assumption that it is tied to Microsoft's commercial O/S
endeavors.

If .NET will work on Unix and Macintosh platforms without requiring a
commercial software license from Microsoft, I will be impressed. But I have
seen no unequivocal statement from Microsoft that this will be the case. In
spite of their attempts to deflect criticism around their commercial
practices, I believe that MS is founded on a simple principle that he who
controls the O/S, controls everything else. To give that up would be
anathema.

> More to the point, I would contend that they intentionally designed it as
a
> technology to enable them to break their technology base free of both the
> INTEL and Windows OS Family ties [and perhaps the Justice Department
focus].
> Which means they defined a "platform", which is not the same thing as an
> "operating system".

To me, a "platform" is more than just software.

[ other comments regarding .NET ]

> > Neither does the Java VM support Smalltalk the way we know it today
(Bistro
> > is a nice idea, but I don't think it's Smalltalk).
> >
> > In general, languages like Java, C#, and even Bistro and SmallScript
(IMHO)
> > seem to be taking Smalltalk in the opposite direction it should be
going.

>
> What does Java or C# have to do with where Smalltalk is or is *not* going?
>
> Where is SmallScript taking Smalltalk, that it should not be going?
>
>     Smaller?
>     Faster?
>     More portable?
>     Applicable to more of today's software tasks?
>     More interoperable with other languages and systems?
>     More capable of supporting multiple dialects/libraries
>          simultaneously (incl non-Smalltalk)?
>     More expressive for explicit enforcement of contracts?
>     More scalable and deployable via the namespace, module,
>          and interface technology QKS defined?
>     More approachable and mainstream via familiar constructs
>          from languages such as python, jscript, and c++?
>     Retaining Smalltalk syntax/source compatibility.
>
> The wrong directions are backwards and status quo.
>
[ lots of good stuff about UVMs, jitters and the history AOS ]

These are all noble and useful objectives, however, there is one overriding
characteristic about Smalltalk that I value above everything else, and that
is its simplicity of expression.

<imho>
As with my concerns about .NET, extra "language" features (such as DBC,
Namespaces, etc.) inhibit learning and understanding, especially by people
who are learning to program. In fact, these features are often marginally
useful and serve as a mechanism for entrenchment of old ideas and may
unintentionally inhibit the growth of new ideas.

The *right* direction is greater simplicity and flexibility, while opening
up the object/class/method/inheritance mechanisms to be explored in
Smalltalk itself, rather than burying them in the depths of the VM.

Maybe the right direction *is* backwards. Maybe we should be looking more
closely at Smalltalk-72 instead of Smalltalk-80.
</imho>

> ------------
> Back to the question of what is "Smalltalk" and the idea of what a
standard
> Smalltalk library base could or should be...
>
> The various dialect specific class libraries are proprietary in one form
or
> another. (I consider "Open Source" to be as proprietary as any other
source
> license since it has restrictions on its use).
>
> If your goal is a good framework base to provide a standard set of
> additional services, then that standard base should be based on a true
> bsd-style source license. I.e.,a freely redistributable (without
limitation)
> set of core library sources. Such a free base library would put more
> emphasis on dialects adding value in terms of solutions and integrated
> toolsets for those solutions.
>
> <opinion:volatile-topic>
>
> "Advance warning: If you wish to discuss this section further, let's
please

> take it to comp.lang.advocacy"
>
> I would also tell you that too much emphasis on making everything free and
> unrestricted will eventually erode Smalltalk as viable business technology
> because it won't be adequately supported and it won't evolve to meet
> commercial needs. Like many of you we've all had time to watch the "Open
> Source" movement.
>
> Unlike some of you, I've had personal first hand experience with watching
> its impact in areas such as the tools (separate from tools solutions)
> market; an area that has (perhaps by definition) always suffered
financially
> relative to other software sectors. "When money flows, technology grows.
> When ideas and their implementation have no value so to does the act and
> effort of developing and creating them. Correspondingly, when ideas and
> their implementation are constrained (as in patents and virtual monopolies
> without open/unrestrained competition) then ideas and their implementation
> get equally stifled."
>
> So, I will tell you that in my opinion, it is important and valuable to
have
> "some" elements owned by the "collective" (which means freely
> redistributable without limitation). But taken too far its negative
effects
> begin to significantly outweigh its benefits - striking a balance is
> important. Otherwise, you end up just creating a service economy where
there
> is no value to software goods and intellectual as well as social
achievement
> and effort is not rewarded and is therefore effectively discouraged -- and
> I'd like to think we have enough of that (at least in the US) already.
>
> </opinion:volatile-topic>

This is a difficult issue. I am not in favour of abritrary distinctions
between "tools" and "applications" (or even "O/S"s).

However I know many people who have worked hard on creating something in
software, and then, through no fault of their own (other than perhaps their
lack of high net worth), found that the fruits of their labour have been
"put on a shelf", never to be seen again. This, because of legal definitions
of "intellectual property", because of selfish and small-minded people, and
because of complex circumstances that conspire to crush creativity and breed
cynicism in this industry -- this cynical, soul-crushing software industry
that naive and idealistic software developers toss themselves into for
weeks, months and years on end without repreive and then surface to find it
has all gone to waste.

So, open source saves you from this. You build a suite of tools and
frameworks (hey, we could make a product from this), development progresses
apace, funding dries up, competitor or VC comes in (with horns on head and
pitchfork in hand) and says, "I'll save you from this problem" and shelves
it -- or, alternatively, developer picks self up off ground, dusts off
trusty laptop, moves on to new opportunity, and continues development
without losing anything other than perhaps a personal relationship that had
likely gone sour long ago.

YMMV :-)

[ more stuff about Smalltalk features and MOPs ]

> And a large reason for all of this is that it never adequately addressed
or
> rigorously explored the object model or execution engine architecture. So
it
> could not and did not get properly defined in terms of it. The closest it
> came was in the Smalltalk-80 language and implementation book.
>
> Here's just one pet peeve of mine:
> ---------------------------------
> Primitives are lame and represent an old and limiting technique for
> supporting interop (which really is the same as extending the language or
> virtual machine). The mere fact that they exist is a glaring symptom of
some

> of what the Smalltalk language is missing (if it is to be able to function
> as a full featured (general purpose) first class language in today's
> software world).
>
> The whole concept of primitives is fundamentally outside the bounds of the
> Smalltalk language. Yet we are exposed to them at the Smalltalk level. We
> often cannot rewrite them, or when we can write them or write our own
> primitives we have to do so in some external system and environment and
> shutdown and rebuild our Smalltalk virtual machine to use them -- which
> means that something is clearly missing in the Smalltalk language.

Hard not to agree. I thought of primitives after my initial post, and
realized, geez that'll put a damper on this idea. I suppose you could come
up with a standard way of providing primitive support in a UVM, but it
doesn't sound like a pleasant project.

> > This would allow one VM to work with several Smalltalk dialects, without
> > requiring vendors to agree on a standard set of byte codes. The issues
with
> > the Garbage Collector seem more difficult to me, but if Microsoft can
claim
> > that .NET is a multi-language VM that provides GC services to any
language,
> > than it should be possible to do this for Smalltalk as well, shouldn't
it?
>
> NOTE: .NET is much more than a multi-language VM that provides GC
> services...

It slices, it dices, it juliennes! ;-)

> Given what you've described you're looking for, why couldn't you use a
> *free* system like SmallScript to build your portable dialects that
> contained only "vanilla" Smalltalk?
>
> If your answer is that you want to see more platform ports than those
which
> are planned for SmallScript, I'm open to solving that issue.

My #1 issue.

> If your answer is that you want to ensure bugs can get fixed in the
> "restricted source", I'm also open to solving that issue.

Sounds important.

> If you have some other reasons I'd want to discuss and understand them.
Its
> a guess, but I suspect that at their heart are questions of business
> investment and recovery: intellectual property, patents (which I abhor),
and
> to a large degree the very nature of what it takes for
financially/business
> oriented people (like me) to be in a position to be able/willing to make
or
> sustain "free" contributions into the Smalltalk community.

See my earlier rant -- but for me, it really comes down to 2 things:

1) Am I unreasonably restricted from moving the fruits of my efforts to new
"platforms"?
2) Am I going to get locked into the "upgrade spiral of death" because some
marketing wizard has outsmarted me into upgrading my "platform" to support
say, the new Microsoft Digital Sunglasses.

> > Maybe the issues of a standard Smalltalk VM and taking Smalltalk to a
new
> > level by opening up the meta object model are old topics and maybe they
are
> > independent of one another. I know that there are some people who are
> > (hopefully still) reading this who have a much better understanding of
VMs
> > and Meta Object models than I do.
>
> I'm guessing that some, if not all, the things that you don't have comfort
> with in SmallScript are the result of opening up the meta object protocol
of
> a UVM.
>
> To be a UVM, much more is required than what a "Smalltalk" implementation
> needs. So if you're serious about wanting a UVM, we should publicly
explore
> the things about SmallScript that you classify as:
>
>   "SmallScript, but not Smalltalk as most of us
>    in this group understand Smalltalk"
>
> What I have trouble understanding is the very statement that SmallScript
is
> not really Smalltalk. I would really like to understand this perception.
>
> I believe I understand Dave Harris position on this quite well. His
argument
> is that SmallScript has additional features Smalltalk does not have and
> therefore it is not Smalltalk because not only can you access those
> features, but you will use them because they offer the option to utilize
new
> or more expressive patterns -- at which point you are no longer thinking
or
> programming in Smalltalk, but in the new language of SmallScript.
>
> So I think I understand Dave Harris' point of view although I don't fully
> know where I stand on it (I should point out that it is only a technical
> issue to disable/turn-off the extended features).
>
> But here is what is odd to me. SmallScript compiles Smalltalk code and
> executes Smalltalk code just like any of the known dialects do today. If
it
> can do that, then why isn't it a Smalltalk?

Well, it may be more than Smalltalk, but if it offers new features that
potentially complicate things for me, then I will be reluctant to use it. I
am still not sure if I would like to use Smalltalk as a scripting language.
The syntax seems to be optimized for interactive browsing and debugging.
That is how I understand and use it.

This is not much different than Sun arguing (successfully) that what MS did
to extend Java effectively created something that is not Java. Similarly,
Netscape's HTML extensions were not HTML. These extensions may be useful,
but in the case of Java at least, trademarks and legal agreements prevented
them from being used as part of something being called "Java".

SmallScript (tm?) is a good way to extend Smalltalk, because while it may be
a superset of Smalltalk, it is not Smalltalk. But that's okay, because you
are not positioning it that way anyhow.

There are lots of Smalltalk dialects that do not meet the ANSI spec, and I
don't think anyone is saying their vendors can't call those languages
"Smalltalk".

[ further explanations re. the origin of SmallScript and "definition" of
languages ]

> The UVM question is distinctly separate from Smalltalk. Just like the JVM
is
> not well suited to dynamic languages, a classic Smalltalk VM is not suited
> to static languages (and is missing a variety of other elements).  A MOP
> architecture reflects the UVM's object model, *not* the languages that are
> implemented on that UVM. Let's not confuse these two separate and distinct
> ideas or we will be no better than Java and JVM (which is strikingly
similar
> to in its own myopic way to a Smalltalk-80 world).

Thanks for the ideas and clarifications.

> > Is this concept viable?
>
> Yes, it certainly is.
>
> Ahhh, shewh. That was a long and almost certainly a controversial post.
I'm
> sure I'm not ready for all the questions and responses it may raise...
>
> -- Dave Simmons [www.qks.com / www.smallscript.com]
>   "Effectively solving a problem begins with how you express it."

Cheers,
Steve


Reply | Threaded
Open this post in threaded view
|

Re: Universal Virtual Machine

Bruce Samuelson
In reply to this post by David Simmons
David Simmons wrote (abridged**n :-)):
 
> Ahhh, shewh. That was a long and almost certainly a controversial post. I'm
> sure I'm not ready for all the questions and responses it may raise...
>
> -- Dave Simmons [www.qks.com / www.smallscript.com]
>   "Effectively solving a problem begins with how you express it."

I read the whole post because I found it interesting, but I suspect
that not many others will read all of it. Have you considered
collecting your better posts into a book, perhaps published online?
Especially since deja has disappeared. If I tend towards verbosity,
I can point to a greater example. :-)

One issue you raised, and that c.l.s. has discussed pretty heavily,
is to what extent SmallScript is Smalltalk. Since there are many ways
to answer this question, it might be worth making it a little more
rigorous. Your explanation has included terms such as ST (Smalltalk),
SS (SmallScript), VM, UVM, EE (execution engine), MOP (meta object
protocol), CL (computer language), DCL (dynamic computer language),
SSL (static computer language), SY (syntax), CLIB (class library).
Some of these abbreviations are mine. There's also VI (virtual image),
which may relevant. Would it help you explain SS better if you wrote
out relations between these terms? Perhaps it would be more clear than
plain English. I don't know. Anyway, here are a few examples.

inheritance SS = ST + new-SS-state + new-SS-behavior (SS is kind of ST)
composition new-SS-state = ...
composition new-SS-behavior = ...
composition SS = ST + new-component1 +... (SS includes ST as a subset)
composition new-component1 = ...
dependence SS-VM is the minimal VM necessary to run SS
dependence UVM is a sufficient VM to run SS
dependence UVM is sufficient to run DCL or SSL
what-relation? How are SS-VM and UVM related?
composition VM = EE + MOP
inheritance SS is a kind of DCL
composition SS = SS-SY + SS-CLIB + SS-objects + what else?
inheritance VM-for-Linux is kind of VM
instantiation can't think of good examples
other-relations ...

I know many of these are muddled, but I just wonder whether it is
possible to formalize SmallScript's definition more tersely. If a
decent response would be verbose, perhaps these ideas would help
your private thinking. What I fear is that computer languages and
IDEs are so complex that they can't be easily described in these
terms.


Reply | Threaded
Open this post in threaded view
|

Re: Universal Virtual Machine

David Simmons
In reply to this post by Steve Wart-3
"Steve Wart" <[hidden email]> wrote in message
news:U7ej6.111680$[hidden email]...
> This post is a response to David's observations or concerns that I may
have
> made glib statements about .NET or SmallScript that are confusing or
> inaccurate. It may be partly off-topic, but I want to ensure my
> clarifications are in the original posted groups.
>
> Please direct all followups to comp.lang.smalltalk.advocacy (also please
do
> not post complaints regarding availability of that newsgroup).
>

[...lots snipped to get these posts smaller :) ...]

> > > Neither does the Java VM support Smalltalk the way we know it today
> (Bistro
> > > is a nice idea, but I don't think it's Smalltalk).
> > >
> > > In general, languages like Java, C#, and even Bistro and SmallScript
> (IMHO)
> > > seem to be taking Smalltalk in the opposite direction it should be
> going.
> >
> > What does Java or C# have to do with where Smalltalk is or is *not*
going?

> >
> > Where is SmallScript taking Smalltalk, that it should not be going?
> >
> >     Smaller?
> >     Faster?
> >     More portable?
> >     Applicable to more of today's software tasks?
> >     More interoperable with other languages and systems?
> >     More capable of supporting multiple dialects/libraries
> >          simultaneously (incl non-Smalltalk)?
> >     More expressive for explicit enforcement of contracts?
> >     More scalable and deployable via the namespace, module,
> >          and interface technology QKS defined?
> >     More approachable and mainstream via familiar constructs
> >          from languages such as python, jscript, and c++?
> >     Retaining Smalltalk syntax/source compatibility.
> >
> > The wrong directions are backwards and status quo.
> >
> [ lots of good stuff about UVMs, jitters and the history AOS ]
>
> These are all noble and useful objectives, however, there is one
overriding
> characteristic about Smalltalk that I value above everything else, and
that
> is its simplicity of expression.

I thoroughly agree. Simplicity is elegance -- that has been the motto that
drove QKS Smalltalk's evolution from before day 1.

User experience will determine the reality of the following statements
----------------------------------------------------------------------
I designed SmallScript to extend Smalltalk's capabilities. Which means that
if Smalltalk can express and do all that you need to do, then you don't need
to learn the additional elements or features of SmallScript.

I.e., DBC, namespaces, etc are not essential and they can be ignored.

However, I think that both namespaces and interfaces are important concepts
that should be part of the learning experience. Learning about error
handling early and developing good habits regarding exceptions vs return
codes is equally important.

I have not found namespaces to be a problem for newbies to programming or
Smalltalk. A typical explanation is to give them a parallel to
folders/directories and the rest follows pretty naturally.

We'll see about interfaces. However, people tend to grasp the idea of
"roles" very quickly.

Generally speaking, the  extended capabilities of SmallScript have been
designed based on the 90/10 rule. 90% of the development problems being
solved don't require the extended SmallScript features, etc. But for the 10%
that do, you have the power to be precise and explicitly declare or control
what is supposed to happen.

One of the biggest reasons I like Smalltalk in particular and dynamic
languages in general is that they allow me to think more about the problem
rather than about how what I have to do to express it in my programming
language. That makes the process more fluid, and enables me to be more
productive.

It is one of the driving reasons for adding syntax to Smalltalk for
simplifying expression when interacting with the world outside of Smalltalk.

    Such as:
        parenthetical/functional messages -> foo(...)

        Interfaces -- where classes *are* interfaces
        Types -- where classes *are* types
        Namespaces -- where classes *are* namespaces

If I want to call the ::MessageBox(...) function in the User32.DLL I can
directly call it, or any arbitrary DLL function, via a self contained script
of the form:

------
class name=User32 dll='User32'.
eval [                "<- the 'eval' keyword is optional"
    User32.MessageBox(
        0,
        'TITLE',
        'Message',
        ( 0x00000030 "" MB_ICONWARNING
        | 0x00000000 "" MB_OK
        | 0x00010000 "" MB_SETFOREGROUND
        | 0x00002000 "" MB_TASKMODAL
        | 0x00040000 "" MB_TOPMOST
        )).
].
------

Or I could choose to extend the <String> class with:

------
class name=User32 extends=Module dll='User32'.
method class=String [
alert: msg

    User32.MessageBox(
        0,
        self,
        msg,
        ( 0x00000030 "" MB_ICONWARNING
        | 0x00000000 "" MB_OK
        | 0x00010000 "" MB_SETFOREGROUND
        | 0x00002000 "" MB_TASKMODAL
        | 0x00040000 "" MB_TOPMOST
        )).
].
------

Any class can be a repository of external methods/code within a
DLL/shared-library. So, the "extends=Module" is not necessary. But it is
good to group modules under the same inheritance family if you want to
implicitly inherit its interfaces for other module features.

Or I could have more explicitly written with our own type marshalling
information and calling conventions, etc:

------
module name=User32 dll='User32'.
method class=User32
[
  <$native=stdapi;Integer>
  MessageBox(<void> a,
             <String> title,
             <String> message,
             <Integer> modeFlags)
].
class name=String imports='+User32'.
method class=String
[
  alert: msg

    MessageBox(
        0,
        self,
        msg,
        ( 0x00000030 "" MB_ICONWARNING
        | 0x00000000 "" MB_OK
        | 0x00010000 "" MB_SETFOREGROUND
        | 0x00002000 "" MB_TASKMODAL
        | 0x00040000 "" MB_TOPMOST
        )).
].
------

The following is not a good way to have designed this service. But, for the
purposes of this simple example it does show how I could have written it
using an interface:

------
interface name=IUIInteraction dll='User32'.
method class=IUIInteraction
[
  alert: msg

    MessageBox(
        0,
        self,
        msg,
        ( 0x00000030 "" MB_ICONWARNING
        | 0x00000000 "" MB_OK
        | 0x00010000 "" MB_SETFOREGROUND
        | 0x00002000 "" MB_TASKMODAL
        | 0x00040000 "" MB_TOPMOST
        )).
].
class name=String implements='+IUIInteraction'.
------

With any of those different forms, I could then send any <String> instance
the message #alert:.
------
[
    'Improper input encountered' alert: 'WARNING'.

    "OR via the message aliasing semantics
     while also using the dot message notation"

    'Improper input encountered'.alert('WARNING').
].
------

The result is a 20 line script. Which could be built as a literally
miniscule DLL or EXE.

The 10% case of this would be if we wanted to handle MessageBoxA vs
MessageBoxW explicitly (perhaps it is obvious that the VM system is doing
something for use with regard to Wide vs Ascii method invocation and
marshalling).

===================
On the other hand, there is the 10% case where I'm calling an external
method that wants a pointer to a given type, and may need to dispatch
through some external vtable vector.

What we want is to implement interface methods with COM support for:
------
[
    someObject as: someInterfaceClass.
]
------

As you'll see below, we have complex issues (the 10% case). We need to pass
a reference to our container that will hold the result
<anInterfaceInstance>, and we would like to have the system automatically
marshal arguments and invoke COM style vtable services, as well as update an
<anInterfaceInstance> to hold an instance of that class rather than the
native ppvObject. The story for <IDispatch> dispInterfaces is similar but
that is another topic...

NOTE:
If we used <HResult> instead of <HRESULT> as the return value's type
descriptor in the method that follows, the marshalling machinery would map
the value into an exception/warning as appropriate.

We could, of course, change that behavior by rewriting the marshalling code
in the <HResult> class. Doing so would also mean that the #as: method should
be written differently.

The reverse (external vtable callback) invocation case (for the
QueryInterface method we wrote below) of mapping thrown exceptions into
<HRESULT> values is handled for us by the JITTER.

We also note that the <Interface> type currently treats '*' indirections as
the <Integer> type. So a pointer can be a negative value to minimize
<LargeInteger> object mapping.

So, we would write the additional methods:
(with that extra stuff because this is the 10% case)

------
method class=Interface [<$vtable=0;HRESULT>
QueryInterface(<GUID> interfaceId, <OUT Interface*> anObject)
    anObject := stObject as: interfaceId primaryValue.
   ^S_OK
].

method class=Interface [
as: <Interface.class> anInterfaceClass

   "Check for the self case -- subclasses may refine this method"
    if (anInterfaceClass == self class) return self "this".

   "If we are not a wrapper on an external object, and noting
    that interfaces don't wrapper interfaces"
    ffiHandle ? "#ifNil:" [^stObject as: anInterfaceClass].

   "Otherwise, invoke the external query interface routine"
    |ppvObject|
    |hResult| := QueryInterface(aBehavior md_uuid, <&>ppvObject).

   "If successful, return a wrappered instance"
    if (hResult = S_OK)
        return(aBehavior fromPPVHandle: ppvObject).

   "Otherwise, signal an exception and be sure to return <nil>
    in case the exception is caught and resumed."
    COMException signal: hResult.
   ^nil
].
------

Again, its a 28 line script (with comments) but we did have to know a bit
more syntax to accomplish our goals. I.e., we did have to understand how:
the annotation for the <$vtable> directive works (especially with
interfaces); how <types> work for marshalling and binding, and how
<&;in;out;*> type qualifiers work.

As a Smalltalker, we don't have to write these methods because they are part
of the core system, but we still note that they are written in SmallScript.
The fact that the mechanisms exist means that we can readily write our own
(portable) methods like this using only SmallScript, which will have
performance *and* capabilities equivalent to C/C++ code. [* We also have the
option to write methods with inline assembly and C++, but that too is
another topic *].

OTOH, we are free to ignore the mechanism by which those methods were built
and just use them as vanilla smalltalk:
------
[
    someObject as: someInterfaceClass.
]
------

The 10% case example was concocted because it also intentionally contains a
mixture of various SmallScript syntax styles for things like if(), ^,
return, return(), etc. A developer or project should just pick one of those
styles and use it consistently. The various style choices exist because one
of SmallScript's goals is to make the language more comfortable for those
coming from a more mainstream language background.

To be fair, those two <Interface> methods are a simplification of what you
would really write because they ignore the <outerInterface> attribute
(aggregation), and a few other niggling items.

>
> <imho>
> As with my concerns about .NET, extra "language" features (such as DBC,
> Namespaces, etc.) inhibit learning and understanding, especially by people
> who are learning to program. In fact, these features are often marginally
> useful and serve as a mechanism for entrenchment of old ideas and may
> unintentionally inhibit the growth of new ideas.
>
> The *right* direction is greater simplicity and flexibility, while opening
> up the object/class/method/inheritance mechanisms to be explored in
> Smalltalk itself, rather than burying them in the depths of the VM.

First about .NET, then about the AOS and SmallScript.

-- .NET --
There is a lot of stuff in .NET. It is complicated (even by my standards).
So I not only understand the many concerns voiced about it, but I share many
of them. However, if any company has the resources to properly go through
the design, documentation, and implementation efforts it is Microsoft. Once
they've done it, the second generation folks will have an easier time
building some form of a clone.

The demands on a language to provide full featured access to all of .NET,
are really huge. Many of the language groups have noted this issue. The
arguments are similar to those about SmallScript not being a Smalltalk.
Starting with full featured COM and ActiveX automation interop is a minimum
starting point -- if you're looking at the big picture.

I.e., you don't have to support and use all the .NET features to be able to
function as you always have with your language. If your language was not a
general purpose language then you will almost certainly need to come up with
special mechanisms if you want to be able to call all the different types of
methods, or participate in the superclassing/subclassing mechanics.

-- AOS and SmallScript --
The AOS platform and all the SmallScript technology is owned entirely by me
(and is licensed to QKS). Microsoft currently owns none of it.

The SmallScript language is a separate technology from .NET and the AOS
version of it is unrelated and completely independent of the .NET
technologies.

The SmallScript language (when used with the .NET implementation of
SmallScript) allows you to be shielded from dealing with the vagaries of the
.NET architecture. You can do most of what you want in .NET without learning
more than the SmallScript language (and any frameworks you care to use).

I've done quite a bit of work in C# and I prefer SmallScript (but then I'm
obviously biased).  C# should be considered Microsoft's reference language
for utilizing the .NET object model (MOP) facilities.

The AOS platform does not have the same characteristics as the .NET system.
But it also does not have anything like the market importance and impact
that .NET has.

As to the SmallScript inheritance mechanisms, I'd like to believe they are
fully exposed in the SmallScript source layer. Certainly the <Behavior>
class, the <Interface> class and their subclasses are fully exposed and thus
make explicit all the data structures that are used within the VM.

It is true that the fundamental dispatching code isn't written in
SmallScript. But then again, it isn't written in any language, it is jitted.
It is also true the binding algorithms are not exposed at the SmallScript
layer, but there is no reason why the logic for them can't be exposed.

The SmallScript system allows one object [an object manager, which can be a
class] to manage binding and dispatching for some other set of arbitrary
objects (of any available class). This is how the bindNotification mechanism
works for swizzling objects. I.e., proxies: object-relational-maping,
distributed objects, etc. It can also be used to provide your own MOP level
binding or dispatching system.

>
> Maybe the right direction *is* backwards. Maybe we should be looking more
> closely at Smalltalk-72 instead of Smalltalk-80.
> </imho>

[...lots snipped to get these posts smaller :) ...]

> > -- Dave Simmons [www.qks.com / www.smallscript.com]
> >   "Effectively solving a problem begins with how you express it."
>
> Cheers,
> Steve

-- Dave Simmons [www.qks.com / www.smallscript.com]
  "Effectively solving a problem begins with how you express it."


Reply | Threaded
Open this post in threaded view
|

Re: Universal Virtual Machine

Nevin Pratt-2
David Simmons wrote:
>
> The SmallScript language is a separate technology from .NET and the AOS
> version of it is unrelated and completely independent of the .NET
> technologies.

So when/why would we use the AOS implementation instead of the .NET
implementation? (or visa-versa)

Nevin Pratt


Reply | Threaded
Open this post in threaded view
|

Re: Universal Virtual Machine

Andrea Ferro
In reply to this post by Steve Wart-3
Sorry if this may be a little OT. But it's short and replies to a specific
point.

"Steve Wart" <[hidden email]> wrote in message
news:U7ej6.111680$[hidden email]...
...
> If .NET will work on Unix and Macintosh platforms without requiring a
> commercial software license from Microsoft, I will be impressed. But I have
> seen no unequivocal statement from Microsoft that this will be the case. In
> spite of their attempts to deflect criticism around their commercial
> practices, I believe that MS is founded on a simple principle that he who
> controls the O/S, controls everything else. To give that up would be
> anathema.

AFAIK not only MS is pushing for .NET to be standard (and C# too, but this is
not the concern here), but it was directly concerned that it does get ported to
at least a Unix platform. Surprise surprise: that's Linux.

Again AFAIK MS have an agreement with Corel that Corel, if asked so by MS within
2 years, will port .NET to Linux. And will do it within 1 year. And then keep
the port up to date within no more than 6 months from any MS released update to
.NET for at least 5 yers.

Corel promises to put on .NET duty no less than 1/2 of it's developlment
efforts.

Therefore you will probably not have to pay MS for .NET per se (you may for .NET
on Windows, of course). However, strictly speaking, nowere is written that the
port will be free, even if I doubt that either MS or Corel would bet a dime on
any non free SW for Linux! So logic tells me that the port will actually be
free.

In any case the real point in making .NET standard means that anybody could port
it to whatever OS.

How successfull .NET will be is just another question, but it looks like MS is
really on focus to make .NET as usefull as it can be, as open as it can be and
as universal as it can be. And even as free as it can be.

Eventually they have TONS of technology that is .NET ready (or almost). And
they'll get cash flowing from that door.

Andrea Ferro
-------------------------------
Urka s.r.l.
DVD Authoring and Premastering