K语言摘记

来源:百度文库 编辑:神马文学网 时间:2024/04/29 15:27:46
line noise与Huffman编码
Submitted by itfin on Mon, 2006/08/28 - 09:28.
APL语系(APL,A/A+,K,J,Q/K4)的代码一直都被抱怨为line noise,这与Java/MFC/.Net那冗长的api函数名形成了鲜明的对比.其基本原则是将最基本的数据变换模式定义为内置算符,并用尽可能短的ASCII序列来编码,即Huffman编码,这不仅大大缩短了代码长度,我体会更重要的是强迫程序员将自己的算法表达成基本变换的复合,最大程度的利用内置的高效/优化算法,并使得算法表达更清晰更精炼,换言之,是对人思考方式的重塑.Arthur设计K语言的时候,一个目标是全部算符都只用1个ASCII字符表示,所以语言本身非常简炼.另一方面,J语言则内置了丰富的算符(1~2个ASCII字符),并充分利用了符号本身的象形特征(可能与设计者许国华是华人有关).至于说那种编码方式更具备可读性和可维护性,我想因为不同的人有不同的思维方式,也自然会有不同的偏好,但在进行客观比较之前,对语言的内置算符熟练掌握是必不可少的.
»login orregister to post comments
我也开始体会到一点
Submitted by piggy on Wed, 2006/08/30 - 01:06.
我也开始体会到一点那些动词副词之间的内在一致性。Roger Hui就是许国华?我发现一个台湾教授写的学习教程,还不错呢。不过我没在文档里看见任何有关并发性的描述。对数据库的支持也只有ODBC这种比较慢的方式。
另外K语言好像没地方下,KX那个公司现在只做数据库了?
»login orregister to post comments
Roger
Submitted by itfin on Wed, 2006/08/30 - 08:44.
Roger Hui就是许国华,对他的介绍参阅这里.
与K/Kdb相比,J语言确实还缺少一些工业特性,如没有多线程支持(引擎不可重入,参阅jasync项)和分布式调用,以及对其它数据库的支援(J本身就可以看成是数据库).Kx公司的数据库kdb/kdb+本来就是使用k语言实现的.在这里可以下载K/Kdb的demo版本.kdb的执行体只有区区50k(并且是解释执行的),但却可以支撑世界上最大规模的数据仓库,且速度比其它关系型数据库高几个数量级(通过按列存储),堪称一个奇迹.除了Arthur本身是一个天才程序员之外,我想由Ken Iverson开创的这条道路自有其不凡之处.kdb的代码是100% loop free的,另外有传言说源码由a-z共26个文件组成,每个文件都不超过一屏显示!
»login orregister to post comments
谢谢提供资料,牛人
Submitted by piggy on Wed, 2006/08/30 - 20:15.
谢谢提供资料,牛人真是多。J本身是数据库指的是mapped file方式存储向量巴?
»login orregister to post comments
是的,kdb的核心也是mmap
Submitted by itfin on Fri, 2006/09/01 - 09:20.
是的,kdb的核心也是mmap file,并在上面添加了分布式支持.如果你有兴趣,不妨研究一下这个sql引擎(关系代数)的k原型实现.另外不知你看过John Harrop关于光线跟踪算法的ocaml实现与其他语言比较的讨论没有(一,二),作者曾用ocaml为Mathematica编写JIT编译器,应该也是个牛人.这里提供了一些K实现的版本,尤其值得关注的是Arthur本人的程序.如果你有足够的时间和精力,应该好好研究一下,再和大家分享一下心得:).
补充一下,k的参考资料非常稀少而且零散,可能最丰富的就是Arthur本人的程序了,另见refcard,kidioms,参考手册目录.
»login orregister to post comments
Lisp is a Black Hole: if you try to design something that‘s not Lisp, but like Lisp, you‘ll find that the gravitational forces on the design will suck it into the Black Hole, and it will become Lisp.