#36 楼 @ninehills 嘿嘿~ :)
#34 楼 @ninehills 算了,我也想骂人了。觉得在这个世纪能见到 51 很二逼而已,交流不在一个层面,多说无益。晚安。
#30 楼 @ninehills #29 楼 @jiffies
真理、本质这种词还是躲远些好。否则越来越糊涂。
你看到了中断发生时,51 设置中断标志位。但是中断标志位是做什么的你没有看。设置 IF 是为了防止中断时产生其它中断而造成同步问题。也就是说,在中断的处理例程中,不允许并发。51 这样自动设置,是个很简陋的设计。现代的操作系统和 CPU,是希望中断标志位设置的时间越短越好。x86 发生中断时会做很多检查,不过这检查更多是权限的检查,而把中断作为一个事实接受下来,会穿过 IDT,从 ring3 跳到 ring0,切换用户栈到内核栈,把一坨寄存器的值和中断号压进去,操作系统才知道是发生了哪个中断。很多事情需要做,中断的发生就是这么一个开关。信号在总线上按照同一个时钟周期流着,经过了一个与门,就打开了。
如果说检查,一个开关算什么检查,除非电流可以往回跑。除非水库开闸淹死了人,那责任是水的,而不是开闸的。
#26 楼 @ninehills 不要拿 51 当好东西,落后二十年了。
英特尔的手册在那里可以免费下载,APIC 之类做的事情很多很多,这部分语义很微妙,但仔细看是可以找到主线的。如果连这种概念都含含混混的不能给个准,英特尔的工程师也就只能停留在 51 这层次上了。
#21 楼 @ninehills 我写过操作系统,对 cpu 不能没入门的。前面的问题您没有回答,cflags 的中断标志位是做什么用的? 『中断发生时也就是设置一下中断标志位』,是真的这样子么?
#18 楼 @ninehills 再小提醒下,cflags 的 IF 标志是做什么用的?
#18 楼 @ninehills 只要没屏蔽都会压栈的,之前还会进入 trap gate 切换 cpu 的权限。操作系统可以选择忽略它们,但这由不得 cpu。
目前见过最实在的文章: http://www.ruanyifeng.com/blog/2011/09/restful.html
对 web 开发者而言,restful 的直接意义就是把人从命名的痛苦中解放出来了
cpu 的中断引脚是异步的,只管收到设备的信号就有中断了。
"检查某个事件是否发生本质都是 轮询+check"这句的一个反例是时钟中断,可编程时钟 (PIT) 就绝对不会是靠轮询来实现的。
相反,cpu 为了更好的利用主线,处处都留着异步的设计的痕迹。轮询 (或者同步操作) 在 cpu 一级,则属于能避免就避免的
体制内好有趣...
想起来以前 apt-get install ttf-wqy-zenhei 也遇到过这种情况,每次都在同一个地方 reset,想必是有段二进制流碰上啥关键字了
有关第一个问题,首先可以想到的是 errors 的输出更加方便吧。 关于第二个问题有个额外的疑问,是如果问题 2 有一个好的解决方案,能否完善一下 ActiveRecord,由它负责捕获异常解决掉这个问题呢。
原来还有.railsrc,大赞 同理应该也可以设置 slim 为默认了
楼主的问题跟这个帖子该是一样的 http://ruby-china.org/topics/4577
直觉上感觉二楼的方法挺靠谱倒是...
git add git commit git push git pull git branch git checkout
一开始只接触几个基本命令就足够的,后面的用多了慢慢就会了
gem 的话可以cd `bundle show gem_name`
到 gem 的源码目录然后全局搜索的
在一些日常任务上,rakefile 非常好用。用来编译/构建项目的话,就不如 make 擅长了
p 的输出来自对象的 inspect 方法,array 的 inspect 方法如下,可以找到这个[...]
的由来
MRI/array.c
1863 static VALUE
1864 rb_ary_inspect(VALUE ary)
1865 {
1866 if (RARRAY_LEN(ary) == 0) return rb_usascii_str_new2("[]");
1867 return rb_exec_recursive(inspect_ary, ary, 0);
1868 }
1830 inspect_ary(VALUE ary, VALUE dummy, int recur)
1831 {
1832 int tainted = OBJ_TAINTED(ary);
1833 int untrust = OBJ_UNTRUSTED(ary);
1834 long i;
1835 VALUE s, str;
1836
1837 if (recur) return rb_usascii_str_new_cstr("[...]");
1838 str = rb_str_buf_new2("[");
1839 for (i=0; i<RARRAY_LEN(ary); i++) {
1840 s = rb_inspect(RARRAY_PTR(ary)[i]);
1841 if (OBJ_TAINTED(s)) tainted = TRUE;
1842 if (OBJ_UNTRUSTED(s)) untrust = TRUE;
1843 if (i > 0) rb_str_buf_cat2(str, ", ");
1844 else rb_enc_copy(str, s);
1845 rb_str_buf_append(str, s);
1846 }
1847 rb_str_buf_cat2(str, "]");
1848 if (tainted) OBJ_TAINT(str);
1849 if (untrust) OBJ_UNTRUST(str);
1850 return str;
1851 }