• Stars
    star
    169
  • Rank 224,453 (Top 5 %)
  • Language
    JavaScript
  • Created about 9 years ago
  • Updated about 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A simple functional language target to JavaScript

Smooth

Smooth 新版本计划

  1. 去掉蛋疼的大括号和分号,改用缩进来写代码。
  2. 加入简易的系统和类型推导, 不过当然还是允许弱类型存在的,同时也可以模式匹配。
  3. 加上惰性并且在自己的运行时内实现,同时尽量保证运行时小而简。
  4. 设计全新和 JavaScript 的 FFI 接口,保证同时满足简易并且便于书写。
  5. 简易的模块系统和构建工具,保证能够动态编译打包。

一、新版编译器前端

  1. 用第一层解析器去掉蛋疼的大括号和分号 大致准备用一个预编译器来处理大括号和分号问题,以及最为麻烦的换行和代码块的问题。

一般来说,let in / where 等后面跟的是代码块而不是表达式,虽然在语义上代码块和表达式也没有多少区别,但是还是要做以区分。

  1. 第二层解析器处理语法糖等,生成语法树。

二、新版编译器后端

  1. 类型系统

类型有几种基本类型 [a] === Array a , (a, b, c ...) === (a, (b, c)...) 类型, Number, String, {T1, T2 | t}, True | False, Null, (T1 | T2 | T3), *

类型声明 type T = T1 String | T2 String | T3 String

README.md 已过期

简介

可以在此处试用 Git Page 传送门

Smooth 是一门 Haskell Like 语法并且编译到 JavaScript 的函数式语言。但和 Haskell 不同的是,Smooth 没有强类型系统,也不要求纯函数。Smooth 可以非常轻易地混合使用命令式语言和函数式语言的特性,所以 Smooth 将会是一门非常实用且非常方便的语言。

Smooth 借鉴了 Haskel 中的 do 语法,但是剔除了其中深奥复杂的抽象,使得开发更为轻松简单,尤其是处理 JavaScript 异步的过程。

以下是一个简单的例子,将每隔一秒种依次输出 helloworldsmooth。最后当全部输出完了以后会输出 done

Zepto = `Zepto`;

print line = console.html (text + line + '\n')
    where {
        console = (Zepto '#console-content');
        text = console.html <& [];
    };

delay ms f = `setTimeout` <& [f, ms];

mkAsync f g = g $ f _;

get url f = Zepto.get <& [url, f];
async f g = f g;

asyncJob = @async {
  @async {
    delay 1000;
    mkAsync \_ -> print 'Welcome';
    delay 1000;
    mkAsync \_ -> print 'to';
    delay 1000;
    mkAsync \_ -> print 'Smooth';
    delay 1000;
    mkAsync \_ -> print 'World';
  };
  example_code <- get 'javascripts/example.sm';
  mkAsync \_ -> print example_code;
  delay 1000;
  mkAsync \_ -> print 'done';
};

main = asyncJob \_ -> print 'done';

Smooth 中的 do...with 不限于解决 JavaScript 中的异步问题,其本质就是一个简单的 CPS 变幻。在 Haskell 中,do 语法糖主要作用是用来 bind monad。

语法

明天继续完善 (●°u°●)​ 」

More Repositories

1

jsjs

简易的 JavaScript 元循环解释器
JavaScript
1,350
star
2

niva

一个基于 Tauri WRY 跨端 Webview 库的超轻量极易用的跨端应用开发框架。
Rust
630
star
3

react-hooks

React Hooks API 在 16.6 上面的模拟实现
TypeScript
96
star
4

jsjs-vm-demo

TypeScript
86
star
5

BlxVimrc

My vimrc
Vim Script
73
star
6

napa-loader

基于napajs的NodeJS多线程解决方案
JavaScript
34
star
7

jsjs-homework

《前端也要会的编译原理之用 JavaScript 写一个 JavaScript 解释器》作业
JavaScript
33
star
8

jsjs-answer

《前端也要会的编译原理之用 JavaScript 写一个 JavaScript 解释器》大作业参考答案
JavaScript
30
star
9

BlxClass

JavaScript 的面对对象库
JavaScript
29
star
10

loveaira.me

My website.
HTML
28
star
11

tail-call

尾递归优化示例
HTML
15
star
12

nwjs-vue

一套 nwjs 和 vue 的集成开发以及构建模版
JavaScript
14
star
13

blx-fsm

A simple and useful fsm
JavaScript
12
star
14

modern-lang

现代 Web 编程语言体系
Yacc
10
star
15

simple

JavaScript code for Understanding Computation
JavaScript
8
star
16

ssledge

Nothing /w\
Shell
7
star
17

io-request

A simple library to make request between server and client by socket.io
JavaScript
7
star
18

cancelable-async

可中断的 async 函数实现
TypeScript
4
star
19

BlxJSTK

My JavaScript Tool Kits
JavaScript
3
star
20

hooks

TypeScript
2
star
21

LoadScript

JavaScript
2
star
22

WebSocketIO

A soket.io style WebScoket for cpp
C
2
star
23

blx-carousel

JavaScript
2
star
24

easy-vue-framework

JavaScript
1
star
25

UMDT

JavaScript
1
star
26

MonkeyBox

JavaScript
1
star
27

blxcpp

c++11 toolkit
C++
1
star
28

yanyipk

颜艺 pk 的小项目
JavaScript
1
star
29

BlxTools

自己使用的一些工具
JavaScript
1
star
30

render-demo

写文章用的示例代码
JavaScript
1
star
31

conque

Automatically exported from code.google.com/p/conque
Python
1
star
32

BlxConfig

我的一部分配置文件
Shell
1
star
33

bubblegum

Shell
1
star
34

Snake

Haskell
1
star