Skip to content

听说有人用Python壳子的语言骗经费? 过来挨打?

License

Notifications You must be signed in to change notification settings

LanguageAsGarbage/muridesu-lang

Repository files navigation

补注: 在彻底了解mulan源码后和中科院处理结果后,我认为木兰从动机上有可能并无过错。 他确实实现了一些东西,"套壳"说法不合适。 这些东西在我们编译器相关专业的人眼中菜得一匹,唯三可赞之处,最大的不过一个lambda lifting。 这是我主要持批评态度的原因。 但并非所有批评都是合适,他至少比较直接地解决了一些python低端黑黑python的点。 以非专业水准做到这点实属不易,可以作出一定的肯定。

muridesu

听说最近有人想用Python编译器骗经费?

还用的是PLY?! 这都0202年了我的天.

您好,这儿是一位不愿透露姓名的你红姐制作的一个木兰那样的语言, 学你们木兰, 只有前端, 编译到Python.

居然用了我三个小时零28分钟!加上从QQ里爬出来开机建项目的时间.

语法如下,见excuse_me.muridesu.

func f(x, seq){
    for i in seq
    {
        print(i + x)
    }
}

f(1, [2, 3, 4])

class A {
    func f(self){
        print("A")
    }
}
class S <: A {
    func g(self){
        print("S")
    }
}

S().g()
S().f()

编译到.pyc:

λ> muridesu excuse_me.muridesu excuse_me.pyc                                                                           
λ> python excuse_me.pyc
3
4
5
S
A

我们支持了什么呢?

请看muridesu.exrbnf.

语句:

  • import
  • try, except(这里改成了catch, 因为搞点新东西), finally.
  • assert
  • global
  • nonlocal
  • break
  • continue
  • with, with A as B, ...
  • for ... in
  • class Name <: Base1, Base2
  • meta 你的Type构造器 class Name <: Base1, Base2
  • return, return expr
  • if
  • 函数定义func(让我们学学木兰?)
  • 解构(a, b, [c, d, (f, g, h)]) = ...

表达式:

  • lambda: fn args... -> expr, lambda 返回值可以是一个blockfn (x) -> { ...; return ...}.
  • bool表达式 and, or, not
  • 比较: <, >, ...(Python所有的)
  • 二元运算,包括优先级结合性。打钱就加自定义结合性和优先级
  • 单目运算(-, ~)
  • yield, yield from
  • set, dict没有字面量, 但参考julia, 引入广泛可扩展的构造方式: set [1, 2, 3], dict [1 => 2, 2 => 3].
  • 其他的Python字面量, 除comprehensions

注: Python中的a[b]在muridesu中是a.[b], 因为我的想法是A[b, c, d]表示A_list([b, c, d]), A"string"表示A_str("string").

基本上接近Python的全集了.

所有说编译到Python AST真的是很简单的,不能让他骗经费是对的。

Python牛逼的编译器应该是这里这样的:

About

听说有人用Python壳子的语言骗经费? 过来挨打?

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published