Git Product home page Git Product logo

pangaea's Introduction

Pangaea programming language

MIT License Go Report Card codecov playground Pangaea Travel Guide specification GitHub all releases

How to run

Download Binary

See Releases.

Or Build Manually

$ git clone https://github.com/Syuparn/Pangaea.git
$ cd ./Pangaea
$ go generate
$ go build

Or Use Pangaea Playground

Visit https://syuparn.github.io/Pangaea/ !

Also, you can learn Pangaea syntax by an online tutorial Pangaea Travel Guide.

Run

# Run REPL
# (Linux, Mac)
$ ./pangaea
# (Windows)
$ ./pangaea.exe

# Run script file
# (Linux, Mac)
$ ./pangaea ./example/hello.pangaea
# (Windows)
$ ./pangaea.exe ./example/hello.pangaea

# Enjoy!

What can I do?

Examples and unit tests will help you. Also, you can find properties of embedded objects by .keys method.

# properties of Obj starting with "a"
>>> Obj.keys.grep("^a")
["acc", "all?", "ancestors", "any?", "append", "asFor?"]
# with private properties
>>> Obj.keys(private?: true)
["A", "B", "S", "acc", "all?", ...]

# check which property is called
>>> 1.which('+)
Int
>>> 1.which('p)
Obj

Requirements

Host language

  • Golang (1.17+)

Dependent Packages

Introduction (Let's run your REPL!)

One-way!

This language is tuned for a one-liner method chain! You don't have to go back to beginning of line!

"Hello, world!".puts # Hello, world!
(1:5).A.sum.puts # 10

Looks similar to other language though? But Chains in Pangaea has more power...

Chain context

Dot chain is "one of" the method chains in Pangaea. There are some kinds of chain styles, and each one shows different "context". (The concept is from Perl :) )

There are 3 kinds of chain context(., @, $).

Scalar Chain

The receiver is left-side value, which is ordinary method chain.

10.puts # 10

List Chain

The receiver is each element of left-side value. This can be used as "map" or "filter" in other languages.

[1, 2, 3]@{|i| i * 2}.puts # [2, 4, 6]
["foo", "var", "hoge"]@capital.puts # ["Foo", "Var", "Hoge"]
# select only evens because nils are ignored
(1:10)@{|i| i if i.even?}.puts # [2, 4, 6, 8]

Reduce Chain

The receiver is each element of left-side value. Also, returned value of previous call is passed to 2nd argument. (In short, it's reduce!)

# reduce chain can hold initial value.
[1, 2, 3]$(0){|acc, i| acc+i} # 6
# same as above
[1, 2, 3]$(0)+ # 6

Additional context

Additional context can be prepended by main chain context. There are 3 kinds of additional chain context(&, =, ~). Thus, there are 9 kinds (3 additional * 3 main) of context.

Lonely Chain

This chain ignores call and return nil if its receiver is nil (what a "lonely" object!), which works same as "lonely operator" in Ruby.

# nil.capital.puts # NoPropErr: property `capital` is not defined.
nil&.capital.puts # nil

[1, 2, nil, 4]&@F.puts # [1.000000, 2.000000, 4.000000]

Thoughtful Chain

This chain returns receiver instead if returned value is nil (it "thoughtfully" repairs failed call).

(1:16)~@{|i| ['fizz][i%3] + ['buzz][i%5]}.puts # [1, 2, "fizz", 4, "buzz", ..., "fizzbuzz"]

(3:20)~$([2]){|acc, n| [*acc, n] if acc.all? {|p| n % p}}.puts # [2, 3, 5, ..., 19]

# (Of course you can use built-in prime function)
20.select {.prime?}.puts # [2, 3, 5, ..., 19]

Strict Chain

This chain keeps returned nil value ("strictly" returns the calclation result). This is useful only in list context, which removes returned nil.

(1:10)@{|i| i if i.even?}.puts # [2, 4, 6, 8]
(1:10)=@{|i| i if i.even?}.puts # [nil, 2, nil, 4, nil, 6, nil, 8, nil]

Language Features

  • Readable one-liner
  • Interpreted
  • Dynamically typed
  • Prototype-based object oriented
  • Everything is object
  • Immutable objects
  • First-class functions with lexical scopes
  • Method chains with context (see above for details)
  • Metaprogramming with magic methods (e.g: _missing, asFor?)

See Language Reference for more information.

For Developers

Directories

name description
.chglog template of release note
.github GitHub actions
ast definition of AST
di inject native properties into built-in objects
docs language spec reference
evaluator evaluator with built-in prop tests
example pangaea example snippets
native native properties written in Pangaea
object definition of Pangaea object system
parser parser generated from goyacc grammer
props built-in properties written in Go
runscript handle interpreter and REPL
tests native property tests written in Pangaea
third_party patched dependant Go modules
web Pangaea Playground

Release

Release note and binary is generated automatically by Goreleaser. You only need to push a new tag to origin. Tag name is set to the binary version (shown by -v).

Contribution

Any contribution is welcome!

pangaea's People

Contributors

dependabot[bot] avatar syuparn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

isgasho

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.