Hi Ben,
On Sun, Dec 3, 2017 at 6:08 PM, Ben Coman <[email protected]> wrote:
> I'm shooting in the dark here since its a bit hard to grasp...
> a. The implications of support alternative bytecode sets
> * Do the alternative bytecode sets run in parallel to normal Pharo
> bytecodes?
>
Yes. There's a single bit in the header of a compiled method that selects
between two bytecode sets. In current Squeak and Pharoi VMs, if the bit is
unset then the normal bytecode set is used, and if the nit is set, the
Sista bytecode set is used.
* Can the bytecode sets be loaded adhoc/dynamically into an Image?
> or only compiled into the VM?
>
Only compiled into the VM.
> b. How to implement/work with alternative bytecodes
>
In Squeak there are class-side accessors in CompiledCode. See CompiledCode
class>>installSecondaryBytecodeSet:. Note that the support isn't quite
finished yet. I hope to have the Sista vytecde set ready for the next
release of Squeak. Clément is providing it in Pharo.
In Squeak the BytecodeEncoder hierarchy implements the necessary support
for multiple bytecode sets. Via CompiledCode
class>>installSecondaryBytecodeSet: the system is informed as to which
bytecode set to use. This must match the bytecode set(s) that are in the
VM. Classes beneath BytecodeEncoder, in
particular EncoderForV3PlusClosures and EncoderForSistaV1 (in package
BytecodeSets at http://source.squeak.org/VMMaker) encode the current and
the Sista sets respectively.
For (a.) I guess an exciting opportunity is facilitating an Ethereum
> virtual machine
> running as a Process inside a Pharo image, managed by tools written in
> Pharo.
> Other languages are already getting in a party which would be good for
> Pharo to join.
> In such a revolutionary domain I expect people are more willing to
> experiment
> with alternative systems like Pharo, and I bet Pharo could excel in that
> domain.
> * https://github.com/ethereum/go-ethereum/blob/master/core/vm/opcodes.go
> * https://medium.com/@jeff.ethereum/optimising-the-
> ethereum-virtual-machine-58457e61ca15
> * https://github.com/pirapira/awesome-ethereum-virtual-
> machine#evm-implementations
>
>
> To help (b.), would it be feasible to blog a mini-demo showing how to
> install/use alternative bytecodes? maybe for something like this simple RPN
> calculator substitute for "arith.c"...
> * https://github.com/philipaconrad/mini-vm/tree/master/examples/arith
> * https://github.com/philipaconrad/mini-vm/blob/
> master/examples/arith/arith.c
>
That's not how this will work. Essentially it is transparent. Once the
bytecode set support is installed in the compiler one simply compiles
Smalltalk (or anything else that produces parse trees that can be output to
compiled methods via the BytecodeEncoder hierarchy) and the method will be
output in the currently selected bytecode set. So it's not something one
plays around with, unless that is, one is developing the bytecode set in
the Vm sim,letter.
>
> (a calculator demo could be an interesting adjunct to Sven's calculator
> tutorial...)
> https://medium.com/concerning-pharo/rediscovering-the-ux-of-
> the-legendary-hp-35-scientific-pocket-calculator-d1d497ece999
>
>
> cheers -ben
>
--
_,,,^..^,,,_
best, Eliot