python以追加方式打开文件 线程安全吗_多线程追加文件,不加锁,会出现什么情况 ?...

无定义。

顺便用这个问题来回答一下这个问题(linux/sem.h和sys/sem.h有什么区别? - in nek 的回答)下有人问我的问题:什么叫基于语义来进行编程?

其实这句话完整说应该是:要基于“自然语义”来进行编程。

我是软件架构师,我考虑的问题大部分时候是让自己的软件活得更久。软件面对各种各样的变化,软件换场景了,硬件升级了,操作系统升级了,换操作系统类型了,换开发库了,换数据库了……不一而足,怎么样让软件活下来?我的方法是,“基于语义进行编程”。

语义是一句话的自然的,表面的意思。大部分软件,都是解决人的问题,所以它的接口发展受人的思维所控制,这种接口上的控制,进一步会控制到内部的数据流,脱离人的思维去构造人脑逻辑之外的计算机逻辑,会增加接口发展的风险,会很快造成构架的破坏。

另一方面说,现在的计算机编程,通常都是要采用敏捷迭代的方式完成的。所以,一个定义(变量,函数)的含义,是这个定义的名称(以及其自然语义)决定的,而不是这个定义当前如何使用决定的。我的log函数现在实现成了printf,不表示你可以用printf来代替log,因为这个函数未来可以变更为写入数据库。

推广开去,比如现实中,一个网卡有一个mac,有两个mac的叫聚合,在OS的自然定义中,人们认为两个mac聚合是两张网卡的聚合。但你非要作死,在定义网卡的时候,非要用一个数组来放多个mac,后面配合的时候,网卡子系统不修理你,外部互联的子系统也会修理你,因为没有人会按你这样的考虑来构造其他系统,你就死得很快。

你要写日志,就用log()函数,你要打印输出,就用printf函数,你不能用printf来写日志,我知道你也能跑,但printf的语义不是日志,到你真要打印的时候,这两个函数会给你带来麻烦,你更不要用assert()等来当作日志输出(临时程序我不管,我说的是严肃的程序),这就叫基于语义编程,而不是基于逻辑(能跑)来编程。

有人问我malloc(0)返回什么,我说你去查手册,他说,他不用查,他试过了,是一个非0的指针,我说So what?你在几个平台上验证过?你看看man,人家是这样说的:

If size is 0, then malloc() returns either NULL, or a unique pointer value that can later be successfully passed to free()

你要基于这个来写程序,这样的程序才能活得长远。

理解这一点,也许更容易理解我前面的“无定义”是什么意思了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值