免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 塑料袋
打印 上一主题 下一主题

争论C概念正确性的一般路子是什么? [复制链接]

论坛徽章:
0
121 [报告]
发表于 2012-06-02 19:50 |只看该作者
回复 118# 塑料袋

C语言及其标准本来就算是计算机发展之中的一部分。
非要说形式语义的话倒是可以和计算机无关,但C没那么简单,脱离计算机以后就没什么实际意义,地球人都知道。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
122 [报告]
发表于 2012-06-02 23:28 |只看该作者
幻の上帝 发表于 2012-06-02 19:50
回复 118# 塑料袋

C语言及其标准本来就算是计算机发展之中的一部分。


我上边说了,硬件,尤其是体系结构,是制约C及其标注的因,

现在你说脱离了计算机再谈C就没有意义,那么,我可否认为你同意我的观点?



如果不同意,那你说的计算机主要指什么?

首先可以排除特上层的应用, C的强项不是这儿,说这就没必要讨论C

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
123 [报告]
发表于 2012-06-03 00:10 |只看该作者
C的标准是建立在对硬件模型的抽像上的。所以说C的标准并不能适应所有硬件平台。这也许是标准中的“未定义行为”出现的原因。这样便于编译器的实现。所以说程序中出现“未定义行为”时要小心了。

论坛徽章:
0
124 [报告]
发表于 2012-06-03 00:54 |只看该作者
回复 122# 塑料袋


计算机领域不论是科学还是技术都不止体系结构这一块吧?
系统软件不算吗?还是你认为诸如Linux内核等软件中的每一行代码都和体系结构有直接联系?

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
125 [报告]
发表于 2012-06-03 01:19 |只看该作者
linux内核代码中的arch目录中除了.s,不是有大量的.c代码吗。这说明即使是纯c代码也不能保证是100%平台无关的。

论坛徽章:
0
126 [报告]
发表于 2012-06-03 09:22 |只看该作者
虚心学习OIOIC和WGI对提升你的C语言水平有极大的帮助

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
127 [报告]
发表于 2012-06-03 09:49 |只看该作者
cobras 发表于 2012-06-03 01:19
linux内核代码中的arch目录中除了.s,不是有大量的.c代码吗。这说明即使是纯c代码也不能保证是100%平台无关 ...


没看明白想表达什么意思。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
128 [报告]
发表于 2012-06-03 12:33 |只看该作者
幻の上帝 发表于 2012-06-03 00:54
回复 122# 塑料袋

计算机领域不论是科学还是技术都不止体系结构这一块吧?
系统软件不算吗?还是你认为诸如Linux内核等软件中的每一行代码都和体系结构有直接联系?


OK,体系结构和系统软件,是谈C不能绕过去的两个东西。

我自己就是搞系统软件的,所以没有着重提起这个,免得给人以己之长,攻人之短的感觉。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
129 [报告]
发表于 2012-06-03 13:50 |只看该作者
回复 128# 塑料袋


    我说说我个人的理解吧。

没错,C语言客观上产生于标准之前。实践是标准产生的唯一原因,我同意。

问题在于,标准描述的C语言,和实际上产生了标准的C语言,已经不是一个层面的东西了。

标准为什么产生?因为K&R发明了一种很有用的语言,而这种语言有很多实现,这些实现各不一样,给这种语言的推广和移植造成了很大的麻烦,于是几个厂商联合起来搞了个标准,并且规定不满足这个标准限制的就不叫C语言。后来随着市场的逐渐更新,C的标准也一变再变以满足所谓的“先进性”。

从手段来说,这其实就是一垄断行为。然而我们这里单纯讨论技术层面。所谓标准化语言,其实已经不再拘泥于计算机了。

标准的目的在于,只要执行C语言的计算机满足我描述的几个限制,那么这个计算机上的C语言就应该照着我描述的方式执行。也就是说,如果计算机连我的最低限制都不满足(比如每次算1+1结果都不一样)那显然在这个计算机上就不可能存在C语言了。

也就是说,实际上我们是在一个“虚拟机”上去讨论C语言的标准。换言之,这是一种这样的机器,如果发生了UB什么的,这个机器默认就会消失不见,换言之程序也就不可能正确(满足预期)了。(当然既然是UB,消失不见只是其中一种结果而已……)

也就是说,写代码的时候,我们要假设自己的代码要在这种最最极端的“虚拟机”上面执行。这也才是满足标准的。

OW说过一句话:完全满足标准的代码实际上啥都干不了。

比如说pm那个关于二维数组的帖子,Lua号称Clean C,似乎就干了这种事情了……不也是移植得很happy么……

实际上虽然标准C规定了IO神马的,理论上至少一个C编译器还是搞得出来的。但是实际上,标准C那庞大的UB,IT什么的会把你折磨疯掉,最后你还是会退回某个编译器的怀抱,或者自欺欺人说自己是Clean C但实际上没有任何人能证明……

标准就是这种类似于“免检产品”标签的东西。

至于我为啥吵架—人生总要有点乐趣,不是么?

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
130 [报告]
发表于 2012-06-03 16:47 |只看该作者
starwing83 发表于 2012-06-03 13:50
回复 128# 塑料袋

OW说过一句话:完全满足标准的代码实际上啥都干不了。


那死扣标准,造就一个完全满足标准的代码,没有任何意义了。那还为啥死抠标准呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP