It's been pretty quiet on this list, so I thought I'd start a
conversation to see if the list is working. Anyone doing any
interesting Self work?
I sidelined my VNC client in Self for a bit due to getting busy in my
day job but plan to get back to it soon and finish it off. It's pretty
close. The missing part is mostly key handling.
I'd like to tidy up my Android patches too and get them submitted so
at least Intel android would work out of the box.
What do people feel would make Self more viable as a fun project to hack on?
--
http://www.bluishcoder.co.nz
I did a simple method test send benchmark vs Pharo Smalltalk and the
results on my Linux laptop show Self as being very slow. I'm wondering
if I'm perhaps doing something that's slowing things down.
The Self code is a simple object with two methods:
doSomething = ( ^ self )
test = ( |count <- 0 |
[ count < 100000000 ] whileTrue: [
count: count + 1.
doSomething.
].
Running a timed test gives:
[ test ] time
=> 3000
So 3 seconds to run that.
Pharo code is almost exactly the same:
doSomething = ^self
test = |count|
count := 0.
[ count < 100000000 ] whileTrue: [
count := count + 1.
doSomething.
].
[ MyObject new test ] timeToRun
=> 0:00:00:00.239
So 239 ms vs 3000 ms. Quite a difference!
Is this just a stupid microbenchmark measuring different things problem?
--
http://bluishcoder.co.nz
This week I've been looking at the transporter trees code.
I have committed a slightly more robust version of transporter trees - the code is in the transporter-trees branch of the main github.com/russellallen/self repo. Not VM changes are required, so just "git checkout transporter-trees" and then build a snapshot to check it out.
Usage is as in the github.com/russellallen/self-webserver repo:
modules init
registerTree: 'org_selflanguage_webserver'
At: 'path/to/org_selflanguage_webserver'.
bootstrap read: 'webserver'
InTree: 'org_selflanguage_webserver'.
Important considerations: module names are globally unique (that is, two modules called 'webserver' in different trees are considered the same module and will overwrite each other). The tree name itself should also be globally unique - that is it is not possible to have two trees with the same name in a single Self world.
The advantages of this over a simple symbolic link to a separate filesystem tree is we can do overlays - if you want special string behaviour, then put it in your tree in my_tree/core/string.self and it will override as expected.
Modules that import subparts will try to import them from the same tree by default.
Also bumped up versions on relevant modules, and reworked worldBuilder.self so that it isn't a module.
That way code can check for the core version in a module preFileIn method as so:
modules allCore version >= (modules init moduleVersion copyOn: '1.0.0')
ifFalse: [log warning: 'Ancient version of Self!']
I'm not sure if I'm completely happy with this yet. I have two main issues.
1) should I reversion all the modules in the system to get rid of the residual $SUN-Revision$ stuff? At the moment I just work round it.
2) should module names continue to be a single global namespace? Won't this lead to us going down the icky Squeak path of having initials everywhere? eg RAClassName? Or is it less important because although modules must be globally unique, object paths from the lobby don't have to be?
:) Russell
A new version of the system log has been pushed with slightly improved integration with existing system messages (which were mostly just printLines). It also by default prints with a small number of nice colours for warnings, errors and fatal messages. As a failsafe, if the scheduler is not started, it dumps the message to STDOUT marked with '*unlogged*'.
There is also a new method: log resetToSimplePrinting
This resets everything so it looks the same as before logging was installed.
All this is in the logger branch on Github.com/russellallen/self
:) Russell