免费注册 查看新帖 |

Chinaunix

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

命名难,难于上青天 [复制链接]

论坛徽章:
0
201 [报告]
发表于 2012-02-17 18:32 |只看该作者
回复 200# 幻の上帝


关于重载决议我只是系统的看了几次c++ prime上写的,还有thinking in c++写的,其余就是看了好几篇文章以及其他书籍。名字修饰这个是基础,对程序员是完全透明的,反正我至今很少看到有什么书籍系统的讲过这个,好像《加载与连接》,还有《程序员的自我修炼》(俞家子,周爱明),《Windows内核情景分析》(潘爱明),《软件调试》(张银奎),以及一些讲c++编译器实现的地方有提及。

至于abi之余c++更是很少有资料提及这个,估计是太隐晦了,我早就放弃了,csdn上面那个叫陈硕的人写的《C++ 工程实践》以及《软件调试》,《程序员的自我修炼》里面好像有提及。我对qt在abi这里的处理有兴趣,qt毕竟也算是一个庞大的c++项目,其这么多年能够不倒,而且发展壮大,还支持那么多平台,必然尤其设计的独到之处(尽管qt的运行效率饱受指责,但是我觉得还是很不错的)。

论坛徽章:
0
202 [报告]
发表于 2012-02-17 18:35 |只看该作者
回复 202# walleeee


    ps.
《软件调试》真是一本很蛋疼的书,1000+页,跟《unix网络编程 卷一》差不多厚,而且里面讲的东西也是要求很高,不过主要是讲windbg以及一些windows上调试的以及kernel调试,对windows程序员帮助较大。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
203 [报告]
发表于 2012-02-17 20:45 |只看该作者
starwing83 发表于 2012-02-17 16:02
关于“虚假”么,你就当是一个找到信仰的人嫉妒比自己信仰更好的东西好了。
其实我也纠结lisp啊,我肯定知道lisp好要不然我跟你纠结这么多干嘛= =

学了el/cl/scheme/clojure还研究过各种乱七八糟的lisp后发现一个能打的都没有转而去学haskell的苦逼……
嫉妒个锤子…… 我也无限纠结的好吗……

当然这里面有一些个人喜好因素在里面。。。
比如如果抛弃对OO与Java的反感,clojure应该还是很有前途的而且很practical的……
如果放弃从C,C++养成的遵守标准的强迫症,只专注于某种cl/scheme也应该能找到满意的……


starwing83 发表于 2012-02-17 16:02
虚假我的真正含义是,比如说吧,C++里面的多态,那个行为是一致的,而不同只是不同子类的实现,而“虚函数派发”这种事儿就是固定的一致的。而lisp呢,它看上去是一致的,但是实际上连类似”虚函数派发“这种事情都不是一致的。有的直接执行cons(tiny-scheme),有的翻译bc(racket),有的两者都有(emacs-lisp),所以………………

当然你可以说这是实现问题。但是你难道不觉得这根本就是把事情丢给了实现,才造成各种实现都有的尴尬境地么。

对于运行时不能改变bc,你告诉过我有些lisp是有的。

被C/C++侵染过的程序员……应该对unspecified……implementation defined什么的很敏感才对……

  1. int f(int x, int y) {
  2.       int xx = x*x;
  3.       int yy = y*y;
  4.       int a = xx+yy;
  5.       return a;
  6. }
复制代码
有多少个automatic duration object? C要将它的语意解释(explain)清楚,只能说有3个,不提优化不提实现不是再正常不过的事了么……
实际上你懂的,很有可能一个都没有,除非:
int g(int x, int y) {
      int xx = x*x;
      int yy = y*y;
      int a = xx+yy;
      printf("", &xx, &yy, &a);
      return a;
}
但实际上很少这样写代码的……

