• 中断的本质是什么 at 2012年08月15日

    #40 楼 @jiffies 抱歉还真可以,Page Fault 就是的。

  • 中断的本质是什么 at 2012年08月15日

    #36 楼 @ninehills 嘿嘿~ :)

  • 中断的本质是什么 at 2012年08月15日

    #34 楼 @ninehills 算了,我也想骂人了。觉得在这个世纪能见到 51 很二逼而已,交流不在一个层面,多说无益。晚安。

  • 中断的本质是什么 at 2012年08月15日

    #30 楼 @ninehills #29 楼 @jiffies

    真理、本质这种词还是躲远些好。否则越来越糊涂。

    你看到了中断发生时,51 设置中断标志位。但是中断标志位是做什么的你没有看。设置 IF 是为了防止中断时产生其它中断而造成同步问题。也就是说,在中断的处理例程中,不允许并发。51 这样自动设置,是个很简陋的设计。现代的操作系统和 CPU,是希望中断标志位设置的时间越短越好。x86 发生中断时会做很多检查,不过这检查更多是权限的检查,而把中断作为一个事实接受下来,会穿过 IDT,从 ring3 跳到 ring0,切换用户栈到内核栈,把一坨寄存器的值和中断号压进去,操作系统才知道是发生了哪个中断。很多事情需要做,中断的发生就是这么一个开关。信号在总线上按照同一个时钟周期流着,经过了一个与门,就打开了。

    如果说检查,一个开关算什么检查,除非电流可以往回跑。除非水库开闸淹死了人,那责任是水的,而不是开闸的。

  • 中断的本质是什么 at 2012年08月14日

    #26 楼 @ninehills 不要拿 51 当好东西,落后二十年了。

    英特尔的手册在那里可以免费下载,APIC 之类做的事情很多很多,这部分语义很微妙,但仔细看是可以找到主线的。如果连这种概念都含含混混的不能给个准,英特尔的工程师也就只能停留在 51 这层次上了。

  • 中断的本质是什么 at 2012年08月14日

    #23 楼 @jiffies 哲♂学并非偏离现实的借口。 如果一些基础概念不能固定下来,异步也可同步也可,哲♂学也没什么好谈的。

  • 中断的本质是什么 at 2012年08月14日

    #21 楼 @ninehills 我写过操作系统,对 cpu 不能没入门的。前面的问题您没有回答,cflags 的中断标志位是做什么用的? 『中断发生时也就是设置一下中断标志位』,是真的这样子么?

  • 中断的本质是什么 at 2012年08月14日

    #18 楼 @ninehills 再小提醒下,cflags 的 IF 标志是做什么用的?

  • 中断的本质是什么 at 2012年08月14日

    #18 楼 @ninehills 只要没屏蔽都会压栈的,之前还会进入 trap gate 切换 cpu 的权限。操作系统可以选择忽略它们,但这由不得 cpu。

  • 中断的本质是什么 at 2012年08月14日

    #6 楼 @jiffies 『任何一个中断都需要检查才能发现』是错误的。中断打断 cpu 的执行流程时,并不是 cpu 主动。CPU 并不是计算机系统的独裁王者,它只是连接到主线的一个用户,与其它设备一样,共同遵循着主线的协议。中断发生的时候根本不由你检查不检查,只要没屏蔽就都得做。

    你去打开一只台灯的开关,你不会认为台灯是主体去检查了开关。同样,你往中断引脚里传了信号,你也不该认为是 CPU 去检查了引脚。

    找一本计算机组成的书籍静静的看一下,会比灵光一闪去驳斥自己未理解的东西对自己更加有益。

  • Restfull 风格是什么意思? at 2012年08月14日

    目前见过最实在的文章: http://www.ruanyifeng.com/blog/2011/09/restful.html

    对 web 开发者而言,restful 的直接意义就是把人从命名的痛苦中解放出来了

  • 中断的本质是什么 at 2012年08月14日

    cpu 的中断引脚是异步的,只管收到设备的信号就有中断了。

    "检查某个事件是否发生本质都是 轮询+check"这句的一个反例是时钟中断,可编程时钟 (PIT) 就绝对不会是靠轮询来实现的。

    相反,cpu 为了更好的利用主线,处处都留着异步的设计的痕迹。轮询 (或者同步操作) 在 cpu 一级,则属于能避免就避免的

  • 体制内好有趣...

  • 想起来以前 apt-get install ttf-wqy-zenhei 也遇到过这种情况,每次都在同一个地方 reset,想必是有段二进制流碰上啥关键字了

  • Rails 其实有点像 Delphi. at 2012年08月04日

    #3 楼 @ery 反过来说,C#社区只有微软的用户,ObjC社区只有苹果的用户。

  • 有关第一个问题,首先可以想到的是 errors 的输出更加方便吧。 关于第二个问题有个额外的疑问,是如果问题 2 有一个好的解决方案,能否完善一下 ActiveRecord,由它负责捕获异常解决掉这个问题呢。

  • 原来还有.railsrc,大赞 同理应该也可以设置 slim 为默认了

  • Rails should have data migration. at 2012年08月02日

    #30 楼 @bhuztez 提醒过你了,你没看贴。或者有人告诉你,rails 的 migration 里面不能改数据么?这是坏味道,没人这么做罢了。

  • Rails should have data migration. at 2012年08月01日

    #28 楼 @bhuztez 你说的大家都懂,可是楼主说的什么你真的确定看明白了么。 不学下 rails,不让实际的项目多虐几下,凭自己在 django 里面了解的经验就能理解了别人在说什么? 太轻巧了。世界真这么美好就好了。不用学我就比你们还懂 rails,不用学我就比你们更清楚 rails 的弱点在哪儿,不用学我就能指点你们该怎样解决现实问题。 哪怕花上半个星期草草过上一遍 rails guide,也不至于说这些天真的话出来。

  • 楼主的问题跟这个帖子该是一样的 http://ruby-china.org/topics/4577

    直觉上感觉二楼的方法挺靠谱倒是...

  • Rails should have data migration. at 2012年08月01日

    #23 楼 @bhuztez 别再说了,south 技止此尔。它解决的本来就是 rails 中不存在的问题,但跟本贴中提到的问题无关。

  • Rails should have data migration. at 2012年08月01日

    #19 楼 @bhuztez 你没看贴

  • Rails should have data migration. at 2012年08月01日

    #15 楼 @bhuztez south 是怎样解决本贴提到的问题的呢?

  • Rails should have data migration. at 2012年08月01日

    #14 楼 @hooopo 前几天问过身边搞 py 的朋友,好几人都说"一般没有调整 schema 的需求吧"。刚开始还是很难适应的。

  • Rails should have data migration. at 2012年08月01日

    #11 楼 @bhuztez south 是把 migration 信息存在数据库里么?

  • #81 楼 @fsword python 的这种 (某个版本的) 广泛支持也是阻止它新版本推广的一个沉重负担了,长远来看对一门语言的发展也并不好

  • git 比 rails 还难学习 at 2012年07月27日

    git add git commit git push git pull git branch git checkout

    一开始只接触几个基本命令就足够的,后面的用多了慢慢就会了

  • gem 的话可以cd `bundle show gem_name`到 gem 的源码目录然后全局搜索的

  • 在一些日常任务上,rakefile 非常好用。用来编译/构建项目的话,就不如 make 擅长了

  • 测测你的功力,数组问题 at 2012年07月26日

    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 }