How to create a 'Hello world' example for environments

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

How to create a 'Hello world' example for environments

Hannes Hirzel
Starting a new thread, culled from the thread 'What are environments for'.

There are many more good questions and thoughts in the  thread 'What
are environments for' but this thread is just about what the subject
says:

How to create a 'Hello world' example for environments

--Hannes

On 9/29/16, David T. Lewis <[hidden email]> wrote:

> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>> > Hi Nicolas,
>> >
>> > First, thank you for answering me in the other thread.
>> >
>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>> > <[hidden email]>:
>> >> Without clear goals or vision, fixing could essentially mean "let
>> >> Environment be transparent", that is let it remain a promise, a
>> >> potential,
>> >> whithout too many side effects... Not exactly YAGNI, just a bit of
>> >> over-engineered nice piece of code that might serve later. OK this
>> >> sounds
>> >> like a mandatory first step.


>> > I don't quite get what you mean by transparent, other than fixing it
>> > and enhancing the documentation to shed some light on what it is, why
>> > it is there and how to use it.
..
...

>> Another maybe simple use case could be to have a project specific
>> environment set up when you enter a project
>> (http://wiki.squeak.org/squeak/1020).
>>
>> We now have very nicely cleaned up Project code in Squeak 5.1
>>
>> 1) Subclass MorphicProject --- MyMorphicProject
>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>> 4) ... some more adaptations ..... to enter a new Environment -- how?
>>
>
> I like this idea a lot.
>
> I would love to see a simple "hello world!" level example of Environments.
> If someone could make an EnvironmentsDemoProject that opens a new project
> with
> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==> 'moo',
> I think it might really help me to understand how to use Environments.
>
> Dave

So let's focus on a 'hello world' example for environments and do it
_slowly_ step by step so that people can catch up with the issues.



Outline of steps of a 'Hello world' environments example
=============================================

Steps


1. subclass Object with a #Hello class.

2. compile a class method #say the method should write 'Hello' to the Transcript

3. run
    Hello say

    The result should be 'Hello' on the Transcript


4. create a new Environment called "myEnvironment".

5. import the Smalltalk environmnet into myEnvironment

6. subclass Object with a #Hello class in myEnvironment

7. compile a method #say the method should write 'Buenas dias' to the Transcript

   run
        Hello say

   Result should be

        30-Sept-2016

Starting a new thread, culled from the thread 'What are environments for'.

There are many more good questions and thoughts in the  thread 'What
are environments for' but this thread is just about what the subject
says:

How to create a 'Hello world' example for environments

--Hannes

On 9/29/16, David T. Lewis <[hidden email]> wrote:

> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>> > Hi Nicolas,
>> >
>> > First, thank you for answering me in the other thread.
>> >
>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>> > <[hidden email]>:
>> >> Without clear goals or vision, fixing could essentially mean "let
>> >> Environment be transparent", that is let it remain a promise, a
>> >> potential,
>> >> whithout too many side effects... Not exactly YAGNI, just a bit of
>> >> over-engineered nice piece of code that might serve later. OK this
>> >> sounds
>> >> like a mandatory first step.


>> > I don't quite get what you mean by transparent, other than fixing it
>> > and enhancing the documentation to shed some light on what it is, why
>> > it is there and how to use it.
..
...

>> Another maybe simple use case could be to have a project specific
>> environment set up when you enter a project
>> (http://wiki.squeak.org/squeak/1020).
>>
>> We now have very nicely cleaned up Project code in Squeak 5.1
>>
>> 1) Subclass MorphicProject --- MyMorphicProject
>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>> 4) ... some more adaptations ..... to enter a new Environment -- how?
>>
>
> I like this idea a lot.
>
> I would love to see a simple "hello world!" level example of Environments.
> If someone could make an EnvironmentsDemoProject that opens a new project
> with
> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==> 'moo',
> I think it might really help me to understand how to use Environments.
>
> Dave

So let's focus on a 'hello world' example for environments and do it
_slowly_ step by step so that people can catch up with the issues.



Outline of steps of a 'Hello world' environments example
=============================================

Steps


1. subclass Object with a #Hello class.

2. compile a class method #say the method should write 'Hello' to the Transcript

3. run
    Hello say

    The result should be 'Hello' on the Transcript


4. create a new Environment called "myEnvironment".

5. import the Smalltalk environmnet into myEnvironment

6. subclass Object with a #Hello class in myEnvironment

7. compile a method #say the method should write 'Buenas dias' to the Transcript

   run
        Hello say

    The result should be 'Buenas dias' on the Transcript


8. Leave environment called 'myEnvironment'


9. run
    Hello say

    The result should be this time 'Hello' on the Transcript



Any comments on these steps?

Reply | Threaded
Open this post in threaded view
|

Re: How to create a 'Hello world' example for environments

Jakob Reschke
Hello,

Looks good to me as an outline. I have the following comments,
questions or doubts:

1. Currently, for me it does not feel like "entering" or "leaving" an
Environment, as that works with dynamic scoping in a block. So step 8
could turn out to be void.

2. Since all of this should go into a workspace, not into the browser,
what is the shortest applicable snippet of code that, given a source
code string and a class, creates a new method in that class?

3. I am not sure what will happen if you attempt to create a subclass
that has the same name as another imported class. Generally,
evaluating Superclass subclass: #Subclass ... a second time will
replace the former Subclass by the new Subclass. 'myEnvironment' would
have imported Hello from Smalltalk globals, so an "old" Hello is
already visible. We have to check that evaluating the subclass
expression will not try to update that existing Hello class, but
create a new one instead. Here, the "shallow" lookup mechanism would
be needed.

Once I have figured out 2. I will try out and check 3. ;-)

Kind regards,
Jakob


2016-09-30 13:29 GMT+02:00 H. Hirzel <[hidden email]>:

> Starting a new thread, culled from the thread 'What are environments for'.
>
> There are many more good questions and thoughts in the  thread 'What
> are environments for' but this thread is just about what the subject
> says:
>
> How to create a 'Hello world' example for environments
>
> --Hannes
>
> On 9/29/16, David T. Lewis <[hidden email]> wrote:
>> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>>> > Hi Nicolas,
>>> >
>>> > First, thank you for answering me in the other thread.
>>> >
>>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>>> > <[hidden email]>:
>>> >> Without clear goals or vision, fixing could essentially mean "let
>>> >> Environment be transparent", that is let it remain a promise, a
>>> >> potential,
>>> >> whithout too many side effects... Not exactly YAGNI, just a bit of
>>> >> over-engineered nice piece of code that might serve later. OK this
>>> >> sounds
>>> >> like a mandatory first step.
>
>
>>> > I don't quite get what you mean by transparent, other than fixing it
>>> > and enhancing the documentation to shed some light on what it is, why
>>> > it is there and how to use it.
> ..
> ...
>
>>> Another maybe simple use case could be to have a project specific
>>> environment set up when you enter a project
>>> (http://wiki.squeak.org/squeak/1020).
>>>
>>> We now have very nicely cleaned up Project code in Squeak 5.1
>>>
>>> 1) Subclass MorphicProject --- MyMorphicProject
>>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>>> 4) ... some more adaptations ..... to enter a new Environment -- how?
>>>
>>
>> I like this idea a lot.
>>
>> I would love to see a simple "hello world!" level example of Environments.
>> If someone could make an EnvironmentsDemoProject that opens a new project
>> with
>> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==> 'moo',
>> I think it might really help me to understand how to use Environments.
>>
>> Dave
>
> So let's focus on a 'hello world' example for environments and do it
> _slowly_ step by step so that people can catch up with the issues.
>
>
>
> Outline of steps of a 'Hello world' environments example
> =============================================
>
> Steps
>
>
> 1. subclass Object with a #Hello class.
>
> 2. compile a class method #say the method should write 'Hello' to the Transcript
>
> 3. run
>     Hello say
>
>     The result should be 'Hello' on the Transcript
>
>
> 4. create a new Environment called "myEnvironment".
>
> 5. import the Smalltalk environmnet into myEnvironment
>
> 6. subclass Object with a #Hello class in myEnvironment
>
> 7. compile a method #say the method should write 'Buenas dias' to the Transcript
>
>    run
>         Hello say
>
>    Result should be
>
>         30-Sept-2016
>
> Starting a new thread, culled from the thread 'What are environments for'.
>
> There are many more good questions and thoughts in the  thread 'What
> are environments for' but this thread is just about what the subject
> says:
>
> How to create a 'Hello world' example for environments
>
> --Hannes
>
> On 9/29/16, David T. Lewis <[hidden email]> wrote:
>> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>>> > Hi Nicolas,
>>> >
>>> > First, thank you for answering me in the other thread.
>>> >
>>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>>> > <[hidden email]>:
>>> >> Without clear goals or vision, fixing could essentially mean "let
>>> >> Environment be transparent", that is let it remain a promise, a
>>> >> potential,
>>> >> whithout too many side effects... Not exactly YAGNI, just a bit of
>>> >> over-engineered nice piece of code that might serve later. OK this
>>> >> sounds
>>> >> like a mandatory first step.
>
>
>>> > I don't quite get what you mean by transparent, other than fixing it
>>> > and enhancing the documentation to shed some light on what it is, why
>>> > it is there and how to use it.
> ..
> ...
>
>>> Another maybe simple use case could be to have a project specific
>>> environment set up when you enter a project
>>> (http://wiki.squeak.org/squeak/1020).
>>>
>>> We now have very nicely cleaned up Project code in Squeak 5.1
>>>
>>> 1) Subclass MorphicProject --- MyMorphicProject
>>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>>> 4) ... some more adaptations ..... to enter a new Environment -- how?
>>>
>>
>> I like this idea a lot.
>>
>> I would love to see a simple "hello world!" level example of Environments.
>> If someone could make an EnvironmentsDemoProject that opens a new project
>> with
>> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==> 'moo',
>> I think it might really help me to understand how to use Environments.
>>
>> Dave
>
> So let's focus on a 'hello world' example for environments and do it
> _slowly_ step by step so that people can catch up with the issues.
>
>
>
> Outline of steps of a 'Hello world' environments example
> =============================================
>
> Steps
>
>
> 1. subclass Object with a #Hello class.
>
> 2. compile a class method #say the method should write 'Hello' to the Transcript
>
> 3. run
>     Hello say
>
>     The result should be 'Hello' on the Transcript
>
>
> 4. create a new Environment called "myEnvironment".
>
> 5. import the Smalltalk environmnet into myEnvironment
>
> 6. subclass Object with a #Hello class in myEnvironment
>
> 7. compile a method #say the method should write 'Buenas dias' to the Transcript
>
>    run
>         Hello say
>
>     The result should be 'Buenas dias' on the Transcript
>
>
> 8. Leave environment called 'myEnvironment'
>
>
> 9. run
>     Hello say
>
>     The result should be this time 'Hello' on the Transcript
>
>
>
> Any comments on these steps?
>

Reply | Threaded
Open this post in threaded view
|

Re: How to create a 'Hello world' example for environments

Nicolas Cellier


2016-09-30 14:57 GMT+02:00 Jakob Reschke <[hidden email]>:
Hello,

Looks good to me as an outline. I have the following comments,
questions or doubts:

1. Currently, for me it does not feel like "entering" or "leaving" an
Environment, as that works with dynamic scoping in a block. So step 8
could turn out to be void.

2. Since all of this should go into a workspace, not into the browser,
what is the shortest applicable snippet of code that, given a source
code string and a class, creates a new method in that class?

3. I am not sure what will happen if you attempt to create a subclass
that has the same name as another imported class. Generally,
evaluating Superclass subclass: #Subclass ... a second time will
replace the former Subclass by the new Subclass. 'myEnvironment' would
have imported Hello from Smalltalk globals, so an "old" Hello is
already visible. We have to check that evaluating the subclass
expression will not try to update that existing Hello class, but
create a new one instead. Here, the "shallow" lookup mechanism would
be needed.

Don't import: Smalltalk globals entirely, just from: Smalltalk globals import: #Transcript.
and #Object too, depending in which environment you'll evaluate the message for creating the class...
 
Once I have figured out 2. I will try out and check 3. ;-)

Kind regards,
Jakob


Here is a snippet that works, but is not especially short.

| createHelloClass createHelloMethod english spanish |

"Straight but verbose code to create a Hello class and compile a say method.
 There's one trick: Environment current, otherwise Compiler would evaluate in nil class environment, not good"
createHelloClass := [Object subclass: #Hello
            instanceVariableNames: ''
            classVariableNames: ''
            poolDictionaries: ''
            category: 'Test'].
createHelloMethod := [:greeting |
    | methodSource sourceCode |
    methodSource := 'say Transcript cr; show: ' , greeting printString.
    sourceCode := 'Hello class compile: ' , methodSource printString , ' classified: ' , 'test' printString.
    Compiler evaluate: sourceCode environment: Environment current].

"Create the english and spanish environments"
english := Smalltalk globals.
spanish := Environment withName: 'Spanish'.
spanish importSelf.
spanish from: english import: #Transcript.

"Create the class and compile the method in each environment:"

[createHelloClass value.
createHelloMethod value: 'Hello world'] on: CurrentEnvironment do: [:exc | exc resume: english].

[createHelloClass value.
createHelloMethod value: 'Buenos dias'] on: CurrentEnvironment do: [:exc | exc resume: spanish].

