Coder Social home page Coder Social logo

smooth's Introduction

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°●)​ 」

smooth's People

Contributors

bramblex avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.