Closed dou4cc closed 8 years ago
另建议把http://futurescript.org/放在GitHub上让大家Fork。语言标准和编译器实现应当分开,大神(我还不是)愿意给优秀的语言写第三方编译器。
语言的版本号不必受限于npm版本号。
这个我想过,fus其实没有血统。它借鉴CoffeeScript的地方多一点,但不能说它的血统是CoffeeScript。因为我好像还没发现有哪个JS的变种语言同时具有以下4个特性:
这是fus最重要的不同于别的语言之处,所以我想开创一个自己的血统。最多也只能说大的血统是函数式。
可以提任何的建议,不必拘泥于血统,现在我主要考虑:
我希望未来的编程语言能跳出C语言的语法,我们为C语言迁就了太多,C语言的!=
、!
、++
、--
实在是可读性不太好。
而很多函数式语言其实可读性也不好,很多人都抱怨看不懂函数式语言。
我想让Fus成为一个综合实力最优秀的语言。甚至在未来Fus的血统可以改变(虽然我不希望这事发生),版本行的好处正是你可以在未来调整语言,不用担心落伍,也没有兼容问题。(现在网站上只有最新版的教程,但马上会加入所有历史版本的教程。)
或许有必要在教程里写个“比较”,比较它于JS、coffee的区别
建议借鉴:http://elm-lang.org
@zhanzhenzhen 我觉得血统是一种抽象的哲学,高过细微的特性。函数式已经是个血统,应该成为亮点被标明在教程页首。
FuS需要清晰的哲学。FuS的大问题是毫无颠覆性的改变。
不,我必须说,这方面我和以你为代表的大多数人的观点完全不同。
你可以说Fus的所有改变都没有“颠覆性”,但是问题是,你所承认的“颠覆性”很有可能会导致:或可读性下降,或可写性下降。从你发的帖子可以看出你很想让Fus支持柯里化,但首先JS的动态参数本质使之无法实现,其次,也是最关键的是柯里化会极大降低可读性。这是因为:
用空格表示的函数调用连在一起非常不直观。虽然目前Fus支持,但是我不喜欢这种语法:
a b c
任何人,如果他从没接触过传统的函数式语言,即使他数学很好,看到这也会感到一头雾水。空格函数调用唯一显得比较自然的场合是当函数是一个动词时,并且当它是最外层的时候:
console.log a(1)
为什么这个时候用空格好?因为console.log
是执行一个命令,看上去并不像一个数学上的函数。
其实我们这个语言一开始不叫FutureScript,叫做Lemo,意为Less and More than JavaScript,你可以去看看第1个commit(或许是第2个)里面的spec.xhtml文件。直到去年12月底才更名为FutureScript(主要是因为Lemo已经是某公司的商标了)。我觉得,当今所有语言的设计者都往语言中加入了大量不应加入的功能(像循环完全可以通过函数来实现),使得语法失去了统一性,而我们大多数人深陷其中却浑然不觉,而Lemo的使命就好比是把一大堆叠得很高,但歪歪扭扭的书进行“无数个反向扭转”,使之变得整齐。
所以我不认为“无数个毫无颠覆性的改变”是错的,因为它们叠加在一起就可以与别的语言形成很大的差异性。另外我想强调的是,Fus对一门语言应该包括什么、不应该包括什么和当今的主流观点截然不同,但我的赌注是:这是未来的方向。而这,已经可以算作是Fus的一个颠覆性了。
我想了这句话,应该可以回答你的关于哲学的问题,也会写到教程页中:
Fus的哲学是:比我们易懂的语言都没我们简洁,比我们简洁的语言都没我们易懂。Fus调制出简洁和易懂的最佳平衡点,并保持惊人的美丽与统一。
@zhanzhenzhen 支持柯里化的意义在于它不借助数据类型就实现了序列,如同变量不借助数据类型就实现了键值对。
基于定位,大家才能针对性地提议。