"Greet"
Compiler evaluate: 'Hello say' environment: english.
Compiler evaluate: 'Hello say' environment: spanish.
Compiler evaluate: 'Hello say' environment: english.

"Cleanup"
[Compiler evaluate: 'Hello removeFromSystem' environment: Environment current] on: CurrentEnvironment do: [:exc | exc resume: english].
[Compiler evaluate: 'Hello removeFromSystem' environment: Environment current] on: CurrentEnvironment do: [:exc | exc resume: spanish].
 
Yes, a DynamicVariable:
   CurrentEnvironment value: english during: ["load something"].
would be nicer than:
    ["load something"] on: CurrentEnvironment do: [:exc | exc resume: english].
Otherwise we coulf fileIn some chunk format stream thru en EnvironmentLoader for: english...


2016-09-30 13:29 GMT+02:00 H. Hirzel <[hidden email]>:
> Starting a new thread, culled from the thread 'What are environments for'.
>
> There are many more good questions and thoughts in the  thread 'What
> are environments for' but this thread is just about what the subject
> says:
>
> How to create a 'Hello world' example for environments
>
> --Hannes
>
> On 9/29/16, David T. Lewis <[hidden email]> wrote:
>> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>>> > Hi Nicolas,
>>> >
>>> > First, thank you for answering me in the other thread.
>>> >
>>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>>> > <[hidden email]>:
>>> >> Without clear goals or vision, fixing could essentially mean "let
>>> >> Environment be transparent", that is let it remain a promise, a
>>> >> potential,
>>> >> whithout too many side effects... Not exactly YAGNI, just a bit of
>>> >> over-engineered nice piece of code that might serve later. OK this
>>> >> sounds
>>> >> like a mandatory first step.
>
>
>>> > I don't quite get what you mean by transparent, other than fixing it
>>> > and enhancing the documentation to shed some light on what it is, why
>>> > it is there and how to use it.
> ..
> ...
>
>>> Another maybe simple use case could be to have a project specific
>>> environment set up when you enter a project
>>> (http://wiki.squeak.org/squeak/1020).
>>>
>>> We now have very nicely cleaned up Project code in Squeak 5.1
>>>
>>> 1) Subclass MorphicProject --- MyMorphicProject
>>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>>> 4) ... some more adaptations ..... to enter a new Environment -- how?
>>>
>>
>> I like this idea a lot.
>>
>> I would love to see a simple "hello world!" level example of Environments.
>> If someone could make an EnvironmentsDemoProject that opens a new project
>> with
>> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==> 'moo',
>> I think it might really help me to understand how to use Environments.
>>
>> Dave
>
> So let's focus on a 'hello world' example for environments and do it
> _slowly_ step by step so that people can catch up with the issues.
>
>
>
> Outline of steps of a 'Hello world' environments example
> =============================================
>
> Steps
>
>
> 1. subclass Object with a #Hello class.
>
> 2. compile a class method #say the method should write 'Hello' to the Transcript
>
> 3. run
>     Hello say
>
>     The result should be 'Hello' on the Transcript
>
>
> 4. create a new Environment called "myEnvironment".
>
> 5. import the Smalltalk environmnet into myEnvironment
>
> 6. subclass Object with a #Hello class in myEnvironment
>
> 7. compile a method #say the method should write 'Buenas dias' to the Transcript
>
>    run
>         Hello say
>
>    Result should be
>
>         30-Sept-2016
>
> Starting a new thread, culled from the thread 'What are environments for'.
>
> There are many more good questions and thoughts in the  thread 'What
> are environments for' but this thread is just about what the subject
> says:
>
> How to create a 'Hello world' example for environments
>
> --Hannes
>
> On 9/29/16, David T. Lewis <[hidden email]> wrote:
>> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>>> > Hi Nicolas,
>>> >
>>> > First, thank you for answering me in the other thread.
>>> >
>>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>>> > <[hidden email]>:
>>> >> Without clear goals or vision, fixing could essentially mean "let
>>> >> Environment be transparent", that is let it remain a promise, a
>>> >> potential,
>>> >> whithout too many side effects... Not exactly YAGNI, just a bit of
>>> >> over-engineered nice piece of code that might serve later. OK this
>>> >> sounds
>>> >> like a mandatory first step.
>
>
>>> > I don't quite get what you mean by transparent, other than fixing it
>>> > and enhancing the documentation to shed some light on what it is, why
>>> > it is there and how to use it.
> ..
> ...
>
>>> Another maybe simple use case could be to have a project specific
>>> environment set up when you enter a project
>>> (http://wiki.squeak.org/squeak/1020).
>>>
>>> We now have very nicely cleaned up Project code in Squeak 5.1
>>>
>>> 1) Subclass MorphicProject --- MyMorphicProject
>>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>>> 4) ... some more adaptations ..... to enter a new Environment -- how?
>>>
>>
>> I like this idea a lot.
>>
>> I would love to see a simple "hello world!" level example of Environments.
>> If someone could make an EnvironmentsDemoProject that opens a new project
>> with
>> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==> 'moo',
>> I think it might really help me to understand how to use Environments.
>>
>> Dave
>
> So let's focus on a 'hello world' example for environments and do it
> _slowly_ step by step so that people can catch up with the issues.
>
>
>
> Outline of steps of a 'Hello world' environments example
> =============================================
>
> Steps
>
>
> 1. subclass Object with a #Hello class.
>
> 2. compile a class method #say the method should write 'Hello' to the Transcript
>
> 3. run
>     Hello say
>
>     The result should be 'Hello' on the Transcript
>
>
> 4. create a new Environment called "myEnvironment".
>
> 5. import the Smalltalk environmnet into myEnvironment
>
> 6. subclass Object with a #Hello class in myEnvironment
>
> 7. compile a method #say the method should write 'Buenas dias' to the Transcript
>
>    run
>         Hello say
>
>     The result should be 'Buenas dias' on the Transcript
>
>
> 8. Leave environment called 'myEnvironment'
>
>
> 9. run
>     Hello say
>
>     The result should be this time 'Hello' on the Transcript
>
>
>
> Any comments on these steps?
>




Reply | Threaded
Open this post in threaded view
|

Re: How to create a 'Hello world' example for environments

Frank Shearar-3


On Sep 30, 2016 09:50, "Nicolas Cellier" <[hidden email]> wrote:
>
>
>
> 2016-09-30 14:57 GMT+02:00 Jakob Reschke <[hidden email]>:
>>
>> Hello,
>>
>> Looks good to me as an outline. I have the following comments,
>> questions or doubts:
>>
>> 1. Currently, for me it does not feel like "entering" or "leaving" an
>> Environment, as that works with dynamic scoping in a block. So step 8
>> could turn out to be void.
>>
>> 2. Since all of this should go into a workspace, not into the browser,
>> what is the shortest applicable snippet of code that, given a source
>> code string and a class, creates a new method in that class?
>>
>> 3. I am not sure what will happen if you attempt to create a subclass
>> that has the same name as another imported class. Generally,
>> evaluating Superclass subclass: #Subclass ... a second time will
>> replace the former Subclass by the new Subclass. 'myEnvironment' would
>> have imported Hello from Smalltalk globals, so an "old" Hello is
>> already visible. We have to check that evaluating the subclass
>> expression will not try to update that existing Hello class, but
>> create a new one instead. Here, the "shallow" lookup mechanism would
>> be needed.
>>
> Don't import: Smalltalk globals entirely, just from: Smalltalk globals import: #Transcript.
> and #Object too, depending in which environment you'll evaluate the message for creating the class...
>  
>>
>> Once I have figured out 2. I will try out and check 3. ;-)
>>
>> Kind regards,
>> Jakob
>>
>
> Here is a snippet that works, but is not especially short.
>
> | createHelloClass createHelloMethod english spanish |
>
> "Straight but verbose code to create a Hello class and compile a say method.
>  There's one trick: Environment current, otherwise Compiler would evaluate in nil class environment, not good"
> createHelloClass := [Object subclass: #Hello
>             instanceVariableNames: ''
>             classVariableNames: ''
>             poolDictionaries: ''
>             category: 'Test'].
> createHelloMethod := [:greeting |
>     | methodSource sourceCode |
>     methodSource := 'say Transcript cr; show: ' , greeting printString.
>     sourceCode := 'Hello class compile: ' , methodSource printString , ' classified: ' , 'test' printString.
>     Compiler evaluate: sourceCode environment: Environment current].
>
> "Create the english and spanish environments"
> english := Smalltalk globals.
> spanish := Environment withName: 'Spanish'.
> spanish importSelf.
> spanish from: english import: #Transcript.
>
> "Create the class and compile the method in each environment:"
>
> [createHelloClass value.
> createHelloMethod value: 'Hello world'] on: CurrentEnvironment do: [:exc | exc resume: english].
>
> [createHelloClass value.
> createHelloMethod value: 'Buenos dias'] on: CurrentEnvironment do: [:exc | exc resume: spanish].
>
> "Greet"
> Compiler evaluate: 'Hello say' environment: english.
> Compiler evaluate: 'Hello say' environment: spanish.
> Compiler evaluate: 'Hello say' environment: english.
>
> "Cleanup"
> [Compiler evaluate: 'Hello removeFromSystem' environment: Environment current] on: CurrentEnvironment do: [:exc | exc resume: english].
> [Compiler evaluate: 'Hello removeFromSystem' environment: Environment current] on: CurrentEnvironment do: [:exc | exc resume: spanish].
>  
> Yes, a DynamicVariable:
>    CurrentEnvironment value: english during: ["load something"].
> would be nicer than:
>     ["load something"] on: CurrentEnvironment do: [:exc | exc resume: english].
> Otherwise we coulf fileIn some chunk format stream thru en EnvironmentLoader for: english...

I wrote Control to do pretty much that: give a nice interface through which to create and change delimited dynamic variables (and delimited continuations). I would link to it (it's on SS3) but my phone is a bit limited...

frank

>> 2016-09-30 13:29 GMT+02:00 H. Hirzel <[hidden email]>:
>> > Starting a new thread, culled from the thread 'What are environments for'.
>> >
>> > There are many more good questions and thoughts in the  thread 'What
>> > are environments for' but this thread is just about what the subject
>> > says:
>> >
>> > How to create a 'Hello world' example for environments
>> >
>> > --Hannes
>> >
>> > On 9/29/16, David T. Lewis <[hidden email]> wrote:
>> >> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>> >>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>> >>> > Hi Nicolas,
>> >>> >
>> >>> > First, thank you for answering me in the other thread.
>> >>> >
>> >>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>> >>> > <[hidden email]>:
>> >>> >> Without clear goals or vision, fixing could essentially mean "let
>> >>> >> Environment be transparent", that is let it remain a promise, a
>> >>> >> potential,
>> >>> >> whithout too many side effects... Not exactly YAGNI, just a bit of
>> >>> >> over-engineered nice piece of code that might serve later. OK this
>> >>> >> sounds
>> >>> >> like a mandatory first step.
>> >
>> >
>> >>> > I don't quite get what you mean by transparent, other than fixing it
>> >>> > and enhancing the documentation to shed some light on what it is, why
>> >>> > it is there and how to use it.
>> > ..
>> > ...
>> >
>> >>> Another maybe simple use case could be to have a project specific
>> >>> environment set up when you enter a project
>> >>> (http://wiki.squeak.org/squeak/1020).
>> >>>
>> >>> We now have very nicely cleaned up Project code in Squeak 5.1
>> >>>
>> >>> 1) Subclass MorphicProject --- MyMorphicProject
>> >>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>> >>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>> >>> 4) ... some more adaptations ..... to enter a new Environment -- how?
>> >>>
>> >>
>> >> I like this idea a lot.
>> >>
>> >> I would love to see a simple "hello world!" level example of Environments.
>> >> If someone could make an EnvironmentsDemoProject that opens a new project
>> >> with
>> >> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==> 'moo',
>> >> I think it might really help me to understand how to use Environments.
>> >>
>> >> Dave
>> >
>> > So let's focus on a 'hello world' example for environments and do it
>> > _slowly_ step by step so that people can catch up with the issues.
>> >
>> >
>> >
>> > Outline of steps of a 'Hello world' environments example
>> > =============================================
>> >
>> > Steps
>> >
>> >
>> > 1. subclass Object with a #Hello class.
>> >
>> > 2. compile a class method #say the method should write 'Hello' to the Transcript
>> >
>> > 3. run
>> >     Hello say
>> >
>> >     The result should be 'Hello' on the Transcript
>> >
>> >
>> > 4. create a new Environment called "myEnvironment".
>> >
>> > 5. import the Smalltalk environmnet into myEnvironment
>> >
>> > 6. subclass Object with a #Hello class in myEnvironment
>> >
>> > 7. compile a method #say the method should write 'Buenas dias' to the Transcript
>> >
>> >    run
>> >         Hello say
>> >
>> >    Result should be
>> >
>> >         30-Sept-2016
>> >
>> > Starting a new thread, culled from the thread 'What are environments for'.
>> >
>> > There are many more good questions and thoughts in the  thread 'What
>> > are environments for' but this thread is just about what the subject
>> > says:
>> >
>> > How to create a 'Hello world' example for environments
>> >
>> > --Hannes
>> >
>> > On 9/29/16, David T. Lewis <[hidden email]> wrote:
>> >> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>> >>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>> >>> > Hi Nicolas,
>> >>> >
>> >>> > First, thank you for answering me in the other thread.
>> >>> >
>> >>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>> >>> > <[hidden email]>:
>> >>> >> Without clear goals or vision, fixing could essentially mean "let
>> >>> >> Environment be transparent", that is let it remain a promise, a
>> >>> >> potential,
>> >>> >> whithout too many side effects... Not exactly YAGNI, just a bit of
>> >>> >> over-engineered nice piece of code that might serve later. OK this
>> >>> >> sounds
>> >>> >> like a mandatory first step.
>> >
>> >
>> >>> > I don't quite get what you mean by transparent, other than fixing it
>> >>> > and enhancing the documentation to shed some light on what it is, why
>> >>> > it is there and how to use it.
>> > ..
>> > ...
>> >
>> >>> Another maybe simple use case could be to have a project specific
>> >>> environment set up when you enter a project
>> >>> (http://wiki.squeak.org/squeak/1020).
>> >>>
>> >>> We now have very nicely cleaned up Project code in Squeak 5.1
>> >>>
>> >>> 1) Subclass MorphicProject --- MyMorphicProject
>> >>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>> >>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>> >>> 4) ... some more adaptations ..... to enter a new Environment -- how?
>> >>>
>> >>
>> >> I like this idea a lot.
>> >>
>> >> I would love to see a simple "hello world!" level example of Environments.
>> >> If someone could make an EnvironmentsDemoProject that opens a new project
>> >> with
>> >> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==> 'moo',
>> >> I think it might really help me to understand how to use Environments.
>> >>
>> >> Dave
>> >
>> > So let's focus on a 'hello world' example for environments and do it
>> > _slowly_ step by step so that people can catch up with the issues.
>> >
>> >
>> >
>> > Outline of steps of a 'Hello world' environments example
>> > =============================================
>> >
>> > Steps
>> >
>> >
>> > 1. subclass Object with a #Hello class.
>> >
>> > 2. compile a class method #say the method should write 'Hello' to the Transcript
>> >
>> > 3. run
>> >     Hello say
>> >
>> >     The result should be 'Hello' on the Transcript
>> >
>> >
>> > 4. create a new Environment called "myEnvironment".
>> >
>> > 5. import the Smalltalk environmnet into myEnvironment
>> >
>> > 6. subclass Object with a #Hello class in myEnvironment
>> >
>> > 7. compile a method #say the method should write 'Buenas dias' to the Transcript
>> >
>> >    run
>> >         Hello say
>> >
>> >     The result should be 'Buenas dias' on the Transcript
>> >
>> >
>> > 8. Leave environment called 'myEnvironment'
>> >
>> >
>> > 9. run
>> >     Hello say
>> >
>> >     The result should be this time 'Hello' on the Transcript
>> >
>> >
>> >
>> > Any comments on these steps?
>> >
>>
>
>
>
>



Reply | Threaded
Open this post in threaded view
|

Re: How to create a 'Hello world' example for environments

Hannes Hirzel
Good, so let's wait until next week....

--Hannes


P.S. Another thing is that  we need glossary entries on the swiki for
- delimited dynamic variables
- delimited continuations

On 10/1/16, Frank Shearar <[hidden email]> wrote:

> On Sep 30, 2016 09:50, "Nicolas Cellier"
> <[hidden email]>
> wrote:
>>
>>
>>
>> 2016-09-30 14:57 GMT+02:00 Jakob Reschke <[hidden email]>:
>>>
>>> Hello,
>>>
>>> Looks good to me as an outline. I have the following comments,
>>> questions or doubts:
>>>
>>> 1. Currently, for me it does not feel like "entering" or "leaving" an
>>> Environment, as that works with dynamic scoping in a block. So step 8
>>> could turn out to be void.
>>>
>>> 2. Since all of this should go into a workspace, not into the browser,
>>> what is the shortest applicable snippet of code that, given a source
>>> code string and a class, creates a new method in that class?
>>>
>>> 3. I am not sure what will happen if you attempt to create a subclass
>>> that has the same name as another imported class. Generally,
>>> evaluating Superclass subclass: #Subclass ... a second time will
>>> replace the former Subclass by the new Subclass. 'myEnvironment' would
>>> have imported Hello from Smalltalk globals, so an "old" Hello is
>>> already visible. We have to check that evaluating the subclass
>>> expression will not try to update that existing Hello class, but
>>> create a new one instead. Here, the "shallow" lookup mechanism would
>>> be needed.
>>>
>> Don't import: Smalltalk globals entirely, just from: Smalltalk globals
> import: #Transcript.
>> and #Object too, depending in which environment you'll evaluate the
> message for creating the class...
>>
>>>
>>> Once I have figured out 2. I will try out and check 3. ;-)
>>>
>>> Kind regards,
>>> Jakob
>>>
>>
>> Here is a snippet that works, but is not especially short.
>>
>> | createHelloClass createHelloMethod english spanish |
>>
>> "Straight but verbose code to create a Hello class and compile a say
> method.
>>  There's one trick: Environment current, otherwise Compiler would
> evaluate in nil class environment, not good"
>> createHelloClass := [Object subclass: #Hello
>>             instanceVariableNames: ''
>>             classVariableNames: ''
>>             poolDictionaries: ''
>>             category: 'Test'].
>> createHelloMethod := [:greeting |
>>     | methodSource sourceCode |
>>     methodSource := 'say Transcript cr; show: ' , greeting printString.
>>     sourceCode := 'Hello class compile: ' , methodSource printString , '
> classified: ' , 'test' printString.
>>     Compiler evaluate: sourceCode environment: Environment current].
>>
>> "Create the english and spanish environments"
>> english := Smalltalk globals.
>> spanish := Environment withName: 'Spanish'.
>> spanish importSelf.
>> spanish from: english import: #Transcript.
>>
>> "Create the class and compile the method in each environment:"
>>
>> [createHelloClass value.
>> createHelloMethod value: 'Hello world'] on: CurrentEnvironment do: [:exc
> | exc resume: english].
>>
>> [createHelloClass value.
>> createHelloMethod value: 'Buenos dias'] on: CurrentEnvironment do: [:exc
> | exc resume: spanish].
>>
>> "Greet"
>> Compiler evaluate: 'Hello say' environment: english.
>> Compiler evaluate: 'Hello say' environment: spanish.
>> Compiler evaluate: 'Hello say' environment: english.
>>
>> "Cleanup"
>> [Compiler evaluate: 'Hello removeFromSystem' environment: Environment
> current] on: CurrentEnvironment do: [:exc | exc resume: english].
>> [Compiler evaluate: 'Hello removeFromSystem' environment: Environment
> current] on: CurrentEnvironment do: [:exc | exc resume: spanish].
>>
>> Yes, a DynamicVariable:
>>    CurrentEnvironment value: english during: ["load something"].
>> would be nicer than:
>>     ["load something"] on: CurrentEnvironment do: [:exc | exc resume:
> english].
>> Otherwise we coulf fileIn some chunk format stream thru en
> EnvironmentLoader for: english...
>
> I wrote Control to do pretty much that: give a nice interface through which
> to create and change delimited dynamic variables (and delimited
> continuations). I would link to it (it's on SS3) but my phone is a bit
> limited...
>
> frank
>
>>> 2016-09-30 13:29 GMT+02:00 H. Hirzel <[hidden email]>:
>>> > Starting a new thread, culled from the thread 'What are environments
> for'.
>>> >
>>> > There are many more good questions and thoughts in the  thread 'What
>>> > are environments for' but this thread is just about what the subject
>>> > says:
>>> >
>>> > How to create a 'Hello world' example for environments
>>> >
>>> > --Hannes
>>> >
>>> > On 9/29/16, David T. Lewis <[hidden email]> wrote:
>>> >> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>>> >>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>>> >>> > Hi Nicolas,
>>> >>> >
>>> >>> > First, thank you for answering me in the other thread.
>>> >>> >
>>> >>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>>> >>> > <[hidden email]>:
>>> >>> >> Without clear goals or vision, fixing could essentially mean "let
>>> >>> >> Environment be transparent", that is let it remain a promise, a
>>> >>> >> potential,
>>> >>> >> whithout too many side effects... Not exactly YAGNI, just a bit
>>> >>> >> of
>>> >>> >> over-engineered nice piece of code that might serve later. OK
>>> >>> >> this
>>> >>> >> sounds
>>> >>> >> like a mandatory first step.
>>> >
>>> >
>>> >>> > I don't quite get what you mean by transparent, other than fixing
> it
>>> >>> > and enhancing the documentation to shed some light on what it is,
> why
>>> >>> > it is there and how to use it.
>>> > ..
>>> > ...
>>> >
>>> >>> Another maybe simple use case could be to have a project specific
>>> >>> environment set up when you enter a project
>>> >>> (http://wiki.squeak.org/squeak/1020).
>>> >>>
>>> >>> We now have very nicely cleaned up Project code in Squeak 5.1
>>> >>>
>>> >>> 1) Subclass MorphicProject --- MyMorphicProject
>>> >>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>>> >>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>>> >>> 4) ... some more adaptations ..... to enter a new Environment --
>>> >>> how?
>>> >>>
>>> >>
>>> >> I like this idea a lot.
>>> >>
>>> >> I would love to see a simple "hello world!" level example of
> Environments.
>>> >> If someone could make an EnvironmentsDemoProject that opens a new
> project
>>> >> with
>>> >> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==>
> 'moo',
>>> >> I think it might really help me to understand how to use
>>> >> Environments.
>>> >>
>>> >> Dave
>>> >
>>> > So let's focus on a 'hello world' example for environments and do it
>>> > _slowly_ step by step so that people can catch up with the issues.
>>> >
>>> >
>>> >
>>> > Outline of steps of a 'Hello world' environments example
>>> > =============================================
>>> >
>>> > Steps
>>> >
>>> >
>>> > 1. subclass Object with a #Hello class.
>>> >
>>> > 2. compile a class method #say the method should write 'Hello' to the
> Transcript
>>> >
>>> > 3. run
>>> >     Hello say
>>> >
>>> >     The result should be 'Hello' on the Transcript
>>> >
>>> >
>>> > 4. create a new Environment called "myEnvironment".
>>> >
>>> > 5. import the Smalltalk environmnet into myEnvironment
>>> >
>>> > 6. subclass Object with a #Hello class in myEnvironment
>>> >
>>> > 7. compile a method #say the method should write 'Buenas dias' to the
> Transcript
>>> >
>>> >    run
>>> >         Hello say
>>> >
>>> >    Result should be
>>> >
>>> >         30-Sept-2016
>>> >
>>> > Starting a new thread, culled from the thread 'What are environments
> for'.
>>> >
>>> > There are many more good questions and thoughts in the  thread 'What
>>> > are environments for' but this thread is just about what the subject
>>> > says:
>>> >
>>> > How to create a 'Hello world' example for environments
>>> >
>>> > --Hannes
>>> >
>>> > On 9/29/16, David T. Lewis <[hidden email]> wrote:
>>> >> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>>> >>> On 9/29/16, Jakob Reschke <[hidden email]> wrote:
>>> >>> > Hi Nicolas,
>>> >>> >
>>> >>> > First, thank you for answering me in the other thread.
>>> >>> >
>>> >>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>>> >>> > <[hidden email]>:
>>> >>> >> Without clear goals or vision, fixing could essentially mean "let
>>> >>> >> Environment be transparent", that is let it remain a promise, a
>>> >>> >> potential,
>>> >>> >> whithout too many side effects... Not exactly YAGNI, just a bit
>>> >>> >> of
>>> >>> >> over-engineered nice piece of code that might serve later. OK
>>> >>> >> this
>>> >>> >> sounds
>>> >>> >> like a mandatory first step.
>>> >
>>> >
>>> >>> > I don't quite get what you mean by transparent, other than fixing
> it
>>> >>> > and enhancing the documentation to shed some light on what it is,
> why
>>> >>> > it is there and how to use it.
>>> > ..
>>> > ...
>>> >
>>> >>> Another maybe simple use case could be to have a project specific
>>> >>> environment set up when you enter a project
>>> >>> (http://wiki.squeak.org/squeak/1020).
>>> >>>
>>> >>> We now have very nicely cleaned up Project code in Squeak 5.1
>>> >>>
>>> >>> 1) Subclass MorphicProject --- MyMorphicProject
>>> >>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>>> >>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>>> >>> 4) ... some more adaptations ..... to enter a new Environment --
>>> >>> how?
>>> >>>
>>> >>
>>> >> I like this idea a lot.
>>> >>
>>> >> I would love to see a simple "hello world!" level example of
> Environments.
>>> >> If someone could make an EnvironmentsDemoProject that opens a new
> project
>>> >> with
>>> >> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==>
> 'moo',
>>> >> I think it might really help me to understand how to use
>>> >> Environments.
>>> >>
>>> >> Dave
>>> >
>>> > So let's focus on a 'hello world' example for environments and do it
>>> > _slowly_ step by step so that people can catch up with the issues.
>>> >
>>> >
>>> >
>>> > Outline of steps of a 'Hello world' environments example
>>> > =============================================
>>> >
>>> > Steps
>>> >
>>> >
>>> > 1. subclass Object with a #Hello class.
>>> >
>>> > 2. compile a class method #say the method should write 'Hello' to the
> Transcript
>>> >
>>> > 3. run
>>> >     Hello say
>>> >
>>> >     The result should be 'Hello' on the Transcript
>>> >
>>> >
>>> > 4. create a new Environment called "myEnvironment".
>>> >
>>> > 5. import the Smalltalk environmnet into myEnvironment
>>> >
>>> > 6. subclass Object with a #Hello class in myEnvironment
>>> >
>>> > 7. compile a method #say the method should write 'Buenas dias' to the
> Transcript
>>> >
>>> >    run
>>> >         Hello say
>>> >
>>> >     The result should be 'Buenas dias' on the Transcript
>>> >
>>> >
>>> > 8. Leave environment called 'myEnvironment'
>>> >
>>> >
>>> > 9. run
>>> >     Hello say
>>> >
>>> >     The result should be this time 'Hello' on the Transcript
>>> >
>>> >
>>> >
>>> > Any comments on these steps?
>>> >
>>>
>>
>>
>>
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: How to create a 'Hello world' example for environments

Kjell Godo
+1

On Saturday, October 1, 2016, H. Hirzel <[hidden email]> wrote:
Good, so let's wait until next week....

--Hannes


P.S. Another thing is that  we need glossary entries on the swiki for
- delimited dynamic variables
- delimited continuations

On 10/1/16, Frank Shearar <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;frank.shearar@gmail.com&#39;)">frank.shearar@...> wrote:
> On Sep 30, 2016 09:50, "Nicolas Cellier"
> <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;nicolas.cellier.aka.nice@gmail.com&#39;)">nicolas.cellier.aka.nice@...>
> wrote:
>>
>>
>>
>> 2016-09-30 14:57 GMT+02:00 Jakob Reschke <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;jakob.reschke@student.hpi.de&#39;)">jakob.reschke@...>:
>>>
>>> Hello,
>>>
>>> Looks good to me as an outline. I have the following comments,
>>> questions or doubts:
>>>
>>> 1. Currently, for me it does not feel like "entering" or "leaving" an
>>> Environment, as that works with dynamic scoping in a block. So step 8
>>> could turn out to be void.
>>>
>>> 2. Since all of this should go into a workspace, not into the browser,
>>> what is the shortest applicable snippet of code that, given a source
>>> code string and a class, creates a new method in that class?
>>>
>>> 3. I am not sure what will happen if you attempt to create a subclass
>>> that has the same name as another imported class. Generally,
>>> evaluating Superclass subclass: #Subclass ... a second time will
>>> replace the former Subclass by the new Subclass. 'myEnvironment' would
>>> have imported Hello from Smalltalk globals, so an "old" Hello is
>>> already visible. We have to check that evaluating the subclass
>>> expression will not try to update that existing Hello class, but
>>> create a new one instead. Here, the "shallow" lookup mechanism would
>>> be needed.
>>>
>> Don't import: Smalltalk globals entirely, just from: Smalltalk globals
> import: #Transcript.
>> and #Object too, depending in which environment you'll evaluate the
> message for creating the class...
>>
>>>
>>> Once I have figured out 2. I will try out and check 3. ;-)
>>>
>>> Kind regards,
>>> Jakob
>>>
>>
>> Here is a snippet that works, but is not especially short.
>>
>> | createHelloClass createHelloMethod english spanish |
>>
>> "Straight but verbose code to create a Hello class and compile a say
> method.
>>  There's one trick: Environment current, otherwise Compiler would
> evaluate in nil class environment, not good"
>> createHelloClass := [Object subclass: #Hello
>>             instanceVariableNames: ''
>>             classVariableNames: ''
>>             poolDictionaries: ''
>>             category: 'Test'].
>> createHelloMethod := [:greeting |
>>     | methodSource sourceCode |
>>     methodSource := 'say Transcript cr; show: ' , greeting printString.
>>     sourceCode := 'Hello class compile: ' , methodSource printString , '
> classified: ' , 'test' printString.
>>     Compiler evaluate: sourceCode environment: Environment current].
>>
>> "Create the english and spanish environments"
>> english := Smalltalk globals.
>> spanish := Environment withName: 'Spanish'.
>> spanish importSelf.
>> spanish from: english import: #Transcript.
>>
>> "Create the class and compile the method in each environment:"
>>
>> [createHelloClass value.
>> createHelloMethod value: 'Hello world'] on: CurrentEnvironment do: [:exc
> | exc resume: english].
>>
>> [createHelloClass value.
>> createHelloMethod value: 'Buenos dias'] on: CurrentEnvironment do: [:exc
> | exc resume: spanish].
>>
>> "Greet"
>> Compiler evaluate: 'Hello say' environment: english.
>> Compiler evaluate: 'Hello say' environment: spanish.
>> Compiler evaluate: 'Hello say' environment: english.
>>
>> "Cleanup"
>> [Compiler evaluate: 'Hello removeFromSystem' environment: Environment
> current] on: CurrentEnvironment do: [:exc | exc resume: english].
>> [Compiler evaluate: 'Hello removeFromSystem' environment: Environment
> current] on: CurrentEnvironment do: [:exc | exc resume: spanish].
>>
>> Yes, a DynamicVariable:
>>    CurrentEnvironment value: english during: ["load something"].
>> would be nicer than:
>>     ["load something"] on: CurrentEnvironment do: [:exc | exc resume:
> english].
>> Otherwise we coulf fileIn some chunk format stream thru en
> EnvironmentLoader for: english...
>
> I wrote Control to do pretty much that: give a nice interface through which
> to create and change delimited dynamic variables (and delimited
> continuations). I would link to it (it's on SS3) but my phone is a bit
> limited...
>
> frank
>
>>> 2016-09-30 13:29 GMT+02:00 H. Hirzel <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;hannes.hirzel@gmail.com&#39;)">hannes.hirzel@...>:
>>> > Starting a new thread, culled from the thread 'What are environments
> for'.
>>> >
>>> > There are many more good questions and thoughts in the  thread 'What
>>> > are environments for' but this thread is just about what the subject
>>> > says:
>>> >
>>> > How to create a 'Hello world' example for environments
>>> >
>>> > --Hannes
>>> >
>>> > On 9/29/16, David T. Lewis <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;lewis@mail.msen.com&#39;)">lewis@...> wrote:
>>> >> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>>> >>> On 9/29/16, Jakob Reschke <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;jakob.reschke@student.hpi.de&#39;)">jakob.reschke@...> wrote:
>>> >>> > Hi Nicolas,
>>> >>> >
>>> >>> > First, thank you for answering me in the other thread.
>>> >>> >
>>> >>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>>> >>> > <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;nicolas.cellier.aka.nice@gmail.com&#39;)">nicolas.cellier.aka.nice@...>:
>>> >>> >> Without clear goals or vision, fixing could essentially mean "let
>>> >>> >> Environment be transparent", that is let it remain a promise, a
>>> >>> >> potential,
>>> >>> >> whithout too many side effects... Not exactly YAGNI, just a bit
>>> >>> >> of
>>> >>> >> over-engineered nice piece of code that might serve later. OK
>>> >>> >> this
>>> >>> >> sounds
>>> >>> >> like a mandatory first step.
>>> >
>>> >
>>> >>> > I don't quite get what you mean by transparent, other than fixing
> it
>>> >>> > and enhancing the documentation to shed some light on what it is,
> why
>>> >>> > it is there and how to use it.
>>> > ..
>>> > ...
>>> >
>>> >>> Another maybe simple use case could be to have a project specific
>>> >>> environment set up when you enter a project
>>> >>> (http://wiki.squeak.org/squeak/1020).
>>> >>>
>>> >>> We now have very nicely cleaned up Project code in Squeak 5.1
>>> >>>
>>> >>> 1) Subclass MorphicProject --- MyMorphicProject
>>> >>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>>> >>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>>> >>> 4) ... some more adaptations ..... to enter a new Environment --
>>> >>> how?
>>> >>>
>>> >>
>>> >> I like this idea a lot.
>>> >>
>>> >> I would love to see a simple "hello world!" level example of
> Environments.
>>> >> If someone could make an EnvironmentsDemoProject that opens a new
> project
>>> >> with
>>> >> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==>
> 'moo',
>>> >> I think it might really help me to understand how to use
>>> >> Environments.
>>> >>
>>> >> Dave
>>> >
>>> > So let's focus on a 'hello world' example for environments and do it
>>> > _slowly_ step by step so that people can catch up with the issues.
>>> >
>>> >
>>> >
>>> > Outline of steps of a 'Hello world' environments example
>>> > =============================================
>>> >
>>> > Steps
>>> >
>>> >
>>> > 1. subclass Object with a #Hello class.
>>> >
>>> > 2. compile a class method #say the method should write 'Hello' to the
> Transcript
>>> >
>>> > 3. run
>>> >     Hello say
>>> >
>>> >     The result should be 'Hello' on the Transcript
>>> >
>>> >
>>> > 4. create a new Environment called "myEnvironment".
>>> >
>>> > 5. import the Smalltalk environmnet into myEnvironment
>>> >
>>> > 6. subclass Object with a #Hello class in myEnvironment
>>> >
>>> > 7. compile a method #say the method should write 'Buenas dias' to the
> Transcript
>>> >
>>> >    run
>>> >         Hello say
>>> >
>>> >    Result should be
>>> >
>>> >         30-Sept-2016
>>> >
>>> > Starting a new thread, culled from the thread 'What are environments
> for'.
>>> >
>>> > There are many more good questions and thoughts in the  thread 'What
>>> > are environments for' but this thread is just about what the subject
>>> > says:
>>> >
>>> > How to create a 'Hello world' example for environments
>>> >
>>> > --Hannes
>>> >
>>> > On 9/29/16, David T. Lewis <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;lewis@mail.msen.com&#39;)">lewis@...> wrote:
>>> >> On Thu, Sep 29, 2016 at 07:51:23AM +0200, H. Hirzel wrote:
>>> >>> On 9/29/16, Jakob Reschke <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;jakob.reschke@student.hpi.de&#39;)">jakob.reschke@...> wrote:
>>> >>> > Hi Nicolas,
>>> >>> >
>>> >>> > First, thank you for answering me in the other thread.
>>> >>> >
>>> >>> > 2016-09-28 23:02 GMT+02:00 Nicolas Cellier
>>> >>> > <<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;nicolas.cellier.aka.nice@gmail.com&#39;)">nicolas.cellier.aka.nice@...>:
>>> >>> >> Without clear goals or vision, fixing could essentially mean "let
>>> >>> >> Environment be transparent", that is let it remain a promise, a
>>> >>> >> potential,
>>> >>> >> whithout too many side effects... Not exactly YAGNI, just a bit
>>> >>> >> of
>>> >>> >> over-engineered nice piece of code that might serve later. OK
>>> >>> >> this
>>> >>> >> sounds
>>> >>> >> like a mandatory first step.
>>> >
>>> >
>>> >>> > I don't quite get what you mean by transparent, other than fixing
> it
>>> >>> > and enhancing the documentation to shed some light on what it is,
> why
>>> >>> > it is there and how to use it.
>>> > ..
>>> > ...
>>> >
>>> >>> Another maybe simple use case could be to have a project specific
>>> >>> environment set up when you enter a project
>>> >>> (http://wiki.squeak.org/squeak/1020).
>>> >>>
>>> >>> We now have very nicely cleaned up Project code in Squeak 5.1
>>> >>>
>>> >>> 1) Subclass MorphicProject --- MyMorphicProject
>>> >>> 2) Subclass PasteUpMorph  --- MyPasteUpMorph
>>> >>> 3) Override #initialize in MyMorphicProject and use MyPasteUpMorph
>>> >>> 4) ... some more adaptations ..... to enter a new Environment --
>>> >>> how?
>>> >>>
>>> >>
>>> >> I like this idea a lot.
>>> >>
>>> >> I would love to see a simple "hello world!" level example of
> Environments.
>>> >> If someone could make an EnvironmentsDemoProject that opens a new
> project
>>> >> with
>>> >> something that changes Duck>>speak ==> 'quack' to Duck>>speak ==>
> 'moo',
>>> >> I think it might really help me to understand how to use
>>> >> Environments.
>>> >>
>>> >> Dave
>>> >
>>> > So let's focus on a 'hello world' example for environments and do it
>>> > _slowly_ step by step so that people can catch up with the issues.
>>> >
>>> >
>>> >
>>> > Outline of steps of a 'Hello world' environments example
>>> > =============================================
>>> >
>>> > Steps
>>> >
>>> >
>>> > 1. subclass Object with a #Hello class.
>>> >
>>> > 2. compile a class method #say the method should write 'Hello' to the
> Transcript
>>> >
>>> > 3. run
>>> >     Hello say
>>> >
>>> >     The result should be 'Hello' on the Transcript
>>> >
>>> >
>>> > 4. create a new Environment called "myEnvironment".
>>> >
>>> > 5. import the Smalltalk environmnet into myEnvironment
>>> >
>>> > 6. subclass Object with a #Hello class in myEnvironment
>>> >
>>> > 7. compile a method #say the method should write 'Buenas dias' to the
> Transcript
>>> >
>>> >    run
>>> >         Hello say
>>> >
>>> >     The result should be 'Buenas dias' on the Transcript
>>> >
>>> >
>>> > 8. Leave environment called 'myEnvironment'
>>> >
>>> >
>>> > 9. run
>>> >     Hello say
>>> >
>>> >     The result should be this time 'Hello' on the Transcript
>>> >
>>> >
>>> >
>>> > Any comments on these steps?
>>> >
>>>
>>
>>
>>
>>
>