我在前面的文章中列举了大量物理学相关的例子来试图说明采用物理视角的必要性,但是可能因为物理事实大家不熟悉,结果直接被无视了. 在本文中我想有必要举一个软件领域的例子。只是在实际思考的过程中,我主要还是基于物理概念进行推理.
首先我所谓“现在的通用语言”,它并不意指“现在至未来所有通用语言之合集”,而是指“目前正在被使用的某一种通用语言”,这种差别便体现了我所强调的不同的价值观和不同的视角。不是一种覆盖一切的全称判断,而是在特定物理约束下的物理实体。
现在无论我们设计什么大型系统,一般总是要优先考虑微内核设计。但是很显然,如果我们的编程控制能力极强(强大到不现实的地步),我们可以把所有的代码实现为一个大的整体。一个整体的好处是勿用质疑的,否则Linux Torvalds就不会有信心和Tanenbaum PK。但即使是Linux, 随着系统越来越庞大,在内核中也补充了很多模块管理策略。我并不把这种情况看作是一种现在技术能力不到位所造成的结果,而是把它看作是在现实的物理约束下所促成的一种必然的选择。
按照类似的逻辑,我认为在通用语言层面不应该导入越来越多的特征,实际上也不可能把所有可能的结构方式都内置在语言中(这种不可能不是数学意义上的不可能)。这会破坏一种语言的纯洁性,使得它极难维护和发展。为了扩大通用语言的有效应用范围,一种显然的方式是在语言中定义一些支持结构再次抽象的机制,通过可插拔的方式实现与domain相关的知识的融合。ruby这样的语言提供了大量的元编程机制, Witrix平台中tpl模板语言也发展了一系列编译期结构构造技术, 但是显然它们都不能说是结构抽象技术的终极形态. 目前我对所有通用语言所提供的结构抽象和结构组装能力都是不满意的,因此在Witrix中发展了一些领域特定的结构融合手段.例如根据"继承"关系的结构诠释(继承可以看作是两个一维集合之间的覆盖关系), 我们扩展了extends的结构操作方式, 定义了广义的extends算子. 这些特定的结构关系目前在领域特定的BizFlow语言中体现, 它们在通用语言中是难以想象的, 而把它们放置在通用的语言中也是不合适的(这种复杂的结构融合操作如果不能结合领域知识进行直观的理解, 必将导向一种思维的混乱). 这就是我所谓"现在的通用语言无法有效承载Domain Specific Structure"的含义. 这种说法其实类似于"集合论是无法包容所有数学结构的". 我们在集合论中只研究最普遍的关系,而特定的结构在特定的学科中研究.
关于ErLang的例子, 我的原意是用来说明结构问题是独立的,它是和具体语言无关的.即基于消息传递发生数据关联的超轻量级进程模型这一结构不是和ErLang语言绑定的. 为此我特意加了一段说明:"这里不是要证明某种语言中无法描述这些结构,而是说结构是客观存在的,它并不是要在基础语言层面得到充分解决的". 即使在语言层面我们并不解决这个结构问题, 它仍然客观存在着,我们仍然可以用其他的技术手段去定义,去解决. 解决了这个结构问题就必然会带给我们价值,而无论我们使用何种实现语言.
"什么原因,什么样的约束条件,导致了现在的通用语言是无法有效承载消息传递发生数据关联的超轻量级进程模型". 这一命题并不是我原文中论点的合理推论.我并不是要说某一种特定的领域结构无法在一种特定的通用语言中得到支持.而是说如果我们认为一种通用语言是比较稳定的,则它一般选择只内置一些通用的不带有领域特定含义的概念. 而缺乏领域知识,或者说因为通用语言故意的摒弃领域依赖, 它在处理领域相关的问题的时候并不是有效的.这种有效性不是数学含义上的,而是可以进行物理度量的. 现在也有很多人认为ErLang并不是真正的通用语言,它是针对通信领域进行了特定结构调整的, 是内置了领域特定结构的. 而目前在ErLang上建立GUI的努力也并不算是成功.
在前文中我举了一个例子试图说明:"在限定的物理约束下,我们的选择范围会大大缩小". "比如说我现在有无穷多种方式从北京跑到上海,但是如果限定只允许用1升汽油,那么我们的选择就近乎于0". 这里并不是要说明加上物理约束之后,我们便没有任何选择了.而是说物理约束对无穷多的可能方式起了限定选择的作用, 它最终造成我们在具体的物理场景下可能只有非常有限的选择. 例如现在允许用100升汽油, 有多少种运输方式可以满足我们的要求? 如果允许1000升呢? 但是如果不考虑所有物理约束, 我们是否能够证明说: 飞机和拖拉机的运输能力是完全一致的, 因为它们都能从北京开到上海.
我的观点是结构问题是独立存在的,它具有自身的价值, 研究它也需要建立特定的价值观. 一个结构可以体现为语言上的某种语法特征, 也可以通过框架等实现, 或者表现为某种设计模式,某种编程技巧. 我们在思考结构问题的时候并不是从特定语言的机制出发的, 当语言不直接支持的时候我们可以发展特定的实现技术支持它. 在未来的日子里某个结构可能被证明具有普适的价值,它会被吸收到某个通用语言中成为所有程序的支撑结构, 但是更多的结构永远都不会进入通用语言, 而是居留在某个特定的领域. 通用语言的发展并不是完全基于抽象的数学分析而进行的, 它可以从更加丰富的物理世界中吸取营养. 当一种结构进入通用语言的时候, 它所带来的绝对不只是一组数量关系,而是同时带来一系列经过实践检验的物理诠释.
我所谓的领域并不是指业务领域, 而是结构领域, 一个可以定义特定结构的物理场景. 一个特定的结构仍然可以支撑着任意多的具体应用. 例如CRUD操作可以作为数据管理模型. BizFlow作为界面和单实体的交互模型.
函数式语言为我们提供了一种具体的技术工具, 但是在现实的开发中, 为了有效的处理结构问题, 显然我们需要多种视角的组合, 而不是把所有可想见的图景都纯化为函数. 我们对世界的体验是多样化的. 这就是我所谓"世界比函数的集合要复杂"的含义.
分享到:
相关推荐
关于深度学习的误解与澄清.pdf
水力澄清池计算
CCF关于NOI若干问题的澄清公告
最近,我们提出了“量子语言”(或“量子力学的哥本哈根语言解释”),它不仅被描述为量子力学的形而上学和语言学转向,而且被描述为笛卡尔=康德认识论的语言学转向。 我们认为,量子语言不仅是二元理想主义的科学...
某集团战略澄清报告.pptx
本文首先通过参考其他语言学家的解释来澄清语用能力的定义。 然后讨论了提高语言学习者的语用能力在交流中的重要性,并试图探讨在外语教学过程中进行语用能力教学的必要性和可行性。 最后,本文提出了一些尝试性的...
澄清Java(接口与继承)
岗位职责澄清与组织结构分析.pptx
CMIL-澄清的多语言中间语言 CMIL的目标是创建一种通用的编程语言,该语言将为所有国籍和所有年龄的人们设计,从而可以轻松地学习基本的编程知识,以便以后转换为专业编程语言。 Arman Yeghiazaryan是CMIL标准的作者...
稀磷酸澄清槽泥浆泵改用单螺杆泵的实践.rar
java六大必须澄清的概念 经常会遇到的面试题目 来自网络少许有误
GPT-4发布后,微软人工智能研究人员发表了一篇论文,称OpenAI语言模型展示了通用人工智能(AGI)的“火花”。 GPT-4是OpenAI最新的大型语言模型(LLM),在对其公开发布进行微调之前,研究人员可以访问其不受限制的...
高密度澄清池新技术手册.pdf
高效澄清池生产性运行效果,安东,,本文详细介绍了高效澄清池工艺处理上海市黄浦江水源水的效果。开展为期1年的生产性试验,从工艺除污染特性、运行参数优化以及对�
关于互联网金融必须澄清的几个理论问题_陆岷峰.zip
介绍了联碱AII澄清桶浮泥过多,造成填料坍塌的多种原因及处理。
澄清几个基本概念-迅为精英版聊天记录 【泰斗】TOPEET迅为(1147135986) 21:36:19 公布答案:Linux是在运行的最后才挂载文件系统!
济宁二号煤矿选煤厂目前采用原煤不脱泥、洗煤无压三产品重介旋流器分选、粗煤泥通过沉降离心脱水后直接回收、细煤泥浓缩...澄清的煤泥水作为重介系统物料脱除介质的用水,因此浓缩机煤泥水浓缩、澄清是其中得关键环节。
采用果胶酶和壳聚糖处理红葡萄原酒, 使其与酒中的单宁、 蛋白质、 金属复合物、 色素以及果胶质等发生絮凝作用而将这些物质除去, 从而提高葡萄酒的澄清度和稳定性。研究表明, 壳聚糖法是较果胶酶法更理想的澄清方法,...
介绍了脉冲旋流澄清+过滤的水处理工艺流程及特点,该工艺应用于什林煤业矿井水处理的实践表明,处理效果好、运行费用低,经济、环境及社会效益明显。