Bluish Coder

Programming Languages, Martials Arts and Computers. The Weblog of Chris Double.


2006-04-27

Javascript Partial Continuations

I've been playing around with Rhino, a Javascript interpreter written in Java, using it as a server side scripting language. Rhino supports continuations so I thought I'd try and port the bshift and breset implementation I ported to Factor to Javascript.

My initial attempt is in partial-continuations.js.This can be loaded into the Rhino interpreter using:

load("partial-continuations.js")

Rhino's 'load' understands URL's so you can even do:

load("http://www.bluishcoder.co.nz/code/partial-continuations.js")

A simple use of the 'range' example in Javascript is:

function range(rc, from, to) {
 return  bshift(rc, function(pcc) {
               while(from <= to) {
                 pcc(from++);
               }
               return undefined;
             });

function test1() {
  breset(function(rc) { 
    print(range(rc, 1, 5)); 
    return 0; 
  });
}

This works fine printing the number from 1 to 5. I've struck a bit of wierdness with the attempt to translate the CLU-iterator idiom mentioned in my previous post. My Javascript translation was:

function test3() {
  var sum = 0;
  breset(function(rc) {
    var tmp = range(rc, 1, 10);
    sum += tmp;
  });
  print(sum);
}

This works, printing '55'. But if I change it to the following it prints 10:

function test3() {
  var sum = 0;
  breset(function(rc) {
    sum += range(rc, 1, 10);
  });
  print(sum);
}

For some reason the range call is not calling the entire breset scope. It's only calling from the 'range' onwards. Can anyone spot what's wrong with my implementation?

Tags


This site is accessable over tor as hidden service 6vp5u25g4izec5c37wv52skvecikld6kysvsivnl6sdg6q7wy25lixad.onion, or Freenet using key:
USK@1ORdIvjL2H1bZblJcP8hu2LjjKtVB-rVzp8mLty~5N4,8hL85otZBbq0geDsSKkBK4sKESL2SrNVecFZz9NxGVQ,AQACAAE/bluishcoder/-61/


Tags

Archives
Links