3 分•作者: haveyaseen•大约 1 个月前
在过去的约1.5年里,我一直在开发一门名为Forst的编程语言,其主要目标是取代后端使用的TypeScript。 我曾多次观察到,在后端运行JavaScript常常会导致内存飙升,尤其是在处理大型数据结构时,以及由于堆内存的过度使用和默认限制在单核运行而导致的效率低下。因此,我希望有一种更高效的原生代码来替代它,同时也意识到将整个代码库重写成Go、Rust或其他语言通常风险太高且耗时。 这个想法促成了Forst的设计。目前,Forst与Node.js是互操作的,你可以通过ICP或HTTP sidecar从Node.js调用Forst代码,甚至可以在运行Node.js进程作为Forst宿主进程的子进程时,从Go调用现有的TypeScript代码。这些功能使得你可以逐步迁移代码库的某些部分,而不是必须立即全面切换。 最初,Forst是一个将代码转译成Go代码的工具,支持更接近TypeScript的结构化类型,即允许匿名对象传递给函数,并仅根据所需属性进行匹配。但总体而言,该语言的语法和语义设计都尽可能地贴近Go,一方面是为了避免Go的发展特性干扰设计,另一方面也是为了防止Forst成为一种不被任何人愿意冒险用于生产环境的“外来”语言。 其他特性包括: * 直接导入任何Go代码,以利用其庞大的生态系统。 * 一个`ensure`关键字,鼓励尽早返回。 * 一个一流的`error`关键字,使错误显式化,以及在不同生态系统之间共享的标称结构体。 * 一个一流的依赖注入功能,称为*Providers*,通过`with`和`use`关键字实现。 * 对类型(细化类型)的约束,你可以使用看起来像Go函数的*type guards*来自定义。 你也可以查看文档和路线图以获取更多详细信息。 有一个VSCode扩展,内置了LSP,因此你可以获得语法高亮和悬停时的智能感知功能。 (免责声明:编译器在很大程度上是凭感觉编写的,但我认为目前它已经得到了相当充分的测试。) 请告诉我你的想法,我非常期待你的反馈!我很想听听任何新的想法、你遇到的问题,甚至是那些我尚未考虑到的根本性顾虑。