海归网首页
海归宣言
导航
博客
广告位价格
会员列表
收 藏 夹
论坛帮助
登录
|
登录并检查站内短信
|
个人设置
论坛首页
|
排行榜
|
在线私聊
|
专题
|
版规
|
搜索
|
RSS
|
注册
|
活动日历
主题:
[原创忽悠]一门可用于编程的人工语言
海归论坛首页
->
海归商务
焦点讨论
|
精华区
|
嘉宾沙龙
|
白领丽人沙龙
分屏
表形显示
阅读上一个主题
::
阅读下一个主题
作者
[原创忽悠]一门可用于编程的人工语言
uda1341
头衔: 海归中尉
声望: 讲师
加入时间: 2009/09/01
文章: 110
海归分: 4371
标题:
[原创忽悠]一门可用于编程的人工语言
(2305 reads)
时间:
2010-10-16 周六, 21:49
作者:
uda1341
在
海归商务
发贴, 来自【海归网】 http://www.haiguinet.com
理论来源:
这是一门人工语言,设计基础来自于一阶逻辑,通过自指操作,对状态迁移的建模,形成高阶逻辑以及模态逻辑,并成功的对应到日常语言中的常用概念。
与现代语言往往来自于面向对象理论,有类型和无类型的lambda演算,或组合子的理论不同,我试图将人工语言的基础直接建立在一阶逻辑构成的系统之上。
(prolog另谈,它的问题是处理逻辑很好,但处理状态迁移很糟)
程序设计语言的最高目标:
对于一种程序设计语言,最关键的问题在于,在写作一个软件的时候,会在头脑中构思出一些概念,比如软件的架构,模块之间的关系,某些处理过程。在这些概念变成实际运行的软件之后,显而易见的是,有一些模式保存下来了,但很多模式丢失了。
举例而言,在现有的任何程序设计语言中,绝对没有时间的概念,如果要表达:
X的上一个值是1。
你就得手工编写代码,去保存X的上一个值,并把这个值另取一个名字,比如叫lastX,由此展开的代码写作就变得琐碎而易错,因为在你头脑中的概念是“上一个值”,而编写出的代码却是零散的,这个概念已经消失了。这种概念上的不兼容,才是导致程序难于理解和维护的根本原因。
当然,随着程序设计语言的不断进化,尤其是这些年函数式语言的兴起,为我们表达高级一些的概念提供了很大的方便,但在我看来,这仅仅是一个开始。
基本架构:
这个模型的基本架构就是,为了避免过份专业化的表达,我不妨借用维特根斯坦式的说法,来描述这个基本架构,为了更有哲学味道,我把程序代码运行中发生的事情称为世界。
1 世界的每个时刻都对应一组事实。
2 这一组事实构成一个事实空间。
3 事实空间在不断发生变化。
4 事实空间的变化模式被称为世界中的事件。
5 当事件发生时,会导致事实空间的变化,这被称为一个动作。
在这个基本架构的前提下,逐渐的构建起这个世界中的基本概念,例如什么是状态,什么是继承,什么是事件,什么是容器,在构建这个概念体系的过程中,逐渐的发现了这门人工语言所具备的潜力,并逐步展示出与现有语言巨大的差异。以下就是一些实际的专题性的例子来说明这些差距,我的笔记也主要围绕这些概念而展开,需要提醒的是,由于眼界有限,不能精通各种语言,有时候难免武断的说某个特性是现在没
有的,但实际上却不是如此。
1 状态迁移和时间
既然前面已经提到“X的上一个值”这个概念,这里就提前做一个说明。
在这样的系统里,每个时刻,X的值是多少,是一个原子事实,而这个原子事实会在有动作发生的时候,产生变化。做为基础设施,对过去的记忆是默认的,不需要任何前提,就可以查询过去的事实。
莫非要把程序运行的所有轨迹都记录下来么?当然不是,如果代码中根本就没有对过去状态的查询,那么又何必去记录?如果有对上个时刻的查询,那么记录的深度就只会有一次。
关于状态迁移和时间,还会有更多的展开功能。
2 数据的柔性化
如今要使用数据,你得先想好数据采用什么方式存储,是数组,链表,散列表,key-value数据库或者关系数据库。我们为什么不能只着眼于这两件事情:
如何存入数据?(存入数据的语法)
如何访问数据?(访问数据的语法 )
一旦能做到这一点,程序员就再也不用关心数据存储的细节,只关注对数据的使用即可,比如,数组和链表完全是一回事,使用下标访问,也并不表示你把数据当做了数组,因为编译器可以把下标加1的操作翻译为next操作。使用next操作也并不表示你把数据就当成了链表,因为编译器可以把next操作翻译为下标加1。
至于复杂的数据访问,如果你使用了SQL那样的语法,编译的结果,将是会产生一个特定的关系数据库,这个关系数据库是为这个应用特别优化的版本。
3 解释和编译无法区分,设计时,解释/编译时,运行时融为一体,密不可分。
可以在设计时运行,一边设计一边运行,在运行的时候可以补充设计,任何时候都可以采用just in time(JIT),一边运行一边把一些代码编译为更有效率的本地代码,还未编译到的部分采用解释方式。
在软件交付之后,用户还可以使用有限的方式继续编写代码,这个过程永无止尽。
4 面向对象
这里还叫做面向对象完全是一个惯性,实际上这个系统所提供的功能已经远远超出了面向对象所要解决的问题。
这个思想是什么呢?很简单,是我们天天在用的,对世界的描述手段,是人类描述世界时所具备的简化和压缩方式,将相似的描述归类,用差异去描述它们。在这样的思路下,继承就不仅仅是对象的事情,我称为:
在代码中出现的一切符号,都是可以被继承的。这包括了变量,操作符,表达式,算法,函数,语法结构,传统的对象,数据结构,甚至包括程序本身。
特别提一下,程序本身的继承,实际上就是版本的管理了,这里用统一的机制去处理,也会带来特别的好处。
5 软件的回滚
用这种人工语言写出来的软件无需专门编程都可以做任意的回滚,如果必要的话,只有有存储空间,它可以把软件的一切变化都记录下来。如果这样,用户就可以像操作时间机器一样,回到之前的某个时刻,还可以把某个时刻使用软件的过程像放电影那样放出来。
当然,也可以有条件的回滚。这里的回滚操作,依赖于系统关于时间的处理,也可以归结到更基础的软件事务。
6 代码中的事务
这一点可参考已有的STM(软件事务内存)
我要补充说明的是,代码中采用事务机制的基本原因是,保持事实空间的逻辑完整性。当代码在底层某个位置失败,那对于上层而言,就处于了一个“逻辑不完整”的灵异状态,在这种状态下写处理代码会生不如死。显然,这也依赖于前面说过的状态迁移和记忆机制。
今天就写这么多了,改天再说吧,如果把有效的近十万字都弄上来显然也不合理,上面的部分已经精简到几乎是摘要了。
剩下的内容还包括:
时间线编程,对API的查询,如何一边运行一边编写代码,使用模式匹配进行名称引用,在过程式代码中使用逻辑查询(有点像linq),历史调试和智能断点等等等等。
如果觉得现在的程序设计语言已经足够高级的请往下看:
最后给出一个题目,是我认为的编程语言的试金石,如果能够用代码几乎原封不动的表达出题目的意思,并且得到答案,那么,这门编程语言的抽象能力就几乎完全过关了,这个题目是:
有 100 个囚犯分别关在 100 间牢房里。牢房外有一个空荡荡的房间,房间里有一个由开关控制的灯泡。初始时,灯是关着的。看守每次随便选择一名囚犯进入房间,但保证每个囚犯都会被选中无穷多次。如果在某一时刻,有囚犯成功断定出所有人都进过这个房间了,所有囚犯都能释放。游戏开始前,所有囚犯可以聚在一起商量对策,但在此之后它们唯一可用来交流的工具就只有那个灯泡。他们应该设计一个怎样的协议呢?
能想想这道题目应该怎样建模,并搜索出答案吗?
之所以把它称为程序设计语言抽象能力的试金石,那是因为,这道题目中不仅仅包括了逻辑,过程,而且答案也是一个逻辑加过程的混合语言,更要命的是,里面还包含了以囚犯的主观视角而进行的推理。
此外,它还足够的复杂,人的大脑不能很容易的将其简化为现有程序设计语言能够处理的形式。
更进一步,它的协议不长,暴力搜索过程不需要占用太长的时间。
要使用现有的程序设计语言为其建模,需要耗费掉长时间的思考,而且写出来的程序,是很不容易让人理解的,通常会沦为所谓高智商geek们的游戏。这其实是很可笑的,所有普通人都能够理解的场景,问题,为什么建模之后,就变得如此难以理解?
作者:
uda1341
在
海归商务
发贴, 来自【海归网】 http://www.haiguinet.com
相关主题
今天打电话,我姨夫(一老教授)对我说,你们海归创业的,基本上都是搞投资,基...
海归商务
2011-12-01 周四, 11:57
知耻近乎勇,建议唐骏捐款成立方唐奖学金,方唐发明奖。奖励有远大忽悠抱负的学...
海归主坛
2010-7-12 周一, 03:57
【中国海创会首席大记者现场报道之V] 别了,大连;别了,忽悠们;别了,初出...
海归主坛
2010-7-01 周四, 09:21
[原创] 中国人民该如何抵抗无才无良大陆导演的忽悠骗钱攻势? -- 从张Y...
海归酒吧
2009-12-16 周三, 13:08
[原创]体检被忽悠之小伙,你真逗
海归酒吧
2009-2-22 周日, 19:47
[原创]g99f0383/SmallEyes 原创之 海南旅游防忽悠
海归酒吧
2008-11-12 周三, 16:38
[原创]CBC惑众,加西(北美中文)网低级,加拿大统计署忽悠
海归主坛
2008-5-06 周二, 16:58
[原创]戏说保理与保险,兼拍钱代这个忽悠
海归论坛
2006-6-24 周六, 01:34
返回顶端
[原创忽悠]一门可用于编程的人工语言
--
uda1341
- (3155 Byte) 2010-10-16 周六, 21:49
(2305 reads)
继续忽悠,曾有个MIT混的牛人给点评过一段
--
uda1341
- (758 Byte) 2010-10-19 周二, 00:57
(377 reads)
如果你自己不会做编译器,那永远不会有人帮你实现的.
--
xmen03
- (0 Byte) 2010-10-18 周一, 22:50
(384 reads)
这话是怎么来的。我在做编译器和IDE啊。
--
uda1341
- (8 Byte) 2010-10-18 周一, 22:54
(322 reads)
突然发现忘了忽悠了
--
uda1341
- (332 Byte) 2010-10-17 周日, 12:46
(401 reads)
听起来向未来时代里面,人与机器人并肩战斗大星球大战,人甚至可以找机器人老婆
--
tutu
- (8 Byte) 2010-10-17 周日, 12:55
(368 reads)
做老婆,光有语言交流是不够的,甚至有了思想也还是不够的。要不,
--
under2005water
- (22 Byte) 2010-10-17 周日, 16:43
(354 reads)
现在流行丁克,流行同性恋结婚,
--
煎饼2点0
- (30 Byte) 2010-10-17 周日, 18:02
(312 reads)
最近遇到的一事,用你的语言就不会成问题了.
--
under2005water
- (360 Byte) 2010-10-17 周日, 08:44
(470 reads)
你说的这个问题跟空间隐喻有那么一点点关系
--
uda1341
- (458 Byte) 2010-10-17 周日, 10:44
(374 reads)
是的, 我们的问题就是缺少这个:
--
under2005water
- (235 Byte) 2010-10-17 周日, 16:38
(364 reads)
最后应该是这样的。
--
uda1341
- (189 Byte) 2010-10-18 周一, 23:17
(379 reads)
发明提高生产率新方法的人客观上都是在消灭他的同行
--
under2005water
- (13 Byte) 2010-10-19 周二, 06:31
(284 reads)
呵呵,这是电脑和人的根本区别。
--
绽铃子
- (48 Byte) 2010-10-17 周日, 09:55
(363 reads)
楼主的新语言就是为了缩小两者间的差距.
--
under2005water
- (135 Byte) 2010-10-17 周日, 10:17
(293 reads)
感觉你的想法同PERL,AWK之类的语言比较接近
--
创思
- (130 Byte) 2010-10-17 周日, 00:52
(410 reads)
似乎不像吧。呵呵。关于怎么构成killer app,想过,但不是眼下最主要的事情
--
uda1341
- (539 Byte) 2010-10-17 周日, 01:06
(316 reads)
好思路,喜欢啊。有一点建议:要有予编译过程,也就是去掉“程序员”的口水话,让他再审一次,这样,把复杂
--
穷通男儿
- (67 Byte) 2010-10-17 周日, 00:32
(492 reads)
意思应该是明白了,肯定不会等于自然语言编程,那是个无底洞。
--
uda1341
- (142 Byte) 2010-10-17 周日, 00:39
(327 reads)
能否解释一下原文中的例子
--
创思
- (49 Byte) 2010-10-16 周六, 23:59
(385 reads)
关于最后那个试金石的例子,我的语言还没过关啊,等过了关才行。
--
uda1341
- (43 Byte) 2010-10-17 周日, 00:02
(335 reads)
支持一下
--
创思
- (0 Byte) 2010-10-16 周六, 23:34
(425 reads)
只能一个个小例子来说(第一个是过程式代码和逻辑式代码的混合使用)
--
uda1341
- (348 Byte) 2010-10-16 周六, 23:39
(458 reads)
重复贴已删除
--
uda1341
- (0 Byte) 2010-10-16 周六, 23:57
(287 reads)
为什么要在运行时编码?
--
uda1341
- (660 Byte) 2010-10-16 周六, 23:49
(402 reads)
这是 meta-programming
--
创思
- (11 Byte) 2010-10-17 周日, 00:05
(380 reads)
哦,这个例子好像和meta-programming没有关系吧。
--
uda1341
- (0 Byte) 2010-10-17 周日, 00:24
(393 reads)
你是不是想在运行时生成代码?
--
创思
- (54 Byte) 2010-10-17 周日, 00:29
(383 reads)
不是,这个例子是说代码写到哪行,程序就运行到哪行。
--
uda1341
- (205 Byte) 2010-10-17 周日, 00:33
(375 reads)
这同程序的解释执行有什么区别?
--
创思
- (0 Byte) 2010-10-17 周日, 00:39
(375 reads)
也可以说差不多
--
uda1341
- (131 Byte) 2010-10-17 周日, 00:49
(266 reads)
meta programming实际上从58年开始,在lisp的世界里早就是常识了
--
uda1341
- (132 Byte) 2010-10-17 周日, 00:16
(301 reads)
不太明白最后一个例子中4,6,8,9怎样得出来
--
创思
- (0 Byte) 2010-10-16 周六, 23:46
(396 reads)
因为 a[x]==4 是一个逻辑查询
--
uda1341
- (308 Byte) 2010-10-16 周六, 23:57
(378 reads)
函数式语言中用一个表和一个filter可以完成这个工作
--
创思
- (9 Byte) 2010-10-17 周日, 00:02
(446 reads)
是的。小例子的危险就是别的语言也能做。
--
uda1341
- (247 Byte) 2010-10-17 周日, 00:11
(358 reads)
但你的输出结果依然需要一个表来表示
--
创思
- (126 Byte) 2010-10-17 周日, 00:24
(257 reads)
想法似乎不错,但写的太繁琐。能不能写成大一学电脑的学生都能一眼看懂的?
--
黄埔半期
- (0 Byte) 2010-10-16 周六, 21:59
(300 reads)
还没到这个时候,很多语法都还没固定下来。
--
uda1341
- (58 Byte) 2010-10-16 周六, 22:11
(293 reads)
不是指教材,而是指你的idea。你得头15秒讲清楚你要干什么,然后再加45秒你该怎么干。
--
黄埔半期
- (24 Byte) 2010-10-17 周日, 02:58
(282 reads)
显示文章:
所有文章
1天
7天
2周
1个月
3个月
6个月
1年
时间顺序
时间逆序
海归论坛首页
->
海归商务
焦点讨论
|
精华区
|
嘉宾沙龙
|
白领丽人沙龙
所有的时间均为 北京时间
论坛转跳:
您
不能
在本论坛发表新主题,
不能
回复主题,
不能
编辑自己的文章,
不能
删除自己的文章,
不能
发表投票, 您
不可以
发表活动帖子在本论坛,
不能
添加附件
不能
下载文件,
热门标签
更多...
论坛精华荟萃
更多...
博客热门文章
更多...
海归网二次开发,based on phpbb
Copyright © 2005-2024 Haiguinet.com. All rights reserved.