Skip是一种通用编程语言,它跟踪副作用,以提供具有反应失效、符合人体工程学和安全并行性的缓存,以及高效的垃圾收集。Skip是静态类型的,使用LLVM提前编译,以生成高度优化的可执行文件。
跳过';它的主要新语言功能是精确跟踪副作用,包括值的易变性,以及区分非确定性数据源和那些可以提供反应性失效(当数据发生变化时告诉Skip)的数据源。当跳过';s类型的系统可以证明在给定的函数边界上没有副作用,开发人员可以选择安全地记忆该计算,运行时可以确保在基础数据更改时先前缓存的值无效。
Skip支持两种互补的并发编程形式,由于Skip#39,这两种形式都避免了常见的线程安全问题;这是副作用的追踪。首先,Skip支持具有async/await语法的符合人体工程学的异步计算。感谢斯基普';在跟踪副作用时,异步计算不能引用可变状态,因此可以安全地并行执行(因此独立的异步继续可以并行执行)。其次,Skip有用于直接并行计算的API,再次使用其对副作用的跟踪来防止线程安全问题,例如共享对可变状态的访问。
Skip使用了一种新的内存管理方法,将典型垃圾收集器的各个方面与更简单的线性(bump)分配方案结合起来。感谢斯基普';垃圾收集器只需扫描从计算的根可以到达的内存。实际上,这意味着开发人员可以用可预测的GC开销编写代码。
Skip的特点是将功能性和面向对象风格的观点进行了固执己见的混合,所有这些都经过精心整合,形成了一种连贯的语言。与函数式语言一样,Skip面向表达式,支持抽象数据类型、模式匹配、简单的lambda、高阶函数,以及(可选)强制执行纯/引用透明的API边界。与命令式/OO语言一样,Skip支持具有继承、可变对象、循环和早期返回的类。Skip还结合了“系统”语言的思想,以支持低开销抽象、通过值类紧凑的对象内存布局,以及通过静态方法分派确保代码专门化的模式。
Skip从一开始就被设计为支持优秀的开发人员体验,其快速的迭代速度通常与动态语言相关。编译器支持增量类型检查(alpha版本的IDE插件在键入时提供几乎即时的错误),提供常见语法错误的提示,帮助新手学习该语言,识别方法/类名的小错误,甚至识别跳过的常见替代方法';s标准库方法的名称,并在Skip中建议正确的名称。Skip还提供了一个代码格式化程序,以确保代码样式的一致性,以及一个运行codemods的工具。
Skip由一个经验丰富的团队设计,其中包括ActionScript、C#、Flow、Hack、HHVM、Prettier、React Native和Relay的高级贡献者。