pogo
A readable, DSL friendly programming language that compiles to JavaScript
Last updated 5 years ago by refractalize .
BSD-2-Clause · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install pogo 
SYNC missed versions from official npm registry.

Whaa?

Pogoscript is a programming language that emphasises readability, is friendly to domain specific languages and compiles to regular Javascript.

travis-ci

NPM version

NPM dependencies

Installation

Pogoscript requires node.js and npm.

npm install -g pogo

Or to install local to your project:

npm install pogo

Usage

Interactive Prompt

pogo

Executing a Script

pogo helloWorld.pogo

Debugging a Script

All the regular node debugging invocations work:

To invoke the node debugger:

pogo debug helloWorld.pogo

To allow remote debugging, e.g. with node-inspector:

pogo --debug helloWorld.pogo

If you want to break on the first line:

pogo --debug-brk helloWorld.pogo

You can also put breakpoints in your source code, just put debugger on its own line:

someFunction ()
debugger
someOtherFunction ()

Compiling a Script

pogo -c helloWorld.pogo

Will produce helloWorld.js.

Watching and Compiling

pogo -cw helloWorld.pogo

Examples!

The canonical Node.js hello world:

http = require 'http'

http.createServer @(req, res)
    res.writeHead 200 ('Content-Type': 'text/plain')
    res.end "Hello World\n"
.listen 1337 "127.0.0.1"

console.log 'Server running at http://127.0.0.1:1337/'

The canonical 99 beers on the wall:

sing (n) bottlesOfBeerOnTheWall =
    if (n > 0)
        console.log ((n) bottlesOfBeerOnTheWall)
        sing (n - 1) bottlesOfBeerOnTheWall

(n) bottlesOfBeerOnTheWall =
    "#((n) bottles) of beer on the wall, #((n) bottles) of beer.\n" +
    "Take one down, pass it around, #((n - 1) bottles) of beer on the wall."

(n) bottles =
    if (n == 0)
        "no bottles"
    else if (n == 1)
        "1 bottle"
    else
        "#(n) bottles"

sing 99 bottlesOfBeerOnTheWall

The Big Features

Arguments and Parameters

Arguments and parameters can be placed anywhere in the name of a function or method call. The careful placement of an argument or a parameter can give it a lot of meaning.

mountains = ['Everest', 'La Tournette', 'Valuga']

for each @(mountain) in (mountains)
    console.log (mountain)

Blocks

Blocks are just indented code:

after (duration, doSomething) =
    setTimeout (doSomething, duration)

(n) seconds =
    n * 1000

after (10 seconds)
    console.log "hi there!"

Self

The self variable, also known as this in JavaScript, is retained from a block's outer context:

jack = {
    name = "Jack"
    
    sayHello () =
        console.log "hi, my name is #(self.name)"
        
        after (10 seconds)
            console.log "hi! this is #(self.name) again."
}

jack.sayHello ()

But if you want and expect self to be redefined to something useful, put => before the block like so:

onEachHttpRequest (action, port: 3000) =
    server = http.createServer @(request, response)
        requestContext = {
            request = request
            response = response
        }
        
        action.call (requestContext)
        
    server.listen (port)

onEachHttpRequest =>
    self.response.end "Hello World\n"

Optional Arguments

Methods and functions can take optional arguments, in the form of a hash passed as the last argument.

webServer (port: 4567) =
    console.log "starting web server on port #(port)"

webServer ()

webServer (port: 3000)

No Built-in Keywords

There are no keywords in PogoScript. All control structures use the same syntax rules as regular functions and methods, so it's very easy to write your own control structures:

unless (condition, block) =
    if (!condition)
        block ()

unless (windSpeed > 25)
    console.log "going surfing"

What about a multi-line control structure?

renderEachIn (list, render) ifNone (none) =
    if (list.length > 0)
        content = ''

        for each @(item) in (items)
            content := content + render (item)

        content
    else
        none ()

mountains = ['Everest', 'La Tournette', 'Valuga']

renderEach @(mountain) in (mountains)
    "<li>#(mountain)</li>"
ifNone
    "<li>no mountains...</li>"

More

joshski has put together a page showing how PogoScript translates into JavaScript. You can examine the cheatsheet, or head to the home page page.

Current Tags

  • 0.10.0                                ...           latest (5 years ago)

67 Versions

  • 0.10.0                                ...           5 years ago
  • 0.9.10                                ...           6 years ago
  • 0.9.9                                ...           6 years ago
  • 0.9.8                                ...           6 years ago
  • 0.9.7                                ...           6 years ago
  • 0.9.6                                ...           6 years ago
  • 0.9.5                                ...           6 years ago
  • 0.9.4                                ...           6 years ago
  • 0.9.3                                ...           6 years ago
  • 0.9.2                                ...           6 years ago
  • 0.9.1                                ...           6 years ago
  • 0.9.0                                ...           6 years ago
  • 0.8.9                                ...           6 years ago
  • 0.8.8                                ...           6 years ago
  • 0.8.7                                ...           6 years ago
  • 0.8.6                                ...           6 years ago
  • 0.8.5                                ...           6 years ago
  • 0.8.4                                ...           6 years ago
  • 0.8.3                                ...           6 years ago
  • 0.8.2                                ...           6 years ago
  • 0.8.1                                ...           6 years ago
  • 0.8.0                                ...           6 years ago
  • 0.8.0-beta7                                ...           6 years ago
  • 0.8.0-beta6                                ...           6 years ago
  • 0.8.0-beta5                                ...           6 years ago
  • 0.8.0-beta4                                ...           6 years ago
  • 0.8.0-beta3                                ...           7 years ago
  • 0.8.0-beta2                                ...           7 years ago
  • 0.8.0-beta1                                ...           7 years ago
  • 0.7.1                                ...           7 years ago
  • 0.7.0                                ...           7 years ago
  • 0.6.11                                ...           7 years ago
  • 0.6.10                                ...           7 years ago
  • 0.6.9                                ...           7 years ago
  • 0.6.8                                ...           7 years ago
  • 0.6.7                                ...           7 years ago
  • 0.6.6                                ...           7 years ago
  • 0.6.5                                ...           7 years ago
  • 0.6.4                                ...           7 years ago
  • 0.6.3                                ...           7 years ago
  • 0.6.2                                ...           7 years ago
  • 0.6.1                                ...           7 years ago
  • 0.6.0                                ...           7 years ago
  • 0.5.1                                ...           7 years ago
  • 0.5.0                                ...           7 years ago
  • 0.4.5                                ...           7 years ago
  • 0.4.4                                ...           7 years ago
  • 0.4.3                                ...           7 years ago
  • 0.4.2                                ...           7 years ago
  • 0.4.1                                ...           7 years ago
  • 0.4.0                                ...           7 years ago
  • 0.3.2                                ...           8 years ago
  • 0.3.1                                ...           8 years ago
  • 0.3.0                                ...           8 years ago
  • 0.2.1                                ...           8 years ago
  • 0.2.0                                ...           8 years ago
  • 0.1.1                                ...           8 years ago
  • 0.1.0                                ...           8 years ago
  • 0.0.9                                ...           8 years ago
  • 0.0.8                                ...           8 years ago
  • 0.0.7                                ...           8 years ago
  • 0.0.6                                ...           8 years ago
  • 0.0.5                                ...           8 years ago
  • 0.0.4                                ...           8 years ago
  • 0.0.3                                ...           8 years ago
  • 0.0.2                                ...           8 years ago
  • 0.0.1                                ...           8 years ago
Maintainers (1)
Downloads
Today 0
This Week 2
This Month 85
Last Day 1
Last Week 76
Last Month 67
Dependencies (3)
Dev Dependencies (8)

Copyright 2014 - 2017 © taobao.org |