lisp将代码的语意解释为,呃,统一的(function arg...),但实现方式只要保证满足其语意就行。
除非像上面那样,将其地址暴露给一个不知道会对该地址做什么的函数,实现就不得不真的分配变量了。

  1. ;el
  2. (let ((f '(lambda (x) (+ x 26)))) ; 注意那个quote
  3.   (funcall f 12))
复制代码
代码已经将lambda作为数据了,编译器就不敢优化了。
也许好的实现会分析后面的代码只将它作为函数,然后编译之,但el应该不会这样。



关于后面的,先说作用域。只有一种好吗……  只有capture by value,没有lexical与dynamic了……
而且我也想过应该有一种方法提出限制:某个表不能随意包含自由变量,比如像C++那样,要包含那些可以明确写出来,违反了就是编译错误。
capture by value以及上面这种限制,最开始其实都是为了卫生宏而考虑的……

再说心里有底。你需要的心里有底,其实还是来源于C的,+的行为是可以预料的。其实不只是lisp,C++就已经可以让这个行为不可预料了。
一方面我觉得,包括linus对C++的批评,只是一个关注的抽象层次不同的问题。
你只接受语言工作在某一个抽象水平,不接受一门可以跨越多个抽象层次的语言……
你需要一门语言,比如C,来限制你不会轻易、无意识地做出过于低效或危险的事情。

另一方面,如同以前讨论exp only的问题。
是否有副作用,与是否是表达式,本来就是两个正交的概念。
只是lua设计得让有副作用的都是语句,没副作用的都是表达式,但不是所有区分表达式/语句的语言都如此。
lisp只有有副作用的表达式与没副作用的表达式之分。
+是否能映射到机器代码,与+的抽象含义本来也是两个正交的概念。只是C语言让+能映射到(long long也算吧……),对不能映射的自己写函数。
C++/lisp有只有能映射到的+,如int,与不能映射到的+,如string/bignum。


可以让语言提供一些机制,让用户可以提出一些限制,比如某些部分:
1. 不需要dynamic typing
2. 不需要gc
3. 不需要eval
4. 必须映射到机器码的+
5. 必须复用栈空间
……
我自己都想这么干。人肉分析某些代码会不会怎样太累了,应该让程序协助自动完成。
但完全禁止1,2,3,禁止加法重载,禁止递归什么我觉得就不可接受了。
如果我要设计,一定是允许跨越多个抽象层次的语言,上至lisp下至C(如果有可移植的汇编格式甚至还可以继续往下……)。
跨语言是件很搓的事情……  手工编写绑定太累…… 自动产生?那我才是真的心里没底……


最后,还是关于+的事情:
http://www.gigamonkeys.com/book/conclusion-whats-next.html

(defun add (x y)
  (declare (optimize (speed 3) (safety 0)))
  (declare (fixnum x y))
  (the fixnum (+ x y)))

CL-USER> (disassemble 'add)
;; disassembly of #<Function ADD>
;; formals: X Y

;; code start: #x7374dc34:
   0: 03 c2    addl        eax,edx
   2: f8         clc
   3: 8b 75 fc movl        esi,[ebp-4]
   6: c3         ret
   7: 90         nop
; No value

我猜fixnum,the只是告知编译器使用int。 也许是safety 0告知编译器加法被替换了也不管……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
204 [报告]
发表于 2012-02-17 20:54 |只看该作者
回复 196# starwing83

真心想炫耀,还不如去研究OO……  那才有听众有粉丝的哇

论坛徽章:
0
205 [报告]
发表于 2012-02-17 21:21 |只看该作者
OwnWaterloo 发表于 2012-02-17 20:54
回复 196# starwing83

真心想炫耀,还不如去研究OO……  那才有听众有粉丝的哇


现在哪个公司招聘的时候不要求会熟悉面向对象啊??

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
206 [报告]
发表于 2012-02-17 21:33 |只看该作者
本帖最后由 OwnWaterloo 于 2012-02-17 21:33 编辑

回复 187# walleeee

>> 信仰不信仰还好吧,我反正是用c++/java最多的,有时候用python和其他,我现在最希望的就是看到c++11标准能被各个编译器支持,大家一致,这就可以让我少纠结很多。
如果C++11能再早点被很好的支持,我可能就不会判教了……
本科期间恰好处在一个C++03刚刚算比较稳定(VC6的老用户真不想理了……),C++0x又来了……
求之而不得…… 恨……


>> 你可以考虑去试试google的go语言,这个听说不错,是k&r中的k搞的(r已经死了。。。)。不过现在还在发展中,缺少一些工具,难以实际使用。
lisp学了之后对许多语言都没兴趣了……
不知道haskell学了之后会不会对go/erlang/f#...什么的没兴趣…… 问题是haskell学得会吗我……


>> 中医说晚上11点是人肝气复苏的时间,是肝自我修复的时间,长期晚睡对肝不好,因为肝是脏腑中的‘田’,肝不好会带来各种各样的问题。我都在尽量早睡,可是就是不能早起。这个bug要修正掉。

修正过无数会……  每次都要修正大约一周……  这一周都要浪费很多时间在床上翻来覆去……
但如果某天突然有什么事,比如和sw聊个天,争论个什么的…… 回过神可能就天亮了…… 于是bug又产生了……
其实还是我懒…… 如果第2天坚持不睡,晚上应该还是睡得着的……


PS:这个头像才符合你的id……

论坛徽章:
0
207 [报告]
发表于 2012-02-17 21:58 |只看该作者
命名难吗?要是我就一路 a b c d 到底,

如果要想命名好,就先了解行业规则,  就像我自动化, 电磁阀就是 SOL;基本是个人就认识什么意思

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
208 [报告]
发表于 2012-02-17 23:12 |只看该作者
三月廿七 发表于 2012-02-17 21:21
现在哪个公司招聘的时候不要求会熟悉面向对象啊??


调戏那些张口闭口面向对象的HR与面试官最有趣了我会到处说吗←_←

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
209 [报告]
发表于 2012-02-17 23:38 |只看该作者
回复 197# 幻の上帝

从上线就开始找……
该回的帖子都回完了还是没找到这段在哪里

论坛徽章:
0
210 [报告]
发表于 2012-02-17 23:49 |只看该作者
回复 207# OwnWaterloo

C++03刚刚算比较稳定

那你那个时候该选bcb,据我所知bcb那个时候对标准的支持比vc好多了。

问题是haskell学得会吗我……

有什么会不会的,看学到什么程度而已。看是学来干事情,还是仅仅学学玩完而已。:wink:

这一周都要浪费很多时间在床上翻来覆去

这个是现代人缺乏运动的典型表现,如果在农村,一个到晚上8点多,你就困得不行了,早上5点就醒了。

呵呵。现在想注册个好一点的id名字都难,现在都叫“抢注”了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP