Sounds baaad sounds

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

Sounds baaad sounds

Igor Stasenko
 
Funny thing ..
Sound package contains a code, which used by VMMaker for generating
sound plugin..

which means that depending on the hacks and on forks (Pharo having
different Sound package version than Squeak),
you will end up with different VMs..
Sounds cool yeah? :)

I propose to carve out all VM-specific behavior from this package and
put it into separate package like VMSound, or or just directly into
VMMaker,
because in current state this sounds baddd  :)


--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Andreas.Raab
 
On 1/31/2011 4:40 PM, Igor Stasenko wrote:
> Funny thing ..
> Sound package contains a code, which used by VMMaker for generating
> sound plugin..
>
> which means that depending on the hacks and on forks (Pharo having
> different Sound package version than Squeak),
> you will end up with different VMs..
> Sounds cool yeah? :)

Huh? Are you saying that Pharo contains different primitives than
Squeak? If not, I somewhat fail to see the problem.

Cheers,
   - Andreas

>
> I propose to carve out all VM-specific behavior from this package and
> put it into separate package like VMSound, or or just directly into
> VMMaker,
> because in current state this sounds baddd  :)
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Igor Stasenko
 
On 31 January 2011 19:21, Andreas Raab <[hidden email]> wrote:

>
> On 1/31/2011 4:40 PM, Igor Stasenko wrote:
>>
>> Funny thing ..
>> Sound package contains a code, which used by VMMaker for generating
>> sound plugin..
>>
>> which means that depending on the hacks and on forks (Pharo having
>> different Sound package version than Squeak),
>> you will end up with different VMs..
>> Sounds cool yeah? :)
>
> Huh? Are you saying that Pharo contains different primitives than Squeak? If
> not, I somewhat fail to see the problem.
>

I don't feel ok knowing that VM depends on right combination of
classes in Sound package,
since there is no clear separation between plugin and language side
implementation.

Pharo could diverge to the point that it could not load a Squeak's
Sound package anymore.
So, it won't be able to load VMMaker or even if it do, then generated
VM code will be different
depending on image you using.
What i want to achieve is to make VMMaker be image agnostic, so it
could be loaded cleanly
into any image and produce same code as it was years ago using different image.
With things like Sound package its not possible, since they are
integral part of image, and not separated
on VM and language side implementations.


--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

David T. Lewis
 
On Mon, Jan 31, 2011 at 09:08:41PM +0100, Igor Stasenko wrote:

>  
> On 31 January 2011 19:21, Andreas Raab <[hidden email]> wrote:
> >
> > On 1/31/2011 4:40 PM, Igor Stasenko wrote:
> >>
> >> Funny thing ..
> >> Sound package contains a code, which used by VMMaker for generating
> >> sound plugin..
> >>
> >> which means that depending on the hacks and on forks (Pharo having
> >> different Sound package version than Squeak),
> >> you will end up with different VMs..
> >> Sounds cool yeah? :)
> >
> > Huh? Are you saying that Pharo contains different primitives than Squeak? If
> > not, I somewhat fail to see the problem.
> >
>
> I don't feel ok knowing that VM depends on right combination of
> classes in Sound package,
> since there is no clear separation between plugin and language side
> implementation.
>
> Pharo could diverge to the point that it could not load a Squeak's
> Sound package anymore.
> So, it won't be able to load VMMaker or even if it do, then generated
> VM code will be different
> depending on image you using.
> What i want to achieve is to make VMMaker be image agnostic, so it
> could be loaded cleanly
> into any image and produce same code as it was years ago using different image.
> With things like Sound package its not possible, since they are
> integral part of image, and not separated
> on VM and language side implementations.

Can you give an example of one of the dependencies? I am not seeing
where the problem lies. Thanks.

Dave

Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Andreas.Raab
In reply to this post by Igor Stasenko
 
On 1/31/2011 9:08 PM, Igor Stasenko wrote:
> On 31 January 2011 19:21, Andreas Raab<[hidden email]>  wrote:
>> Huh? Are you saying that Pharo contains different primitives than Squeak? If
>> not, I somewhat fail to see the problem.
>>
> I don't feel ok knowing that VM depends on right combination of
> classes in Sound package,
> since there is no clear separation between plugin and language side
> implementation.

I'm not entirely sure what you're saying here. What's used from the
sound package is generated primitives; it's not that there is explicit
plugin code anywhere. The same holds for the Graphics and some other
packages. And, FWIW, you do not *need* the sound package to generate the
VM; you do without it if you're willing to forego the generated
primitives (and if there is some dependency in VMMaker that does indeed
*require* the sound package, then we should remove the dependency).

> Pharo could diverge to the point that it could not load a Squeak's
> Sound package anymore.

Well, let's be a bit realistic. The scenario you are describing sounds
excruciatingly unlikely because if Pharo can no longer load Smalltalk
code I think it will have much bigger problems than the sound plugin.

> So, it won't be able to load VMMaker or even if it do, then generated
> VM code will be different depending on image you using.
> What i want to achieve is to make VMMaker be image agnostic, so it
> could be loaded cleanly
> into any image and produce same code as it was years ago using different image.

That's a nice goal but already untrue. For example, later versions of
VMMaker cannot be loaded into pre-3.9 images. So the goal that VMMaker
can be loaded into "any" image is already untrue and really not
necessary. I'd say your time would be better spent on improving the test
suite for the VM so that we can ensure that VMs we care about have the
right properties.

Cheers,
   - Andreas

Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Igor Stasenko

On 1 February 2011 09:28, Andreas Raab <[hidden email]> wrote:

>
> On 1/31/2011 9:08 PM, Igor Stasenko wrote:
>>
>> On 31 January 2011 19:21, Andreas Raab<[hidden email]>  wrote:
>>>
>>> Huh? Are you saying that Pharo contains different primitives than Squeak?
>>> If
>>> not, I somewhat fail to see the problem.
>>>
>> I don't feel ok knowing that VM depends on right combination of
>> classes in Sound package,
>> since there is no clear separation between plugin and language side
>> implementation.
>
> I'm not entirely sure what you're saying here. What's used from the sound
> package is generated primitives; it's not that there is explicit plugin code
> anywhere. The same holds for the Graphics and some other packages. And,
> FWIW, you do not *need* the sound package to generate the VM; you do without
> it if you're willing to forego the generated primitives (and if there is
> some dependency in VMMaker that does indeed *require* the sound package,
> then we should remove the dependency).
>

Yes, VMMaker depends on Sound package. And yes, we need to reconcile
this dependency into
some nicer form.

Take a ADPCMCodec for example. It having primitives in its
private[Decode/Encode][Mono/Stereo] methods.

If i remove ADPCMCodec from image/package, i can no longer load
VMMaker, because ADPCMCodecPlugin having direct
reference to ADPCMCodec and taking primitives from it.
It would be nice to move all such primitives to plugin, so VMMaker
will not have dependency from arbitrary image-side code,
(which btw is optional and could be(not) present in image, or use
different class names, but use original VM primitives or any
combination of them)..


>> Pharo could diverge to the point that it could not load a Squeak's
>> Sound package anymore.
>
> Well, let's be a bit realistic. The scenario you are describing sounds
> excruciatingly unlikely because if Pharo can no longer load Smalltalk code I
> think it will have much bigger problems than the sound plugin.
>

By unable to load, i mean unable to load cleanly. If you have
unresolved globals, like
missing superclass - you can still force to load the code, but what
you get as result?
Any please tell me why VMMaker should depend on arbitrary image-side
code, instead
of having a well maintained separate set of packages , which clearly
defining what is 'VM' and its plugins.


As i said, since there is no clear separation about what belongs to
VM/plugin and what belongs image side,
the only means how to maintain this code is either freeze it for ages,
or throw it out completely.


>> So, it won't be able to load VMMaker or even if it do, then generated
>> VM code will be different depending on image you using.
>> What i want to achieve is to make VMMaker be image agnostic, so it
>> could be loaded cleanly
>> into any image and produce same code as it was years ago using different
>> image.
>
> That's a nice goal but already untrue. For example, later versions of
> VMMaker cannot be loaded into pre-3.9 images. So the goal that VMMaker can
> be loaded into "any" image is already untrue and really not necessary. I'd
> say your time would be better spent on improving the test suite for the VM
> so that we can ensure that VMs we care about have the right properties.
>

Clarification: being able to load latest VM into latest image(s)
namely: squeak and pharo.
This is my goal.
I don't like that VMMaker can only be loaded/work in some old 3.8 image(s),
and impossible to use with latest and greatest images we are developing :)

The automation, which i slowly crawling & doing aims exactly for this purpose:
 - it takes the _latest_ available image and tries to load VMMaker there

in this way, we will keep VMMaker in sync with development mainline,
because if something will go wrong, we will know about it immediately.

Another approach is :  'don't care' .. then we could end up with situation, when
to generate VM you should use some years old crappy image,
and to run that image, you will need years old crappy VM , which runs
on years old crappy OS..
and which in own turn runs on years old crappy hardware..
So... make your choice.
:)

> Cheers,
>  - Andreas
>


--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Andreas.Raab
 
On 2/1/2011 11:34 AM, Igor Stasenko wrote:

> On 1 February 2011 09:28, Andreas Raab<[hidden email]>  wrote:
>> I'm not entirely sure what you're saying here. What's used from the sound
>> package is generated primitives; it's not that there is explicit plugin code
>> anywhere. The same holds for the Graphics and some other packages. And,
>> FWIW, you do not *need* the sound package to generate the VM; you do without
>> it if you're willing to forego the generated primitives (and if there is
>> some dependency in VMMaker that does indeed *require* the sound package,
>> then we should remove the dependency).
>>
> Yes, VMMaker depends on Sound package. And yes, we need to reconcile
> this dependency into some nicer form.
>
> Take a ADPCMCodec for example. It having primitives in its
> private[Decode/Encode][Mono/Stereo] methods.
>
> If i remove ADPCMCodec from image/package, i can no longer load
> VMMaker, because ADPCMCodecPlugin having direct
> reference to ADPCMCodec and taking primitives from it.

Now you can. I just posted a fix.

> It would be nice to move all such primitives to plugin, so VMMaker
> will not have dependency from arbitrary image-side code,

This comes at the cost of having to duplicate the primitive and
non-primitive versions and to keep them in sync. Or make the primitives
non-optional. I really do like translated primitives, in fact I had
always hoped that we'd get more translated primitives since they are
extremely convenient for all sorts of significant speedups. And who
knows, perhaps at some point the JIT could make use of the type
annotations as well.

>>> Pharo could diverge to the point that it could not load a Squeak's
>>> Sound package anymore.
>> Well, let's be a bit realistic. The scenario you are describing sounds
>> excruciatingly unlikely because if Pharo can no longer load Smalltalk code I
>> think it will have much bigger problems than the sound plugin.
> By unable to load, i mean unable to load cleanly. If you have
> unresolved globals, like
> missing superclass - you can still force to load the code, but what
> you get as result?
> Any please tell me why VMMaker should depend on arbitrary image-side
> code, instead
> of having a well maintained separate set of packages , which clearly
> defining what is 'VM' and its plugins.

There's a couple of reasons why VMMaker *has* to depend on a certain
amount of image-side code. It's not self-contained so there's no way
that it could not depend on some image-side stuff. Think VMMaker will
continue to work if we replace streams with Xtreams? Think again. Think
VMMaker can work in images without method annotation support? Think
again. So certain dependencies are there and can't be helped.

On the other hand some of the dependencies are clearly unnecessary, such
as in your example. But other than the direct references to sound
classes I don't see anything wrong with saying that with a given sound
package there come a given set of primitives that are translated with
the VM. If you want a specific set of primitives then choose a specific
sound package. Just like you choose a specific VMMaker package when you
want to use a specific version of the VM.

> As i said, since there is no clear separation about what belongs to
> VM/plugin and what belongs image side,
> the only means how to maintain this code is either freeze it for ages,
> or throw it out completely.

I fail to see how either one follows from the premise.

>>> So, it won't be able to load VMMaker or even if it do, then generated
>>> VM code will be different depending on image you using.
>>> What i want to achieve is to make VMMaker be image agnostic, so it
>>> could be loaded cleanly
>>> into any image and produce same code as it was years ago using different
>>> image.
>> That's a nice goal but already untrue. For example, later versions of
>> VMMaker cannot be loaded into pre-3.9 images. So the goal that VMMaker can
>> be loaded into "any" image is already untrue and really not necessary. I'd
>> say your time would be better spent on improving the test suite for the VM
>> so that we can ensure that VMs we care about have the right properties.
>>
> Clarification: being able to load latest VM into latest image(s)
> namely: squeak and pharo.
> This is my goal.
> I don't like that VMMaker can only be loaded/work in some old 3.8 image(s),
> and impossible to use with latest and greatest images we are developing :)
>
> The automation, which i slowly crawling&  doing aims exactly for this purpose:
>   - it takes the _latest_ available image and tries to load VMMaker there
>
> in this way, we will keep VMMaker in sync with development mainline,
> because if something will go wrong, we will know about it immediately.
>
> Another approach is :  'don't care' .. then we could end up with situation, when
> to generate VM you should use some years old crappy image,
> and to run that image, you will need years old crappy VM , which runs
> on years old crappy OS..
> and which in own turn runs on years old crappy hardware..
> So... make your choice.

This is a bit of a false choice as there are several other alternatives.
I would start with the simplest one: Let's remove direct references
where they are clearly unnecessary. I just did that and unless I'm
mistaken you can now load VMMaker without the sound plugin. Another
alternative would be to move the plugin into Sounds-Plugin (as we do
with B3D, FFI etc) and use a matching version of the sound package and
plugin for your VMs.

Cheers,
   - Andreas


Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Igor Stasenko

On 1 February 2011 12:26, Andreas Raab <[hidden email]> wrote:

>
> On 2/1/2011 11:34 AM, Igor Stasenko wrote:
>>
>> On 1 February 2011 09:28, Andreas Raab<[hidden email]>  wrote:
>>>
>>> I'm not entirely sure what you're saying here. What's used from the sound
>>> package is generated primitives; it's not that there is explicit plugin
>>> code
>>> anywhere. The same holds for the Graphics and some other packages. And,
>>> FWIW, you do not *need* the sound package to generate the VM; you do
>>> without
>>> it if you're willing to forego the generated primitives (and if there is
>>> some dependency in VMMaker that does indeed *require* the sound package,
>>> then we should remove the dependency).
>>>
>> Yes, VMMaker depends on Sound package. And yes, we need to reconcile
>> this dependency into some nicer form.
>>
>> Take a ADPCMCodec for example. It having primitives in its
>> private[Decode/Encode][Mono/Stereo] methods.
>>
>> If i remove ADPCMCodec from image/package, i can no longer load
>> VMMaker, because ADPCMCodecPlugin having direct
>> reference to ADPCMCodec and taking primitives from it.
>
> Now you can. I just posted a fix.
>

Cool! :)
Can this be applied to Cog VM as well?

(what i think that probably a good idea to move all plugins to
separate packages, so then they can be shared by Cog and Squeak VMs
for building,
but that's probably in some future ;) ).

>> It would be nice to move all such primitives to plugin, so VMMaker
>> will not have dependency from arbitrary image-side code,
>
> This comes at the cost of having to duplicate the primitive and
> non-primitive versions and to keep them in sync. Or make the primitives
> non-optional. I really do like translated primitives, in fact I had always
> hoped that we'd get more translated primitives since they are extremely
> convenient for all sorts of significant speedups. And who knows, perhaps at
> some point the JIT could make use of the type annotations as well.
>

Right, i also thought about it.
But still , it is good to split the things in two parts: frontend and backend.
Backend can be translated to primitives directly or just use
interpreter if no plugin avail... not really matters.

Then a frontend can live and evolve relatively independent from what
its using at low-level,
and low-level implementation can be swapped out/replaced by something different.

A great example of such decoupling, which i saw recently was in a new
filesystem.

Gofer new
     wiresong: 'mc';
     package: 'Filesystem';
     load.

(or load it manually from http://source.wiresong.ca/FileSystem)

There is a class, named FSFileNandle
which having a protocol for all file operations like open/close etc..
but for invoking actual operation on OS filesystem it delegates them
to a class variable Primitives,
which implements low-level primitive protocol, for example:

FSFileNandle>>close
        Primitives close: id.
        id := nil

and Primitives are initialized like following:

useFilePlugin
        Primitives := FSFilePluginPrims new

and then FSFilePluginPrims having the corresponding #close: implementation:

FSFilePluginPrims>>close: id
        "Close this file."

        <primitive: 'primitiveFileClose' module: 'FilePlugin'>
       

In that way, at any moment if we could decide to use different
plugin/primitives for file system operations,
we could easily swap them out with another implementation without need
to hack every place where you using them in class(es), which providing
public API.

That's really nice design, because you can place all primitive-related
part into platform/dialect specific package
and it enables you to use same FileSystem API among not just various
forks of Squeak, but even among various dialects of smalltalk,
without need of hacking/porting core API classes!!!

I think that this approach could be applied to sound prims as well, to
nicely decouple a front-end API, from low-level backend, implemented
either
primitively or 'naively' or whatever.

>>>> Pharo could diverge to the point that it could not load a Squeak's
>>>> Sound package anymore.
>>>
>>> Well, let's be a bit realistic. The scenario you are describing sounds
>>> excruciatingly unlikely because if Pharo can no longer load Smalltalk
>>> code I
>>> think it will have much bigger problems than the sound plugin.
>>
>> By unable to load, i mean unable to load cleanly. If you have
>> unresolved globals, like
>> missing superclass - you can still force to load the code, but what
>> you get as result?
>> Any please tell me why VMMaker should depend on arbitrary image-side
>> code, instead
>> of having a well maintained separate set of packages , which clearly
>> defining what is 'VM' and its plugins.
>
> There's a couple of reasons why VMMaker *has* to depend on a certain amount
> of image-side code. It's not self-contained so there's no way that it could
> not depend on some image-side stuff. Think VMMaker will continue to work if
> we replace streams with Xtreams? Think again. Think VMMaker can work in
> images without method annotation support? Think again. So certain
> dependencies are there and can't be helped.
>

I agree. But keeping the number of dependencies at certain limit and
cover them by tests
- that would be good way to ensure that we can recreate each and every
artifact we were produced
over years, without hassles in any distant point in future.


> On the other hand some of the dependencies are clearly unnecessary, such as
> in your example. But other than the direct references to sound classes I
> don't see anything wrong with saying that with a given sound package there
> come a given set of primitives that are translated with the VM. If you want
> a specific set of primitives then choose a specific sound package. Just like
> you choose a specific VMMaker package when you want to use a specific
> version of the VM.
>

Well, we're certainly not at the point where we could say: to run this
image, use this VM. Period.
Only after we could guarantee that we could easily produce VM out of
any kind of combinations of packages/plugins,
then certainly this approach will gain credibility.


>> As i said, since there is no clear separation about what belongs to
>> VM/plugin and what belongs image side,
>> the only means how to maintain this code is either freeze it for ages,
>> or throw it out completely.
>
> I fail to see how either one follows from the premise.

Stephane did some refactoring of Sound package, by splitting it into two parts:
 - Sound base
  - Sound IU, which is a morphic-specific UI which using sound classes.

In that way, a pharo Sound package potentially could be used even if
you don't have morphic in your image.

But now there is a certain risk, that if i build VM using Pharo Sound
package, i may end up with different VM
if i build it using Squeak's Sound package. This is what i want to
avoid , because i is _certainty_ a very bad reason
for forking VM just because Pharo did some cleanup/morphic decoupling
in Sound package :)

>
>>>> So, it won't be able to load VMMaker or even if it do, then generated
>>>> VM code will be different depending on image you using.
>>>> What i want to achieve is to make VMMaker be image agnostic, so it
>>>> could be loaded cleanly
>>>> into any image and produce same code as it was years ago using different
>>>> image.
>>>
>>> That's a nice goal but already untrue. For example, later versions of
>>> VMMaker cannot be loaded into pre-3.9 images. So the goal that VMMaker
>>> can
>>> be loaded into "any" image is already untrue and really not necessary.
>>> I'd
>>> say your time would be better spent on improving the test suite for the
>>> VM
>>> so that we can ensure that VMs we care about have the right properties.
>>>
>> Clarification: being able to load latest VM into latest image(s)
>> namely: squeak and pharo.
>> This is my goal.
>> I don't like that VMMaker can only be loaded/work in some old 3.8
>> image(s),
>> and impossible to use with latest and greatest images we are developing :)
>>
>> The automation, which i slowly crawling&  doing aims exactly for this
>> purpose:
>>  - it takes the _latest_ available image and tries to load VMMaker there
>>
>> in this way, we will keep VMMaker in sync with development mainline,
>> because if something will go wrong, we will know about it immediately.
>>
>> Another approach is :  'don't care' .. then we could end up with
>> situation, when
>> to generate VM you should use some years old crappy image,
>> and to run that image, you will need years old crappy VM , which runs
>> on years old crappy OS..
>> and which in own turn runs on years old crappy hardware..
>> So... make your choice.
>
> This is a bit of a false choice as there are several other alternatives. I
> would start with the simplest one: Let's remove direct references where they
> are clearly unnecessary. I just did that and unless I'm mistaken you can now
> load VMMaker without the sound plugin. Another alternative would be to move
> the plugin into Sounds-Plugin (as we do with B3D, FFI etc) and use a
> matching version of the sound package and plugin for your VMs.
>
Good. I will check that out.

Also, if we take a new FileSystem as an example (I think this is the way to go).
and split it like:
  SoundPrims
  Sound

then
  VMMaker could just load SoundPrims
while image loads SoundPrims and Sound both.

And of course, we could take SoundPlugin out of VMMaker and put it
into separate package,
so, VMMaker then will load
SoundPrims and SoundPlugin to build plugin.



> Cheers,
>  - Andreas
>


--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Andreas.Raab
 
On 2/1/2011 2:00 PM, Igor Stasenko wrote:

> But still , it is good to split the things in two parts: frontend and backend.
> Backend can be translated to primitives directly or just use
> interpreter if no plugin avail... not really matters.
>
> Then a frontend can live and evolve relatively independent from what
> its using at low-level,
> and low-level implementation can be swapped out/replaced by something different.
>
> A great example of such decoupling, which i saw recently was in a new
> filesystem.
>
> Gofer new
>       wiresong: 'mc';
>       package: 'Filesystem';
>       load.
>
> (or load it manually from http://source.wiresong.ca/FileSystem)
>
> There is a class, named FSFileNandle
> which having a protocol for all file operations like open/close etc..
> but for invoking actual operation on OS filesystem it delegates them
> to a class variable Primitives,
> which implements low-level primitive protocol, for example:
>
> FSFileNandle>>close
> Primitives close: id.
> id := nil
>
> and Primitives are initialized like following:
>
> useFilePlugin
> Primitives := FSFilePluginPrims new
>
> and then FSFilePluginPrims having the corresponding #close: implementation:
>
> FSFilePluginPrims>>close: id
> "Close this file."
>
> <primitive: 'primitiveFileClose' module: 'FilePlugin'>
>
>
> In that way, at any moment if we could decide to use different
> plugin/primitives for file system operations,
> we could easily swap them out with another implementation without need
> to hack every place where you using them in class(es), which providing
> public API.
>
> That's really nice design, because you can place all primitive-related
> part into platform/dialect specific package
> and it enables you to use same FileSystem API among not just various
> forks of Squeak, but even among various dialects of smalltalk,
> without need of hacking/porting core API classes!!!

Yes, that is a very nice approach if the goal is to support different
backend primitives. On the other hand, *unless* that is the goal and
*unless* there are significant differences in the backend implementation
the approach borders on needless complexity.

> I think that this approach could be applied to sound prims as well, to
> nicely decouple a front-end API, from low-level backend, implemented
> either primitively or 'naively' or whatever.

It could, but see above. What would be the point of doing this? It just
adds complexity and unless there is tangible benefit I'm against adding
needless complexity. I mean, if one indirection is good, two must be
better, no? ;-)

Cheers,
   - Andreas

>>>>> Pharo could diverge to the point that it could not load a Squeak's
>>>>> Sound package anymore.
>>>> Well, let's be a bit realistic. The scenario you are describing sounds
>>>> excruciatingly unlikely because if Pharo can no longer load Smalltalk
>>>> code I
>>>> think it will have much bigger problems than the sound plugin.
>>> By unable to load, i mean unable to load cleanly. If you have
>>> unresolved globals, like
>>> missing superclass - you can still force to load the code, but what
>>> you get as result?
>>> Any please tell me why VMMaker should depend on arbitrary image-side
>>> code, instead
>>> of having a well maintained separate set of packages , which clearly
>>> defining what is 'VM' and its plugins.
>> There's a couple of reasons why VMMaker *has* to depend on a certain amount
>> of image-side code. It's not self-contained so there's no way that it could
>> not depend on some image-side stuff. Think VMMaker will continue to work if
>> we replace streams with Xtreams? Think again. Think VMMaker can work in
>> images without method annotation support? Think again. So certain
>> dependencies are there and can't be helped.
>>
> I agree. But keeping the number of dependencies at certain limit and
> cover them by tests
> - that would be good way to ensure that we can recreate each and every
> artifact we were produced
> over years, without hassles in any distant point in future.
>
>
>> On the other hand some of the dependencies are clearly unnecessary, such as
>> in your example. But other than the direct references to sound classes I
>> don't see anything wrong with saying that with a given sound package there
>> come a given set of primitives that are translated with the VM. If you want
>> a specific set of primitives then choose a specific sound package. Just like
>> you choose a specific VMMaker package when you want to use a specific
>> version of the VM.
>>
> Well, we're certainly not at the point where we could say: to run this
> image, use this VM. Period.
> Only after we could guarantee that we could easily produce VM out of
> any kind of combinations of packages/plugins,
> then certainly this approach will gain credibility.
>
>
>>> As i said, since there is no clear separation about what belongs to
>>> VM/plugin and what belongs image side,
>>> the only means how to maintain this code is either freeze it for ages,
>>> or throw it out completely.
>> I fail to see how either one follows from the premise.
> Stephane did some refactoring of Sound package, by splitting it into two parts:
>   - Sound base
>    - Sound IU, which is a morphic-specific UI which using sound classes.
>
> In that way, a pharo Sound package potentially could be used even if
> you don't have morphic in your image.
>
> But now there is a certain risk, that if i build VM using Pharo Sound
> package, i may end up with different VM
> if i build it using Squeak's Sound package. This is what i want to
> avoid , because i is _certainty_ a very bad reason
> for forking VM just because Pharo did some cleanup/morphic decoupling
> in Sound package :)
>
>>>>> So, it won't be able to load VMMaker or even if it do, then generated
>>>>> VM code will be different depending on image you using.
>>>>> What i want to achieve is to make VMMaker be image agnostic, so it
>>>>> could be loaded cleanly
>>>>> into any image and produce same code as it was years ago using different
>>>>> image.
>>>> That's a nice goal but already untrue. For example, later versions of
>>>> VMMaker cannot be loaded into pre-3.9 images. So the goal that VMMaker
>>>> can
>>>> be loaded into "any" image is already untrue and really not necessary.
>>>> I'd
>>>> say your time would be better spent on improving the test suite for the
>>>> VM
>>>> so that we can ensure that VMs we care about have the right properties.
>>>>
>>> Clarification: being able to load latest VM into latest image(s)
>>> namely: squeak and pharo.
>>> This is my goal.
>>> I don't like that VMMaker can only be loaded/work in some old 3.8
>>> image(s),
>>> and impossible to use with latest and greatest images we are developing :)
>>>
>>> The automation, which i slowly crawling&    doing aims exactly for this
>>> purpose:
>>>   - it takes the _latest_ available image and tries to load VMMaker there
>>>
>>> in this way, we will keep VMMaker in sync with development mainline,
>>> because if something will go wrong, we will know about it immediately.
>>>
>>> Another approach is :  'don't care' .. then we could end up with
>>> situation, when
>>> to generate VM you should use some years old crappy image,
>>> and to run that image, you will need years old crappy VM , which runs
>>> on years old crappy OS..
>>> and which in own turn runs on years old crappy hardware..
>>> So... make your choice.
>> This is a bit of a false choice as there are several other alternatives. I
>> would start with the simplest one: Let's remove direct references where they
>> are clearly unnecessary. I just did that and unless I'm mistaken you can now
>> load VMMaker without the sound plugin. Another alternative would be to move
>> the plugin into Sounds-Plugin (as we do with B3D, FFI etc) and use a
>> matching version of the sound package and plugin for your VMs.
>>
> Good. I will check that out.
>
> Also, if we take a new FileSystem as an example (I think this is the way to go).
> and split it like:
>    SoundPrims
>    Sound
>
> then
>    VMMaker could just load SoundPrims
> while image loads SoundPrims and Sound both.
>
> And of course, we could take SoundPlugin out of VMMaker and put it
> into separate package,
> so, VMMaker then will load
> SoundPrims and SoundPlugin to build plugin.
>
>
>
>> Cheers,
>>   - Andreas
>>
>
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Igor Stasenko

On 1 February 2011 16:04, Andreas Raab <[hidden email]> wrote:

>
>> That's really nice design, because you can place all primitive-related
>> part into platform/dialect specific package
>> and it enables you to use same FileSystem API among not just various
>> forks of Squeak, but even among various dialects of smalltalk,
>> without need of hacking/porting core API classes!!!
>
> Yes, that is a very nice approach if the goal is to support different
> backend primitives. On the other hand, *unless* that is the goal and
> *unless* there are significant differences in the backend implementation the
> approach borders on needless complexity.
>

Hmm..
Are you sure that following is not 'needless complexity'?

ADPCMCodecPlugin, having ZERO methods at its instance side, and only
one method at its class side.

ADPCMCodecPlugin class>>translateInDirectory: directory doInlining: inlineFlag
"handle a special case code string rather than generated code"
"Not currently hooked into the timeStamp mechanism for VMMaker since
this would mean replicating code from InterpreterPlugin; waiting for a
more elegant solution to appear. In the meantime this means that this
plugin will always get regenerated even if the file is uptodate"
        | cg |
        self initialize.

        cg := self buildCodeGeneratorUpTo: InterpreterPlugin.

        cg addMethodsForPrimitives: ADPCMCodec translatedPrimitives.
        inlineFlag ifTrue:[
                "now remove a few which will be inlined but not pruned"
                cg pruneMethods: #(indexForDeltaFrom:to: nextBits: nextBits:put:)].
        self storeString: cg generateCodeStringForPrimitives onFileNamed:
(directory fullNameFor: self moduleName, '.c').
        ^cg exportedPrimitiveNames asArray


this method alone could spoil someone's day because as it appears that
this class serves only as a facade, while all of the behavior lies
somewhere else.

So, if that is not an example of 'unnecessary complexity', then what it is? :)

Why bother creating ADPCMCodecPlugin, when code generator can do this
by itself by simply looking for all implementors of
#translatedPrimitives
of all classes in system, and generate necessary primitives out of them.
Simple, universal and doing the same, because there are no clear
separation between 'what is a primitive' and what is language side
code.
But if that is not a goal, then why bother, right?


>> I think that this approach could be applied to sound prims as well, to
>> nicely decouple a front-end API, from low-level backend, implemented
>> either primitively or 'naively' or whatever.
>
> It could, but see above. What would be the point of doing this? It just adds
> complexity and unless there is tangible benefit I'm against adding needless
> complexity. I mean, if one indirection is good, two must be better, no? ;-)
>

I cannot agree.
Good design which comes from dependency decoupling and good
abstraction layer(s) is not 'unnecessary complexity'.
In fact, in far perspective, it works straightly in opposite direction.

This code smells. Usually things smell bad because they rot. :)
And what people usually do with things which rotten? They throw them out.
Yeah, there are few, who so passionate that they could overcome the
disgust and start digging in rotten pile of cruft in hope to find
precious gems.
But usually this not happens often, because people having more fun things to do.


Hopefully the above explains better what i meant by saying:
"the only means how to maintain this code is either freeze it for
ages, or throw it out completely."
to which you replied with:
"I fail to see how either one follows from the premise."



> Cheers,
>  - Andreas
>

--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Andreas.Raab
 
On 2/1/2011 5:50 PM, Igor Stasenko wrote:

> On 1 February 2011 16:04, Andreas Raab<[hidden email]>  wrote:
>>> That's really nice design, because you can place all primitive-related
>>> part into platform/dialect specific package
>>> and it enables you to use same FileSystem API among not just various
>>> forks of Squeak, but even among various dialects of smalltalk,
>>> without need of hacking/porting core API classes!!!
>> Yes, that is a very nice approach if the goal is to support different
>> backend primitives. On the other hand, *unless* that is the goal and
>> *unless* there are significant differences in the backend implementation the
>> approach borders on needless complexity.
>>
> Hmm..
> Are you sure that following is not 'needless complexity'?
>
> ADPCMCodecPlugin, having ZERO methods at its instance side, and only
> one method at its class side.
>
> ADPCMCodecPlugin class>>translateInDirectory: directory doInlining: inlineFlag
> "handle a special case code string rather than generated code"
> "Not currently hooked into the timeStamp mechanism for VMMaker since
> this would mean replicating code from InterpreterPlugin; waiting for a
> more elegant solution to appear. In the meantime this means that this
> plugin will always get regenerated even if the file is uptodate"
> | cg |
> self initialize.
>
> cg := self buildCodeGeneratorUpTo: InterpreterPlugin.
>
> cg addMethodsForPrimitives: ADPCMCodec translatedPrimitives.
> inlineFlag ifTrue:[
> "now remove a few which will be inlined but not pruned"
> cg pruneMethods: #(indexForDeltaFrom:to: nextBits: nextBits:put:)].
> self storeString: cg generateCodeStringForPrimitives onFileNamed:
> (directory fullNameFor: self moduleName, '.c').
> ^cg exportedPrimitiveNames asArray
>
>
> this method alone could spoil someone's day because as it appears that
> this class serves only as a facade, while all of the behavior lies
> somewhere else.
>
> So, if that is not an example of 'unnecessary complexity', then what it is? :)

Why do you think I would disagree with your analysis? ;-)
ADPCMCodecPlugin is not exactly a shining example of compactness and
straightforwardness. But adding another layer surely won't improve on
that ;-)

> Why bother creating ADPCMCodecPlugin, when code generator can do this
> by itself by simply looking for all implementors of
> #translatedPrimitives
> of all classes in system, and generate necessary primitives out of them.
> Simple, universal and doing the same, because there are no clear
> separation between 'what is a primitive' and what is language side
> code.
> But if that is not a goal, then why bother, right?
>
>
>>> I think that this approach could be applied to sound prims as well, to
>>> nicely decouple a front-end API, from low-level backend, implemented
>>> either primitively or 'naively' or whatever.
>> It could, but see above. What would be the point of doing this? It just adds
>> complexity and unless there is tangible benefit I'm against adding needless
>> complexity. I mean, if one indirection is good, two must be better, no? ;-)
> I cannot agree.
> Good design which comes from dependency decoupling and good
> abstraction layer(s) is not 'unnecessary complexity'.
> In fact, in far perspective, it works straightly in opposite direction.

I completely agree. But in this case the decoupling already exists. It's
the primitive where the decoupling happens. The extra indirection is
helpful only if one needs multiple (non-primitive) backend
implementations. Without that need it's a pointless indirection. For
example, would you really consider it better design if we added the same
kind of extra indirection for SmallInteger primitives? That's why I'm
saying I don't like to add complexity unless there is tangible benefit
in return. If there is, then absolutely, go for it. But if there isn't,
then let's be careful with additional layers. They tend to get out of
hand much too quickly.

> This code smells. Usually things smell bad because they rot. :)

Which code specifically? ADPCMCodecPlugin? Agreed for the most part. But
then again, I don't think adding another indirection will address that
smell particularly well.

> And what people usually do with things which rotten? They throw them out.
> Yeah, there are few, who so passionate that they could overcome the
> disgust and start digging in rotten pile of cruft in hope to find
> precious gems.
> But usually this not happens often, because people having more fun things to do.
>
>
> Hopefully the above explains better what i meant by saying:
> "the only means how to maintain this code is either freeze it for
> ages, or throw it out completely."
> to which you replied with:
> "I fail to see how either one follows from the premise."

And I still don't see it :-) You seem to forget the option to simply fix
what's broken. That's so obvious that I still don't get why freezing or
throwing away would be the only options.

Cheers,
   - Andreas

Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Igor Stasenko

On 1 February 2011 18:14, Andreas Raab <[hidden email]> wrote:

>
> On 2/1/2011 5:50 PM, Igor Stasenko wrote:
>>
>> On 1 February 2011 16:04, Andreas Raab<[hidden email]>  wrote:
>>>>
>>>> That's really nice design, because you can place all primitive-related
>>>> part into platform/dialect specific package
>>>> and it enables you to use same FileSystem API among not just various
>>>> forks of Squeak, but even among various dialects of smalltalk,
>>>> without need of hacking/porting core API classes!!!
>>>
>>> Yes, that is a very nice approach if the goal is to support different
>>> backend primitives. On the other hand, *unless* that is the goal and
>>> *unless* there are significant differences in the backend implementation
>>> the
>>> approach borders on needless complexity.
>>>
>> Hmm..
>> Are you sure that following is not 'needless complexity'?
>>
>> ADPCMCodecPlugin, having ZERO methods at its instance side, and only
>> one method at its class side.
>>
>> ADPCMCodecPlugin class>>translateInDirectory: directory doInlining:
>> inlineFlag
>> "handle a special case code string rather than generated code"
>> "Not currently hooked into the timeStamp mechanism for VMMaker since
>> this would mean replicating code from InterpreterPlugin; waiting for a
>> more elegant solution to appear. In the meantime this means that this
>> plugin will always get regenerated even if the file is uptodate"
>>        | cg |
>>        self initialize.
>>
>>        cg := self buildCodeGeneratorUpTo: InterpreterPlugin.
>>
>>        cg addMethodsForPrimitives: ADPCMCodec translatedPrimitives.
>>        inlineFlag ifTrue:[
>>                "now remove a few which will be inlined but not pruned"
>>                cg pruneMethods: #(indexForDeltaFrom:to: nextBits:
>> nextBits:put:)].
>>        self storeString: cg generateCodeStringForPrimitives onFileNamed:
>> (directory fullNameFor: self moduleName, '.c').
>>        ^cg exportedPrimitiveNames asArray
>>
>>
>> this method alone could spoil someone's day because as it appears that
>> this class serves only as a facade, while all of the behavior lies
>> somewhere else.
>>
>> So, if that is not an example of 'unnecessary complexity', then what it
>> is? :)
>
> Why do you think I would disagree with your analysis? ;-) ADPCMCodecPlugin
> is not exactly a shining example of compactness and straightforwardness. But
> adding another layer surely won't improve on that ;-)
>
>> Why bother creating ADPCMCodecPlugin, when code generator can do this
>> by itself by simply looking for all implementors of
>> #translatedPrimitives
>> of all classes in system, and generate necessary primitives out of them.
>> Simple, universal and doing the same, because there are no clear
>> separation between 'what is a primitive' and what is language side
>> code.
>> But if that is not a goal, then why bother, right?
>>
>>
>>>> I think that this approach could be applied to sound prims as well, to
>>>> nicely decouple a front-end API, from low-level backend, implemented
>>>> either primitively or 'naively' or whatever.
>>>
>>> It could, but see above. What would be the point of doing this? It just
>>> adds
>>> complexity and unless there is tangible benefit I'm against adding
>>> needless
>>> complexity. I mean, if one indirection is good, two must be better, no?
>>> ;-)
>>
>> I cannot agree.
>> Good design which comes from dependency decoupling and good
>> abstraction layer(s) is not 'unnecessary complexity'.
>> In fact, in far perspective, it works straightly in opposite direction.
>
> I completely agree. But in this case the decoupling already exists. It's the
> primitive where the decoupling happens. The extra indirection is helpful
> only if one needs multiple (non-primitive) backend implementations.

but it is already like that , no? if there is no primitive, then it
fails and code is interpreted directly instead.


> Without
> that need it's a pointless indirection. For example, would you really
> consider it better design if we added the same kind of extra indirection for
> SmallInteger primitives? That's why I'm saying I don't like to add
> complexity unless there is tangible benefit in return. If there is, then
> absolutely, go for it. But if there isn't, then let's be careful with
> additional layers. They tend to get out of hand much too quickly.
>
>> This code smells. Usually things smell bad because they rot. :)
>
> Which code specifically? ADPCMCodecPlugin? Agreed for the most part. But
> then again, I don't think adding another indirection will address that smell
> particularly well.
>
>> And what people usually do with things which rotten? They throw them out.
>> Yeah, there are few, who so passionate that they could overcome the
>> disgust and start digging in rotten pile of cruft in hope to find
>> precious gems.
>> But usually this not happens often, because people having more fun things
>> to do.
>>
>>
>> Hopefully the above explains better what i meant by saying:
>> "the only means how to maintain this code is either freeze it for
>> ages, or throw it out completely."
>> to which you replied with:
>> "I fail to see how either one follows from the premise."
>
> And I still don't see it :-) You seem to forget the option to simply fix
> what's broken. That's so obvious that I still don't get why freezing or
> throwing away would be the only options.
>

Well, from your words it sounds that i should not fix it. Or should
not do it like i proposing.
Currently i don't care about eventual complexity increase or not. What
i care about is VMMaker consistency.

The problem that i (why i? WE!) need to have guaranteed way to
reproduce the VM sources, no matter what base image i using
(be it Pharo, Squeak or Cuis or Croquet).
In cases when generated VM code almost directly or indirectly or in
some nontrivial way depends on code inside an image (which not
explicitly declared as part of VM), this is problematic, because
obviously nobody could be able to track all these dependencies,
because then it requires too much knowledge and magic incarnations to
simply build same VM as you built , and therefore when people who know
all these shady corners in labyrinth leave our community at some day,
then we will be left with an artifact which no one will be able to
reproduce sitting at home and running a build script.
Then if next time someone will say "my image crashing, how to fix
that?", the most probable answer will be "we are not sure" or "we
don't know".
And after getting such kind of answers, people usually start looking
for better tools to use.

My vision is simple: VM-side is VM side. Language side is language
side. This is because VM compiled statically
and can't change during runtime.. and if not that, then there will be
no any issues with it :)

It appears that pharoers incidentally touched stuff which are not
supposed to be touched under pain of death.
Sure thing they was not aware that thing which they touching contains
behavior which goes directly into VM. So, i'd like to not see such
incidental refactorings in future. Because people having right to
change the language/system in the way they want without fearing that
they incidentally will change the most heart of a system - VM. And for
that we need a clear separation with BIG red banner: if you cross that
line - there is no turning back.. (or something like that ;)


> Cheers,
>  - Andreas
>


--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

David T. Lewis
In reply to this post by Igor Stasenko
 
On Mon, Jan 31, 2011 at 09:08:41PM +0100, Igor Stasenko wrote:

>  
> On 31 January 2011 19:21, Andreas Raab <[hidden email]> wrote:
> >
> > On 1/31/2011 4:40 PM, Igor Stasenko wrote:
> >>
> >> Funny thing ..
> >> Sound package contains a code, which used by VMMaker for generating
> >> sound plugin..
> >>
> >> which means that depending on the hacks and on forks (Pharo having
> >> different Sound package version than Squeak),
> >> you will end up with different VMs..
> >> Sounds cool yeah? :)
> >
> > Huh? Are you saying that Pharo contains different primitives than Squeak? If
> > not, I somewhat fail to see the problem.
> >
>
> I don't feel ok knowing that VM depends on right combination of
> classes in Sound package,
> since there is no clear separation between plugin and language side
> implementation.

Regardless of how these packages might be reorganized in the future,
one thing that can be of immediate practical benefit is to document
the dependencies in the form of unit tests.

I have started a few tests in SqS/VMMaker/MiscPrimitivePluginTest
(prompted primarily by a Pharo refactoring that has been causing
problems for VMMaker). This has several benefits - it documents the
dependencies; it makes it easy to detect that a change in the image
is causing problems for VM code generation; and it lets you know
if you are running a VM (plugin) that is missing support for some
primitive that should have been generated from source in the image.

If sound is a potential source of problems, then it would be great
if someone can add some more tests to provide coverage for those
dependencies.

Dave

Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

stephane ducasse-2
In reply to this post by Andreas.Raab

Hi andreas

So if I summarise the situation:

igor wants to refactor code so that the VM can be shared by several groups of images having different code
and make sure that the vm can be built on each of these groups so that the code/vm is always in sync.
and you are against stating that this refactor brings extra complexity (which I do not really see but let us say that you are right).

Now my question is what is then the process, if one of these groups change image side that gets an impact
that leads to the fact that it cannot build a VM?
I ask because the semaphore input has not be integrated on the windows VM since a year a guess and as a consequence
we are forced to use a polling system instead of a event based one.
The conclusion of this discussion to me seems that while you are against git "because it helps people forking and fork are evil", this
discussion seems to show that your position would lead exactly to force people to fork. I'm not against this because forking may be good to avoid truck factor but this is not something that we wanted to do.

May be I'm stupid and I do not understand well but I'm sure that you will explain it to me.

Stef
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

stephane ducasse-2
In reply to this post by David T. Lewis
 
Thanks david this is a good idea.

>
> Regardless of how these packages might be reorganized in the future,
> one thing that can be of immediate practical benefit is to document
> the dependencies in the form of unit tests.
>
> I have started a few tests in SqS/VMMaker/MiscPrimitivePluginTest
> (prompted primarily by a Pharo refactoring that has been causing
> problems for VMMaker). This has several benefits - it documents the
> dependencies; it makes it easy to detect that a change in the image
> is causing problems for VM code generation; and it lets you know
> if you are running a VM (plugin) that is missing support for some
> primitive that should have been generated from source in the image.
>
> If sound is a potential source of problems, then it would be great
> if someone can add some more tests to provide coverage for those
> dependencies.
>
> Dave
>

Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Andreas.Raab
In reply to this post by Igor Stasenko
 
On 2/1/2011 7:33 PM, Igor Stasenko wrote:

>>> And what people usually do with things which rotten? They throw them out.
>>> Yeah, there are few, who so passionate that they could overcome the
>>> disgust and start digging in rotten pile of cruft in hope to find
>>> precious gems.
>>> But usually this not happens often, because people having more fun things
>>> to do.
>>>
>>>
>>> Hopefully the above explains better what i meant by saying:
>>> "the only means how to maintain this code is either freeze it for
>>> ages, or throw it out completely."
>>> to which you replied with:
>>> "I fail to see how either one follows from the premise."
>> And I still don't see it :-) You seem to forget the option to simply fix
>> what's broken. That's so obvious that I still don't get why freezing or
>> throwing away would be the only options.
> Well, from your words it sounds that i should not fix it. Or should
> not do it like i proposing.

Let's see, if I read your messages correctly, the immediate concern was
that there is a dependency of VMMaker on the sound package which is
fixed by now. Then we went on discussing design choices, but as far as I
can tell this was a general discussion, not really tied to any concrete
issues that you wanted to address. If you're proposing a particular
change other than removing the dependency I'm not sure I fully
understand what you are proposing. I'm most definitely not against
fixing what is broken; however as I'm sure you can tell that I'm
(generally) opposed to adding complexity unless one can point to an
issue that is being addressed by the extra complexity.

> The problem that i (why i? WE!) need to have guaranteed way to
> reproduce the VM sources, no matter what base image i using
> (be it Pharo, Squeak or Cuis or Croquet).

I don't see why this would be a problem. In fact, I believe you *will*
generate identical sources from the different images. Am I wrong?

> In cases when generated VM code almost directly or indirectly or in
> some nontrivial way depends on code inside an image (which not
> explicitly declared as part of VM), this is problematic, because
> obviously nobody could be able to track all these dependencies,
> because then it requires too much knowledge and magic incarnations to
> simply build same VM as you built , and therefore when people who know
> all these shady corners in labyrinth leave our community at some day,
> then we will be left with an artifact which no one will be able to
> reproduce sitting at home and running a build script.

I understand what you're saying on general principles but there is
absolutely nothing "shady" about translated primitives. They have type
annotations so that they can be translated to C but that's about it.
What is "shady" about them? More importantly what are you proposing?
Nuke them all?

> It appears that pharoers incidentally touched stuff which are not
> supposed to be touched under pain of death.

Like what? Methods with <var:declareC:> in them? Isn't that a dead
giveaway that MAYBE someone with a bit of experience in the VM should
look at this? Ignorance is not a valid excuse you know ;-)

> Sure thing they was not aware that thing which they touching contains
> behavior which goes directly into VM. So, i'd like to not see such
> incidental refactorings in future. Because people having right to
> change the language/system in the way they want without fearing that
> they incidentally will change the most heart of a system - VM. And for
> that we need a clear separation with BIG red banner: if you cross that
> line - there is no turning back.. (or something like that ;)

Now that's weird. If I recall correctly, you were one of the guys who
wanted to expose everything via FFI etc. Have you ever considered what
ignorance like in the above would do to your system when you do that?
That the argument you are making is precisely the argument that I
usually make regarding fences and why proper high-level abstraction in
the VM are a Good Thing (tm)? Quite odd. But in any case, I give you
that point. I agree that having the proper abstraction behind a fence is
a Good Thing (tm) and a desirable goal. How do you propose we get there?

Cheers,
   - Andreas

Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Igor Stasenko

On 2 February 2011 10:55, Andreas Raab <[hidden email]> wrote:

>
> On 2/1/2011 7:33 PM, Igor Stasenko wrote:
>>>>
>>>> And what people usually do with things which rotten? They throw them
>>>> out.
>>>> Yeah, there are few, who so passionate that they could overcome the
>>>> disgust and start digging in rotten pile of cruft in hope to find
>>>> precious gems.
>>>> But usually this not happens often, because people having more fun
>>>> things
>>>> to do.
>>>>
>>>>
>>>> Hopefully the above explains better what i meant by saying:
>>>> "the only means how to maintain this code is either freeze it for
>>>> ages, or throw it out completely."
>>>> to which you replied with:
>>>> "I fail to see how either one follows from the premise."
>>>
>>> And I still don't see it :-) You seem to forget the option to simply fix
>>> what's broken. That's so obvious that I still don't get why freezing or
>>> throwing away would be the only options.
>>
>> Well, from your words it sounds that i should not fix it. Or should
>> not do it like i proposing.
>
> Let's see, if I read your messages correctly, the immediate concern was that
> there is a dependency of VMMaker on the sound package which is fixed by now.
> Then we went on discussing design choices, but as far as I can tell this was
> a general discussion, not really tied to any concrete issues that you wanted
> to address. If you're proposing a particular change other than removing the
> dependency I'm not sure I fully understand what you are proposing. I'm most
> definitely not against fixing what is broken; however as I'm sure you can
> tell that I'm (generally) opposed to adding complexity unless one can point
> to an issue that is being addressed by the extra complexity.
>

You did fixed it.. but this is not a fix i wanted to have:
" Weakly reference to ADPCMCodec and AbstractSound from VMMaker to
allow loading without requiring sound package. Also make translated
primitives more forgiving by skipping any translated prims that aren't
present in the image. "

This is not a solution to problem. Because you still have dependency ,
now even worse than before, because its not uncovers itself
immediately,
i mean now there is nothing tells to developer that VM depends on some
classes from Sound package, and that you should be careful when
changing stuff there.

So, from development process perspective your fix even worsened
situation, because now instead of explicit dependency, which shows
itself immediately when you loading code,
we have a hidden implicit one.

Yes the example how new FileSystem made was just an example how to do
things properly in future.
Its not clear if it applicable to Sound package in same way, but it
shows that clear separation between high and low level can be made
nicely and cleanly.

What i actually wanted to see as a "FIX" to VMMaker is:
- Create a new package , say "SoundPrims"
- put all classes which used by VMMaker there , remove these classes
from Sound package.

Now, VMMaker should have _explicit_ dependency from SoundPrims
And Sound should have _explicit_ dependency from SoundPrims.

This minimizing the chances that someone someday step over that code
and do something nasty, without knowing
that it could affect the VM stability, which we building for various
images, not just for specific ones.

Simple enough?


>> The problem that i (why i? WE!) need to have guaranteed way to
>> reproduce the VM sources, no matter what base image i using
>> (be it Pharo, Squeak or Cuis or Croquet).
>
> I don't see why this would be a problem. In fact, I believe you *will*
> generate identical sources from the different images. Am I wrong?
>

Of course you wrong. We have two different Sound packages maintained
by different parties.
Where the guarantees that changes which one party will make in future
won't affect the code which goes to VM side?
What are chances that changes which one party make will go unnoticed
by another one? What if one party would want to significantly diverge
own branch,
which affects the language side code, and as side effect (unwanted
one) it could affect the VM-generated code? How to ensure that it
won't happen?
These are the questions which i want to have answered.

And if we don't find a solution to that, then it will mean that either
these two parties now should have own forks of VM, or have no way to
clearly state what code goes into VM
and what is not  (again: freeze for ages or being thrown away).

I cannot claim that my VM is equal to yours, once i using different
packages for generating its code.
So, next time when i will have some issues, i will be on my own,
because you can always say: you are not using "proper" sources for
generating VM, so its your own problem.
So, lets make sure that we all using same proper sources, and don't
pretend that apples and oranges are the same, because they are fruits.


>> In cases when generated VM code almost directly or indirectly or in
>> some nontrivial way depends on code inside an image (which not
>> explicitly declared as part of VM), this is problematic, because
>> obviously nobody could be able to track all these dependencies,
>> because then it requires too much knowledge and magic incarnations to
>> simply build same VM as you built , and therefore when people who know
>> all these shady corners in labyrinth leave our community at some day,
>> then we will be left with an artifact which no one will be able to
>> reproduce sitting at home and running a build script.
>
> I understand what you're saying on general principles but there is
> absolutely nothing "shady" about translated primitives. They have type
> annotations so that they can be translated to C but that's about it. What is
> "shady" about them? More importantly what are you proposing? Nuke them all?
>

Shady in terms of dependencies and hidden knowledge. Maybe for you the
layers of system is transparent and you can clearly see what are
dependencies
between them. But put yourself on place of the guy which has no any
clues about it.
He only started and wants to build own VM, so at some day when he
learn enough he could contribute own VM hacks to community.
But now, the problem is, that without knowing everything he can't even
start, because we don't have things which can be reproduced
independently from who is sitting before keyboard
and pressing "doit" key.


>> It appears that pharoers incidentally touched stuff which are not
>> supposed to be touched under pain of death.
>
> Like what? Methods with <var:declareC:> in them? Isn't that a dead giveaway
> that MAYBE someone with a bit of experience in the VM should look at this?
> Ignorance is not a valid excuse you know ;-)
>

Arrogance neither.

If development process assuming that we cannot do mistakes, and there
are no measures to minimize the chances of doing them,
because it was designed by/for people who never doing mistakes, then
its not good process.

Humans tend to do a lot of mistakes, and we should invent the process
which takes this into account and deals with it,
otherwise we can simply state that humans are not fit for developing
squeak VM or even code in smalltalk.

And yes, no methods with <var:declareC:> were touched..  But that is
not necessary to put VM on knees. Just insert  an instance variable to
ADCPCodec class
before all existing ones and see what will happen.

>> Sure thing they was not aware that thing which they touching contains
>> behavior which goes directly into VM. So, i'd like to not see such
>> incidental refactorings in future. Because people having right to
>> change the language/system in the way they want without fearing that
>> they incidentally will change the most heart of a system - VM. And for
>> that we need a clear separation with BIG red banner: if you cross that
>> line - there is no turning back.. (or something like that ;)
>
> Now that's weird. If I recall correctly, you were one of the guys who wanted
> to expose everything via FFI etc. Have you ever considered what ignorance
> like in the above would do to your system when you do that?

That's a little different. Exposing VM internals to FFI not makes VM
more fragile in a sense,
that i can (re)produce same VM from its sources as artifact whether i
exploiting these features or not.
You are mixing concerns here.

> That the
> argument you are making is precisely the argument that I usually make
> regarding fences and why proper high-level abstraction in the VM are a Good
> Thing (tm)? Quite odd. But in any case, I give you that point. I agree that
> having the proper abstraction behind a fence is a Good Thing (tm) and a
> desirable goal. How do you propose we get there?
>

See the above:  refactor Sound package and move all VM-specific code
into separate package
and make VMMaker to be explicitly dependent on that package.

> Cheers,
>  - Andreas
>
>



--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Andreas.Raab
 
On 2/2/2011 2:07 PM, Igor Stasenko wrote:

>> Let's see, if I read your messages correctly, the immediate concern was that
>> there is a dependency of VMMaker on the sound package which is fixed by now.
>> Then we went on discussing design choices, but as far as I can tell this was
>> a general discussion, not really tied to any concrete issues that you wanted
>> to address. If you're proposing a particular change other than removing the
>> dependency I'm not sure I fully understand what you are proposing. I'm most
>> definitely not against fixing what is broken; however as I'm sure you can
>> tell that I'm (generally) opposed to adding complexity unless one can point
>> to an issue that is being addressed by the extra complexity.
> You did fixed it.. but this is not a fix i wanted to have:

Sorry to hear that, but if you're telling me that the problem you're
having is that you can't load VMMaker without loading the sound package
and that you'd like to see that change, don't be surprised if I fix the
problem you're telling me, not the problem you're having in the back of
your mind. My Jedi powers are weak you know :-)

> What i actually wanted to see as a "FIX" to VMMaker is:
> - Create a new package , say "SoundPrims"
> - put all classes which used by VMMaker there , remove these classes
> from Sound package.

Let's be a bit more explicit: Which classes and methods would be
included in that?

> Now, VMMaker should have _explicit_ dependency from SoundPrims
> And Sound should have _explicit_ dependency from SoundPrims.
>
> This minimizing the chances that someone someday step over that code
> and do something nasty, without knowing
> that it could affect the VM stability, which we building for various
> images, not just for specific ones.
>
> Simple enough?

Certainly. But see below.

>>> The problem that i (why i? WE!) need to have guaranteed way to
>>> reproduce the VM sources, no matter what base image i using
>>> (be it Pharo, Squeak or Cuis or Croquet).
>> I don't see why this would be a problem. In fact, I believe you *will*
>> generate identical sources from the different images. Am I wrong?
>>
> Of course you wrong. We have two different Sound packages maintained
> by different parties.
> Where the guarantees that changes which one party will make in future
> won't affect the code which goes to VM side?
> What are chances that changes which one party make will go unnoticed
> by another one? What if one party would want to significantly diverge
> own branch,
> which affects the language side code, and as side effect (unwanted
> one) it could affect the VM-generated code? How to ensure that it
> won't happen?
> These are the questions which i want to have answered.

These are good questions. But one thing that I don't understand is why
you think the SoundPrims package would be unaffected by these issues.
People can change that package just as easily as the Sound package, and
given that you seem to be saying that some Pharo folks have changed the
prims in the Sound package without knowing what they were doing, what
makes you think they would have left a separate SoundPrims package
alone?! And why do you think that the SoundPrims package would stay in
sync over time? I mean, all the (good) issues you are raising apply
every bit as much to a SoundPrims package as they apply to the Sound
package. So if there is a solution that you're having in mind for the
SoundPrims package, can't we apply the solution directly to the Sound
package and just get over it?

>>> In cases when generated VM code almost directly or indirectly or in
>>> some nontrivial way depends on code inside an image (which not
>>> explicitly declared as part of VM), this is problematic, because
>>> obviously nobody could be able to track all these dependencies,
>>> because then it requires too much knowledge and magic incarnations to
>>> simply build same VM as you built , and therefore when people who know
>>> all these shady corners in labyrinth leave our community at some day,
>>> then we will be left with an artifact which no one will be able to
>>> reproduce sitting at home and running a build script.
>> I understand what you're saying on general principles but there is
>> absolutely nothing "shady" about translated primitives. They have type
>> annotations so that they can be translated to C but that's about it. What is
>> "shady" about them? More importantly what are you proposing? Nuke them all?
>>
> Shady in terms of dependencies and hidden knowledge. Maybe for you the
> layers of system is transparent and you can clearly see what are
> dependencies
> between them. But put yourself on place of the guy which has no any
> clues about it.
> He only started and wants to build own VM, so at some day when he
> learn enough he could contribute own VM hacks to community.
> But now, the problem is, that without knowing everything he can't even
> start, because we don't have things which can be reproduced
> independently from who is sitting before keyboard
> and pressing "doit" key.

You seem to be misinterpreting the usage of (in particular) translated
primitives. You *can* generate a VM without translated primitives. They
are used purely for optimization. That means your VM may be different
from mine, but that's no different than you choosing a different set of
plugins to generate or (not) loading other packages such as Balloon3D or
Freetype. In both cases our VMs will differ and knowledge about what is
required to build exactly "my" VM is always needed (in fact, that is why
I always produce source releases with generated sources so that people
don't have to guess).

>>> It appears that pharoers incidentally touched stuff which are not
>>> supposed to be touched under pain of death.
>> Like what? Methods with<var:declareC:>  in them? Isn't that a dead giveaway
>> that MAYBE someone with a bit of experience in the VM should look at this?
>> Ignorance is not a valid excuse you know ;-)
> Arrogance neither.
>
> If development process assuming that we cannot do mistakes, and there
> are no measures to minimize the chances of doing them,
> because it was designed by/for people who never doing mistakes, then
> its not good process.
>
> Humans tend to do a lot of mistakes, and we should invent the process
> which takes this into account and deals with it,
> otherwise we can simply state that humans are not fit for developing
> squeak VM or even code in smalltalk.
>
> And yes, no methods with<var:declareC:>  were touched..  But that is
> not necessary to put VM on knees. Just insert  an instance variable to
> ADCPCodec class before all existing ones and see what will happen.

So true. But how exactly are your changes going to fix that? And why
single out Sound? Just insert an ivar before everything else in class
Process. Or Semaphore. Or Behavior. Or Form. Or Whatnot. Seriously, I
understand the above line of thought but bringing in an argument along
the lines of "ZOMG, I cannot add an iVar to class AbstractSound, we need
a SoundPrims package!" make no sense to me. The latter does not follow
from the former. Maybe I'm missing something here but I don't understand
why you're even bringing such an argument in here. It seems entirely
unrelated.

>>> Sure thing they was not aware that thing which they touching contains
>>> behavior which goes directly into VM. So, i'd like to not see such
>>> incidental refactorings in future. Because people having right to
>>> change the language/system in the way they want without fearing that
>>> they incidentally will change the most heart of a system - VM. And for
>>> that we need a clear separation with BIG red banner: if you cross that
>>> line - there is no turning back.. (or something like that ;)
>> Now that's weird. If I recall correctly, you were one of the guys who wanted
>> to expose everything via FFI etc. Have you ever considered what ignorance
>> like in the above would do to your system when you do that?
> That's a little different. Exposing VM internals to FFI not makes VM
> more fragile in a sense,
> that i can (re)produce same VM from its sources as artifact whether i
> exploiting these features or not.
> You are mixing concerns here.

I'm just amused by the apparent inconsistency of your position regarding
fences :-)
But never mind, this is not the point here.

>> That the
>> argument you are making is precisely the argument that I usually make
>> regarding fences and why proper high-level abstraction in the VM are a Good
>> Thing (tm)? Quite odd. But in any case, I give you that point. I agree that
>> having the proper abstraction behind a fence is a Good Thing (tm) and a
>> desirable goal. How do you propose we get there?
>>
> See the above:  refactor Sound package and move all VM-specific code
> into separate package and make VMMaker to be explicitly dependent on that package.

Personally, I'm still not convinced that the added complexity is worth
it, though others might obviously disagree. I'm curious about your
answers to the question above, i.e., why you think that a SoundPrims
package would make a difference and if we couldn't use whatever you're
planning to keep it in sync with the Sound package itself.

Cheers,
   - Andreas

Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

Igor Stasenko

On 2 February 2011 15:10, Andreas Raab <[hidden email]> wrote:

>
> On 2/2/2011 2:07 PM, Igor Stasenko wrote:
>>>
>>> Let's see, if I read your messages correctly, the immediate concern was
>>> that
>>> there is a dependency of VMMaker on the sound package which is fixed by
>>> now.
>>> Then we went on discussing design choices, but as far as I can tell this
>>> was
>>> a general discussion, not really tied to any concrete issues that you
>>> wanted
>>> to address. If you're proposing a particular change other than removing
>>> the
>>> dependency I'm not sure I fully understand what you are proposing. I'm
>>> most
>>> definitely not against fixing what is broken; however as I'm sure you can
>>> tell that I'm (generally) opposed to adding complexity unless one can
>>> point
>>> to an issue that is being addressed by the extra complexity.
>>
>> You did fixed it.. but this is not a fix i wanted to have:
>
> Sorry to hear that, but if you're telling me that the problem you're having
> is that you can't load VMMaker without loading the sound package and that
> you'd like to see that change, don't be surprised if I fix the problem
> you're telling me, not the problem you're having in the back of your mind.
> My Jedi powers are weak you know :-)

Yeah.. probably because i am talking not about technical details here,
but about changing the process how
we developing the VM-related stuff. But see more below.

>
>> What i actually wanted to see as a "FIX" to VMMaker is:
>> - Create a new package , say "SoundPrims"
>> - put all classes which used by VMMaker there , remove these classes
>> from Sound package.
>
> Let's be a bit more explicit: Which classes and methods would be included in
> that?
>

Well, it needs analysis.
Pharoers split this package on two parts. Which made base Sound to be
not dependent on morphic.
I'm not ready to answer what exactly should go to VM-related package.

>> Now, VMMaker should have _explicit_ dependency from SoundPrims
>> And Sound should have _explicit_ dependency from SoundPrims.
>>
>> This minimizing the chances that someone someday step over that code
>> and do something nasty, without knowing
>> that it could affect the VM stability, which we building for various
>> images, not just for specific ones.
>>
>> Simple enough?
>
> Certainly. But see below.
>
>>>> The problem that i (why i? WE!) need to have guaranteed way to
>>>> reproduce the VM sources, no matter what base image i using
>>>> (be it Pharo, Squeak or Cuis or Croquet).
>>>
>>> I don't see why this would be a problem. In fact, I believe you *will*
>>> generate identical sources from the different images. Am I wrong?
>>>
>> Of course you wrong. We have two different Sound packages maintained
>> by different parties.
>> Where the guarantees that changes which one party will make in future
>> won't affect the code which goes to VM side?
>> What are chances that changes which one party make will go unnoticed
>> by another one? What if one party would want to significantly diverge
>> own branch,
>> which affects the language side code, and as side effect (unwanted
>> one) it could affect the VM-generated code? How to ensure that it
>> won't happen?
>> These are the questions which i want to have answered.
>
> These are good questions. But one thing that I don't understand is why you
> think the SoundPrims package would be unaffected by these issues. People can
> change that package just as easily as the Sound package, and given that you
> seem to be saying that some Pharo folks have changed the prims in the Sound
> package without knowing what they were doing, what makes you think they
> would have left a separate SoundPrims package alone?! And why do you think
> that the SoundPrims package would stay in sync over time? I mean, all the
> (good) issues you are raising apply every bit as much to a SoundPrims
> package as they apply to the Sound package. So if there is a solution that
> you're having in mind for the SoundPrims package, can't we apply the
> solution directly to the Sound package and just get over it?
>

It is clearly more process organization issue rather than technical one.
Splitting is required to separate responsibilities between
VM-developers and image developers.
So, in addition to splitting ,we put SoundPrims to VMMaker repository.
This will guarantee that everyone will use same branch
of SoundPrims irrelevant to fork(ed) image, as long as we using same
VM and as long as code related to VM i prefer to see it at right place
and being managed by right people who taking responsibility that VM is
working and stable.

Sorry that i were not precise about that earlier, but i thought that
it is obvious. Split required to reassign responsibilities,
not just because it is nicer/cleaner or otherwise introducing
unnecessary complexity etc etc.


>>>> In cases when generated VM code almost directly or indirectly or in
>>>> some nontrivial way depends on code inside an image (which not
>>>> explicitly declared as part of VM), this is problematic, because
>>>> obviously nobody could be able to track all these dependencies,
>>>> because then it requires too much knowledge and magic incarnations to
>>>> simply build same VM as you built , and therefore when people who know
>>>> all these shady corners in labyrinth leave our community at some day,
>>>> then we will be left with an artifact which no one will be able to
>>>> reproduce sitting at home and running a build script.
>>>
>>> I understand what you're saying on general principles but there is
>>> absolutely nothing "shady" about translated primitives. They have type
>>> annotations so that they can be translated to C but that's about it. What
>>> is
>>> "shady" about them? More importantly what are you proposing? Nuke them
>>> all?
>>>
>> Shady in terms of dependencies and hidden knowledge. Maybe for you the
>> layers of system is transparent and you can clearly see what are
>> dependencies
>> between them. But put yourself on place of the guy which has no any
>> clues about it.
>> He only started and wants to build own VM, so at some day when he
>> learn enough he could contribute own VM hacks to community.
>> But now, the problem is, that without knowing everything he can't even
>> start, because we don't have things which can be reproduced
>> independently from who is sitting before keyboard
>> and pressing "doit" key.
>
> You seem to be misinterpreting the usage of (in particular) translated
> primitives. You *can* generate a VM without translated primitives. They are
> used purely for optimization. That means your VM may be different from mine,
> but that's no different than you choosing a different set of plugins to
> generate or (not) loading other packages such as Balloon3D or Freetype. In
> both cases our VMs will differ and knowledge about what is required to build
> exactly "my" VM is always needed (in fact, that is why I always produce
> source releases with generated sources so that people don't have to guess).
>

And so, when you leave nobody will be able to reproduce your process ,
because it is not open
and not documented. We should move away from that practice.
Knowledge should be available in form of sources and configuration
lying at public places,
not in form of packaged .zip files released once per year by single person.
Take a CogVM for instance. Why i should use image, stored in repo?
What if i want to use different one for building VM?
How i can reproduce same package/source set and put it into different
image and be sure it will produce same
VM as in original image?
Can anyone, except Eliot reproduce such image from scratch by loading
related packages from publicly available places? (I know the answer,
but i want to hear yours).

It is a pain to extract this knowledge, but i doing it anyways.. So,
please be patient :)

Clearly, we need such an artifact, which can continue living without
its original author(s) otherwise nobody will use it.


>>>> It appears that pharoers incidentally touched stuff which are not
>>>> supposed to be touched under pain of death.
>>>
>>> Like what? Methods with<var:declareC:>  in them? Isn't that a dead
>>> giveaway
>>> that MAYBE someone with a bit of experience in the VM should look at
>>> this?
>>> Ignorance is not a valid excuse you know ;-)
>>
>> Arrogance neither.
>>
>> If development process assuming that we cannot do mistakes, and there
>> are no measures to minimize the chances of doing them,
>> because it was designed by/for people who never doing mistakes, then
>> its not good process.
>>
>> Humans tend to do a lot of mistakes, and we should invent the process
>> which takes this into account and deals with it,
>> otherwise we can simply state that humans are not fit for developing
>> squeak VM or even code in smalltalk.
>>
>> And yes, no methods with<var:declareC:>  were touched..  But that is
>> not necessary to put VM on knees. Just insert  an instance variable to
>> ADCPCodec class before all existing ones and see what will happen.
>
> So true. But how exactly are your changes going to fix that? And why single
> out Sound? Just insert an ivar before everything else in class Process. Or
> Semaphore. Or Behavior. Or Form. Or Whatnot. Seriously, I understand the
> above line of thought but bringing in an argument along the lines of "ZOMG,
> I cannot add an iVar to class AbstractSound, we need a SoundPrims package!"
> make no sense to me. The latter does not follow from the former. Maybe I'm
> missing something here but I don't understand why you're even bringing such
> an argument in here. It seems entirely unrelated.


All such cases should be properly documented. if class used in special
objects array
or its slots layout used by primitives, this should be stated, that no
changes should be made
unless you synchronously change the VM.
The argument was about visibility of such things in form of warnings
and documentation,
to minimize the chance of affecting this code by some random
refactoring (hehehe :).
And of course separating responsibilities and not mixing high-level
with low-level helps in that direction too.

>
>>>> Sure thing they was not aware that thing which they touching contains
>>>> behavior which goes directly into VM. So, i'd like to not see such
>>>> incidental refactorings in future. Because people having right to
>>>> change the language/system in the way they want without fearing that
>>>> they incidentally will change the most heart of a system - VM. And for
>>>> that we need a clear separation with BIG red banner: if you cross that
>>>> line - there is no turning back.. (or something like that ;)
>>>
>>> Now that's weird. If I recall correctly, you were one of the guys who
>>> wanted
>>> to expose everything via FFI etc. Have you ever considered what ignorance
>>> like in the above would do to your system when you do that?
>>
>> That's a little different. Exposing VM internals to FFI not makes VM
>> more fragile in a sense,
>> that i can (re)produce same VM from its sources as artifact whether i
>> exploiting these features or not.
>> You are mixing concerns here.
>
> I'm just amused by the apparent inconsistency of your position regarding
> fences :-)

I am against fences. Fence means that you're not able to do something
without getting pass.
I want to be able to pass through fence when i want.
But i don't want to find myself walking on minefield, because someone
forgot to put sign there.

> But never mind, this is not the point here.
>
>>> That the
>>> argument you are making is precisely the argument that I usually make
>>> regarding fences and why proper high-level abstraction in the VM are a
>>> Good
>>> Thing (tm)? Quite odd. But in any case, I give you that point. I agree
>>> that
>>> having the proper abstraction behind a fence is a Good Thing (tm) and a
>>> desirable goal. How do you propose we get there?
>>>
>> See the above:  refactor Sound package and move all VM-specific code
>> into separate package and make VMMaker to be explicitly dependent on that
>> package.
>
> Personally, I'm still not convinced that the added complexity is worth it,
> though others might obviously disagree. I'm curious about your answers to
> the question above, i.e., why you think that a SoundPrims package would make
> a difference and if we couldn't use whatever you're planning to keep it in
> sync with the Sound package itself.
>

Because as i said, SoundPrims have to be maintained by VM developers
as long as it is an integral part of VM,
and as long as same VM shared among multiple forks.
How people using these prims in their forks, or if they are using them
at all is not a concern of VM developers.


> Cheers,
>  - Andreas
>
>



--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Sounds baaad sounds

stephane ducasse-2
In reply to this post by stephane ducasse-2

So my question was probably not well written :)

> Now my question is what is then the process, if one of these groups change image side that gets an impact
> that leads to the fact that it cannot build a VM?

I noticed since a while that you decided to not reply to my emails and this is fun to see you doing that.
Have fun.

Stef

>
> Hi andreas
>
> So if I summarise the situation:
>
> igor wants to refactor code so that the VM can be shared by several groups of images having different code
> and make sure that the vm can be built on each of these groups so that the code/vm is always in sync.
> and you are against stating that this refactor brings extra complexity (which I do not really see but let us say that you are right).
>
> Now my question is what is then the process, if one of these groups change image side that gets an impact
> that leads to the fact that it cannot build a VM?
> I ask because the semaphore input has not be integrated on the windows VM since a year a guess and as a consequence
> we are forced to use a polling system instead of a event based one.
> The conclusion of this discussion to me seems that while you are against git "because it helps people forking and fork are evil", this
> discussion seems to show that your position would lead exactly to force people to fork. I'm not against this because forking may be good to avoid truck factor but this is not something that we wanted to do.
>
> May be I'm stupid and I do not understand well but I'm sure that you will explain it to me.
>
> Stef

12