Ruby China
  • 社区
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • 注册
  • 登录
Zete
@luikore
高级会员
第 2880 位会员 / 2012-07-16

55 篇帖子 / 3422 条回帖
245 关注者
6 正在关注
32 收藏
GitHub Public Repos
  • triez 140

    fast, efficient, unicode aware HAT trie with prefix / suffix support for Ruby

  • rsec 78

    Parser / Regexp Combinator For Ruby

  • regexp_optimized_union 11

    Regexp.optimized_union(word_list, regexp_options) generates optimized regexp for matching union o...

  • zscan 9

    Improved string scanner

  • stimulus-bind 9

    Enable simple data binding for stimulusjs

  • vscode-hypertab 3

    The Missing Tab Completion for VS Code

  • property-list 1

    Property list (plist) library with all formats support

  • keycap 1

    1.5u keycap for Kailh low profile switch

  • ffi-clang 0

    Ruby FFI bindings for libclang 3.4+.

  • llvm-node 0

    Node LLVM 4.0+ Bindings

More on GitHub
  • 概况
  • 话题
  • 回帖
  • 收藏
  • 正在关注
  • 关注者
  • Windows 能做但 Mac OS X 不能做的 at 2013年05月30日

    #3 楼 @blacktulip 经典游戏可以 wine, 新鲜游戏都有 mac 版

  • 求一种转换数组的简洁、高端、大气、上档次的方法 at 2013年05月29日

    #12 楼 @alsotang 写得越多,bug 就越多 ;(

    ["2\n1.1", "1.1", "2.2"].group_by{|s|  s.match(/(.+?)\./)[1]  }
    ["1", "2"].group_by{|s|  s.match(/(.+?)\./)[1]  }
    

    TDD: 最简单的满足测试的实现就是最好的

  • 求一种转换数组的简洁、高端、大气、上档次的方法 at 2013年05月29日

    #12 楼 @alsotang 你想多了...

  • 求一种转换数组的简洁、高端、大气、上档次的方法 at 2013年05月29日

    如果需要保序,就用 chunk

    例如

    ["0.0", "0.1", "1.2", "1.3", "0.2"].chunk(&:to_i).map &:last
    #=> [["0.0", "0.1"], ["1.2", "1.3"], ["0.2"]] 最后的 0.2 不合并到第一项中去
    
  • [上海] EMC 上海卓越研发中心招有一定经验的 Ruby 程序员 at 2013年05月29日

    Linux 技术

    Debian?

  • 服务器性能讨论... at 2013年05月29日

    #28 楼 @hlxwell ... 见 15 楼...

    C++ 的坑之一是 calling convention. calling convention 是类似于协议的东西,函数是怎么调用的,被调用方是怎么获取参数的,参数放在哪个寄存器,是顺序还是逆序推到栈上都有约定。编译器往往有扩展,可以用 __cdecl, __fastcall 等方式去指定一个函数的 calling convention.

    C 没有函数重载,C++ 有函数重载,所以 C++ 不能用 C 的 calling convention 而是自己另外弄了一套。这就造成两个东西一模一样但是编译出来的东西却不一样... 下面是一个最简单的 ruby ext, 如果保存为 .c 就可以,保存成 .cxx 或者 .cpp 就编译不过去

    #include <ruby.h>
    VALUE helloworld(VALUE self) {
      printf("hello world\n");
      return Qnil;
    }
    void Init_helloworld() {
      rb_define_method(rb_cObject, "helloworld", helloworld, 0);
    }
    

    如果在 C++ 里,就要声明这个函数是 C call:

    ...
    extern "C" VALUE helloworld(VALUE self) {
    ...
    

    或者用一个宏转换类型:

    rb_define_method(rb_cObject, "helloworld", RUBY_METHOD_FUNC(helloworld), 0);
    

    坑之二是自动生成析构函数调用,例如

    {
      std::vector<int> vec; // 一个 vector 对象, 会动态分配内存的
      ...
      // 这里会在编译期自动生成 vec 的析构函数调用, 把 vec 动态分配的内存释放掉
    }
    

    如果在中间插入了 ruby 方的调用,会出现一个跳出去的 long jump

    {
      std::vector<int> vec;
      rb_eval_string("raise 'hello world'"); // 跳出去了, 下面的代码包括自动析构也不会执行了
      ...
    }
    

    所以要用 rb_protect 之类的包装起来

    {
      std::vector<int> vec;
      int state;
      rb_eval_string_protect("raise 'hello world'", &state);
      if (state) ...
    }
    

    坑之三是异常,ruby 出现严重错误还会列出一个 segfault 的报告,报告中会包含当前的调用栈可以帮助排除问题。但如果在代码中扔一个 C++ 异常但忘记捕获

    throw std::runtime_error("hello world");
    

    程序就会报一个 "libc++ abi error" 退出,其它什么都不说了... 除非用 ulimit -c unlimited 再用 gdb / lldb 打开 image, 否则是看不到异常栈的...


    坑之四是 std::iterator 等模板对象没法在 gdb / lldb 中查看,因为 C++ template 是编译期的,debugger 在运行时不能知道最终生成的是什么...

    for (auto i = vec.begin(); i != vec.end(); i++) {
      // 你可以在这里插入一个断点, 但你看不到 i 是什么, 也不能对 i 做运算...
    }
    

    但往往这些坑必须去踩... C 并没有标准的数据结构/容器可以用,而 C++ 的标准库有各种实现,经常不得不去用,要么就是自己造一套或者是用一些让你不太放心的 ...


    什么语言的语法最复杂变态?不是 C++, 是 Objective-C++ ...

    坑之五... 就是 Objective-C++ 各种诱惑你去用...

    Objective-C

    id a = @"hello world";
    id b = 3; // :(
    

    Objective-C++

    auto a = @"hello world";
    auto b = 3; // (:
    
  • 别在服务器上安装 RVM at 2013年05月29日

    环境变量问题也可以 /bin/bash -l -c "..."

    单独的脚本 sh bang 可以这么写:

    #! /bin/bash -l
    

    就可以直接执行各种免疫环境问题了

    因为 -l 参数可以载入 bashrc

  • 服务器性能讨论... at 2013年05月29日

    #22 楼 @hlxwell 这个阻塞的 hello world, 一调数据库,单个请求需要 100+ms 速度就掉下去了,但是 eventmachine 调数据库就不阻塞...

    期待改成 C, 里面的 throw std::runtime_error(...) 看得我瞩目惊心... EM 里有几个新加方法忘记捕获异常,给个失效 fd 什么都没说就进程终止了...

  • [上海、杭州] CodeJam 开发比赛 at 2013年05月29日

    必须去瞻仰高帅富设备...

    #11 楼 @hooopo 神马快车是有的...

  • Rails 4 上 gem ‘pg' 报错 at 2013年05月29日

    pg 装不上么?要先装 postgresql 然后

    ARCHFLAGS="-arch x86_64" gem install pg -v '0.15.1'
    

    再 bundle 应该就好了,和 rails 兼容没关系...

  • zsh: exec format error: git 请问该怎么解决?[重装系统了。。。结贴] at 2013年05月29日

    type git 看看

  • production 环境下怎么输出? at 2013年05月28日

    #4 楼 @sforce100 不知道... 查下 rails logger 的 api? 另外难道是部署工具写了 /etc/logrotate.d/ ?

  • 为什么要下载证书?证书里面有什么信息? at 2013年05月28日

    nginx 可以用 http://wiki.nginx.org/HttpSslModule#ssl_client_certificate 启用客户端证书,合作公司间系统 API 交互调用之类可以用

  • Markdown 语法问题 at 2013年05月28日

    这里 markdown 有点奇怪,加空格才行... " hello world​​ "

  • 深入 Ruby 的好书:Ruby Under a Microscope at 2013年05月28日

    1.9.0 时候有过一个 RHG の逆襲 ...

    http://www.hakkaku.net/articles/20080513-204 http://www.nicovideo.jp/mylist/6648730

  • Teahour.fm 第 17 期发布,访谈嘉宾 @luikore 和 @skandhas at 2013年05月28日

    #31 楼 @bhuztez 我还以为你说你写...

  • Teahour.fm 第 17 期发布,访谈嘉宾 @luikore 和 @skandhas at 2013年05月28日

    #29 楼 @bhuztez +1024

    不 teahour 讲一下么?

  • Teahour.fm 第 17 期发布,访谈嘉宾 @luikore 和 @skandhas at 2013年05月28日

    @skandhas 3

  • Teahour.fm 第 17 期发布,访谈嘉宾 @luikore 和 @skandhas at 2013年05月28日

    #20 楼 @bhuztez wsgi 只用到了 tcp 的一小部分啊,我还是觉得这本书好,一会就能看完,而且内容选择很小心 (里面没提到的都比较坑... 我昨天跟着 unix 网络编程写了个 descriptor sharing 的服务器,总是几千个请求后出现 EBADF 被坑到现在,再后来查到在 OS X 上用 sendmsg 传送 fd 的 faq 然后觉得要判断各种平台不实用,放弃了...)

  • Teahour.fm 第 17 期发布,访谈嘉宾 @luikore 和 @skandhas at 2013年05月28日

    话说刚看完 working with tcp sockets, 除了没提一些 sendmsg / recvmsg / ioctl 这种平台差异较大的函数,内容也挺全面的,比 unix 网络编程的 tcp 部分速成多了...

  • ruby hash table 是记录插入顺序的,实现方法简单粗暴 at 2013年05月28日

    #1 楼 @iBachue 有和 1.8 比较过插入删除性能,基本没什么区别

  • Teahour.fm 第 17 期发布,访谈嘉宾 @luikore 和 @skandhas at 2013年05月28日

    #9 楼 @bhuztez @skandhas 倾情自爆...

  • 为什么没人想写一个有语法检测功能的编辑器呢? at 2013年05月27日

    #2 楼 @HalF_taN jslint 自己设置一下参数吧,里面很多规则是挺无聊的没必要遵守...

  • 为什么没人想写一个有语法检测功能的编辑器呢? at 2013年05月27日

    加个保存 hook, 调用一下 ruby -c 就行...

  • 服务器性能讨论... at 2013年05月27日

    #14 楼 @lgn21st prefork em 略有提升但不明显,fork 3 个后简单的 hello world 有 +50% 左右吧,带数据库访问的没测... 但如果数据库客户端有自己的线程池能跳出 GVL , 单进程 em 基本够使了...

  • 服务器性能讨论... at 2013年05月27日

    #13 楼 @reus 好吧看来 libev 值得一看。就怕 c++ 代码略多... 最近看了 eventmachine 觉得它写这么多 c++ 效率会很低... 因为:A: c++ 自动生成栈上对象的析构调用,如果在 c++ 里调用 ruby 但没用 rb_protect 包起来,ruby 的长跳转/异常就会飞到外面而跳过析构函数造成泄漏 (不过粗看去 eventmachine 好像基本都包了... 没包的地方也基本没什么好析构的). B: 栈上的 struct 会降低保守式 gc 的效率,有 patch 搞定修过 eventmachine 上这样的问题。

  • 上一页
  • 1
  • 2
  • …
  • 74
  • 75
  • 76
  • 77
  • 78
  • …
  • 111
  • 112
  • 下一页
关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English