A programming language to skip the things you have already computed
Switch branches/tags
Nothing to show
Clone or download
pikatchu First version of the server that can produce llvm bitcode. (#56)
Incremental mode was stopping after type-checking, this version can
now also produce llvm bitcode (by using the command "build").

The protocol is very likely to change, this is just to hook things up.
Latest commit a295365 Oct 15, 2018
Permalink
Failed to load latest commit information.
.circleci s/aorenste/verlaguet Sep 26, 2018
CMake Initial commit Sep 22, 2018
apps README for apps/bundler, link from tutorial Sep 24, 2018
docs typo (#52) Oct 3, 2018
experimental Initial commit Sep 22, 2018
ide Enhance vim syntax highlighting. (#36) Sep 29, 2018
lkg Initial commit Sep 22, 2018
node_modules Initial commit Sep 22, 2018
src First version of the server that can produce llvm bitcode. (#56) Oct 15, 2018
tests Speedup of the string literal lexer (#54) Oct 4, 2018
third-party Initial commit Sep 22, 2018
tools Initial commit Sep 22, 2018
website Fixed compression middleware no gzipping client contents and added de… Oct 6, 2018
.clang-format Initial commit Sep 22, 2018
.gitattributes Initial commit Sep 22, 2018
.gitignore Initial commit Sep 22, 2018
.gitmodules Fix duplicate submodules in .gitmodules. (#41) Oct 1, 2018
.watchmanconfig Initial commit Sep 22, 2018
CMakeLists.txt Initial commit Sep 22, 2018
CODE_OF_CONDUCT.md homepage formatting and other docs Sep 25, 2018
CONTRIBUTING.md homepage formatting and other docs Sep 25, 2018
LICENSE Initial commit Sep 22, 2018
PreLoad.cmake Initial commit Sep 22, 2018
README.md change header level Sep 27, 2018
bench Initial commit Sep 22, 2018
profile Initial commit Sep 22, 2018
run.sh Initial commit Sep 22, 2018
skip_client.sh Initial commit Sep 22, 2018
skip_server.sh Initial commit Sep 22, 2018
skip_version Initial commit Sep 22, 2018
test.sh Initial commit Sep 22, 2018

README.md

CircleCI

Project Status

Skip is an experimental programming language developed at Facebook from 2015-2018.

Skip's primary goal as a research project was to explore language and runtime support for correct, efficient memoization-based caching and cache invalidation. Skip achieved this via a static type system that carefully tracks mutability, while also supporting modern language features such as traits, generics and subtyping.

The Skip project concluded in 2018 and Skip is no longer under active development at Facebook.

Facebook is making the implementation available under a permissive open source license to enable the programming language research community to study and build on the design and implementation of the language, compiler and libraries. The language, compiler and libraries are maintained as a side project by Julien Verlaguet, the main designer of the language.

Skip Overview

Skip is a general-purpose programming language that tracks side effects to provide caching with reactive invalidation, ergonomic and safe parallelism, and efficient garbage collection. Skip is statically typed and ahead-of-time compiled using LLVM to produce highly optimized executables.

Caching with Reactive Invalidation

Skip's main new language feature is its precise tracking of side effects, including both mutability of values as well as distinguishing between non-deterministic data sources and those that can provide reactive invalidations (telling Skip when data has changed). When Skip's type system can prove the absence of side effects at a given function boundary developers can opt-in to safely memoizing that computation, with the runtime ensuring that previously cached values are invalidated when underlying data changes.

Safe Parallelism

Skip supports two complementary forms of concurrent programming, both of which avoid the usual thread safety issues thanks to Skip's tracking of side effects. First, Skip supports ergonomic asynchronous computation with async/await syntax. Thanks to Skip's tracking of side effects, asynchronous computations cannot refer to mutable state and are therefore safe to execute in parallel (this means that independent async continuations can continue in parallel). Second, Skip has APIs for direct parallel computation, again using its tracking of side effects to prevent thread safety issues such as shared access to mutable state.

Efficient and Predictable GC

Skip uses a novel approach to memory management that combines aspects of typical garbage collectors with more straightforward linear (bump) allocation schemes. Thanks to Skip's tracking of side effects the garbage collector only has to scan memory reachable from the root of a computation. In practical terms, this means that developers can write code with predictable GC overhead.

Hybrid Functional/Object-Oriented Language

Skip features an opinionated mix of ideas from functional and object-oriented styles, all carefully integrated to form a cohesive language. Like functional languages, Skip is expression-oriented and supports abstract data types, pattern matching, easy lambdas, higher-order functions, and (optionally) enforcing pure/referentially-transparent API boundaries. Like imperative/OO languages, Skip supports classes with inheritance, mutable objects, loops, and early returns. Skip also incorporates ideas from “systems” languages to support low-overhead abstractions, compact memory layout of objects via value classes, and patterns that ensure code specialization with static method dispatch.

Great Developer Experience

Skip was designed from the start to support a great developer experience, with a rapid iteration speed more commonly associated with dynamic languages. The compiler supports incremental type-checking (with alpha versions of IDE plugins providing near-instantaneous errors as you type), provides hints for common syntax mistakes and to help newcomers learn the language, recognizes small typos of method/class names, and even recognizes common alternatives to Skip's standard library method names and suggests the correct name in Skip. Skip also features a code-formatter to ensure consistent code style and a tool for running codemods.

Built by a Team of Veterans

Skip was designed by an experienced team including senior contributors to ActionScript, C#, Flow, Hack, HHVM, Prettier, React Native, and Relay.

Documentation is in the docs/ directory.

Instructions for building with cmake

Website

http://www.skiplang.com

Playground

http://www.skiplang.com/playground

License

Skip is MIT licensed.