Skip是Facebook开发的一门实验性质的编程语言。
作为一个研究项目,Skip的主要目标是探索支持准确、高效、基于memoization的缓存和缓存失效的语言和运行时。Skip通过静态类型系统实现了这一点,该系统具备跟踪可变性,同时支持现代语言特性,如trait、泛型和子类型。
Skip 从2015年到2018年开发了三年,如今Facebook已不再积极开发,而是选择开源,以使编程语言研究社区能够继续在语言设计与实现、编译器和库的基础上进行研究和构建。
Skip是一种通用编程语言,可跟踪副作用,提供反应无效的缓存、符合人体工程学和安全的并行性,以及高效的垃圾收集。Skip是静态类型的,并使用LLVM提前编译,以生成高度优化的可执行文件。
反应无效的缓存
Skip的主要新语言特性是精确跟踪副作用,包括值的可变性以及区分非确定性数据源和能够提供反应无效的数据源(在数据发生变化时告诉Skip)。当Skip的类型系统能够证明在给定的函数边界没有副作用时,开发者可以选择安全地记忆该计算,在运行时确保当底层数据变化时先前缓存的值无效。
安全并行化
Skip支持两种互补形式的并发编程,由于Skip跟踪副作用,这两种形式都避免了常见的线程安全问题。首先,Skip支持使用async/await语法进行符合人体工程学的异步计算。由于Skip跟踪副作用,异步计算不能引用可变状态,因此可以安全地并行执行(因此独立的异步计算可以并行继续)。其次,Skip具有用于直接并行计算的API,再次利用其副作用跟踪来防止线程安全问题,如共享对可变状态的访问。
高效且可预测的垃圾回收器
Skip使用一种新颖的内存管理方法,将典型垃圾收集器的各个方面与更简单的线性(缓冲)分配方案相结合。由于Skip跟踪副作用,垃圾回收器只需扫描从底层计算处可访问的内存。实际上,这意味着开发者可以编写具有可预测GC开销的代码。
面向函数和面向对象的混合语言
Skip以混合面向函数和对象为特色,通过精心整合形成一种紧密结合的语言。与函数式语言一样,Skip是面向表达式的,支持抽象数据类型、模式匹配、简单lambdas、高阶函数,以及(可选)强制执行纯/引用透明的APIboundaries。与命令式/OO语言类似,Skip支持具备继承的类、可变对象、循环和earlyreturn。Skip还整合了来自“systems”语言的理念,以支持低开销抽象,通过值类的紧凑对象储存布局,以及确保使用静态方法调度实现代码专业化的模式。
优秀的开发体验
Skip从设计之初就专注提高开发体验,具有更快速的迭代速度。编译器支持增量类型检查,提供常见语法错误的提示,帮助新手学习语言、识别方法/类名的错误,甚至识别Skip的标准库方法名称的常见别名,并在Skip中给出正确名称的建议。Skip还具有代码格式化工具,以确保一致的代码风格,以及运行代码模块的工具。
评论