Paul Graham:百年编程语言
Lisp(译注:一种表处理语言,用于处理包含有表格的数据的编程语言,被广泛地运用于人工智能研究)黑客(hacker,译注:黑客指掌握尖端电脑技术的人,而不是人们常说的网络入侵者,下同)们已经了解到弹性数据结构的价值,我们倾向于在程序的第一个版本中用列表(list)来处理一切数据。这种最初的版本是如此惊人地低效,因为它有意地避免去想它到底要做什么的细节,就像——至少对我来说——是吃牛排的时候有意避免去想它来自哪里一样。 一百年后程序员将需要什么语言?最可能是那种只需要最少的精力就写出 “非常低效”的“第一版程序”就搞定问题的语言。至少,我们目前可以如此描述这种语言。而用他们的话说,他们需要一种容易编程的语言。 低效的软件不是拙劣的,真正拙劣的是使程序员做不必要的工作的语言。浪费机器时间不是低效,浪费程序员的时间才是真正的低效。这个道理随着计算机越来越快,也将会越来越明白。 我想去掉字符串(string)这种数据结构已经指日可待了。我们在Arc(译注:Lisp的一种方言)中就已经是这么做的,而且成功了。一些用正则表达式描述起来相当拙劣的操作,在Arc中用递归函数就很容易描述了。 像这种扁平的数据结构还能存在多久?我审慎而全面地思考了各种可能性,结果连我都大吃一惊。譬如,我们将会放弃数组吗?毕竟,数组只是一种以整数向量为键值的哈希表(hash table),而我们会连哈希表都用列表来取代吗? 有的预测甚至比这个更骇人听闻。譬如McCarthy在1960就描述过的Lisp语言中连数字(number)都没有。逻辑上讲,你并不一定需要一个关于数字的单独的符号,因为你可以用列表来表示数字,整数n可以用一个n个元素的列表来表示,你可以用这种方式进行数学计算。只不过这样不堪其低效。 现实中没有人被建议用列表来实现数字操作,事实上McCarthy在1960年的论文在那时也根本没有指望被实现。那只是一项理论探讨,只是尝试给图灵机(Turing Machine)创造一种优雅的替代。出人意料的是,有人却根据那篇文章做出了一个可工作的Lisp解释器。不过数字不是用列表来表示,而是跟其他语言里一样,用二进制的方式来表示的。 编程语言会发展到去掉数字这种基本数据类型的程度吗?我这么问不是信口开河地制造耸人听闻的未来问题。情况就如同无坚不摧的矛遇到了无所不克的盾——在这里是无比低效的代码遇到了无比丰富的硬件资源。我认为这完全有可能,因为未来还相当长。如果某种做法可以减少语言的核心公理的数目,那么它随着时光飞逝会越来越值得“下注”。如果某种想法在一百年后依然是荒唐的,在一千年后或许未必荒唐。 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |