Node.js on PowerPC

A story about porting Node.js & V8

Who cares?

I've never used PowerPC

So I probably don't care about this at all


Really? - Have you ever used..

  • Mac G4 / G5?
  • PS3? Xbox360? Wii?

IBM Cloud

V8 - a JavaScript runtime

That's part of the Chrome browser, right?

Yes, but V8 is also a stand-alone runtime

Node.js uses V8 as its JS runtime engine

Node.js primer


What's Node made of?

V8 Enginelibuvcore lib
C++
JS
C
platform abstraction layer
JavaScript

Node.js was created by Ryan Dahl
Joyent is the steward of Node.js

What do you do with Node.js?


A few good examples of when Node.js is a good fit

  • Single page gmail-like applications
  • Creating services with JSON API
  • Streaming data


http://pettergraff.blogspot.ca/2013/01/why-node.html
http://nodeguide.com/convincing_the_boss.html

NPM

  • Node Package Manager
    • online repository of node modules (npmjs.org)
    • command line utility for interacting with npmjs.org

  • Most node applications are built using many packages

  • Example:
  • 
    $ npm install orion
    $ node node_modules/orion/server.js
    

Was it hard to port?

  • Node.js - No, not really.
  • V8 - Yes. Very.


    Why? V8 always compiles JS to machine code.

Can I get it? YES!



Is it open source? YES!

How is PowerPC different?

Not Intel assembly, so completely different machine instructions

PowerPC is Big Endian (actually bi-endian)


Consider 0xDEADBEEF stored in memory

Memory location little big mixed
base address + 0 EF DE AD
base address + 1 BE AD DE
base address + 2 AD BE EF
base address + 3 DE EF BE

Checking Endian


	
int main()
{
  int x = 1;

  char *y = (char*)&x;

  printf("%c\n",*y+48);
}

Clearly this is a C porting problem

JS doesn't care about endian


You might. ES6 introduces TypedArrays



var a1 = new Uint32Array([1]);

var a2 = new Uint8Array(a1.buffer);

console.log(a2[0])
				

http://calculist.org/blog/2012/04/24/the-little-endian-web/

TypedArray

  • An ArrayBuffer type, representing a generic fixed-length binary buffer
  • A group of types are used to create views of the ArrayBuffer
  • Multiple typed array views can refer to the same ArrayBuffer, of different types, lengths, and offsets





Typed Array spec: http://www.khronos.org/registry/typedarray/specs/latest

Demo Node.js on PowerPC



Hopefully the demo gods will allow this..

Questions?


Andrew Low

twitter @andrew_low

blog: http://lowtek.ca/roo