code: function Program( gl, vert, frag, defs  ){
    this.gl = gl;
    this.program = gl.createProgram();
    this.vShader = gl.createShader( gl.VERTEX_SHADER );
    this.fShader = gl.createShader( gl.FRAGMENT_SHADER );
    this.dyns    = [];
    this.ready   = false;
    gl.attachShader(this.program, this.vShader);
    gl.attachShader(this.program, this.fShader);
  
    this._uid    = (_UID++)|0; 
    this._cuid   = (_UID++)|0; 
  
    if( vert !== undefined && frag !== undefined ){
      this.compile( vert, frag, defs );
    }
  }
docs: Program constructor. Create gl program and shaders. You can pass optional shader code to immediatly compile shaders
  @param {WebGLRenderingContext} gl webgl context this program belongs to
  @param {String} [vert=undefined] an optional vertex shader code. See {@link Program#compile}
  @param {String} [frag=undefined] an optional fragment shader code See {@link Program#compile}
  @param {String} [defs=undefined] an optional string prepend to both fragment and vertex shader code. See {@link Program#compile}.
  @see {@link Program#compile}
  
  @example <caption>For the given vertex shader</caption>
  attribute vec3 aPosition;
  uniform mat4 uMVP;
  uniform vec3 uCameraPosition;
  
  @class
  @classdesc Program class provide shader compilation and linking functionality.
  It also give you convenient access to active uniforms and attributes.
  Once compiled, the Program object list all used uniforms/attributes and provide getter/setter function for each one. See {@link Program} constructor.