• OO又是一个老话题了, 编程范式跟着业务抽象来, 什么合适用什么. 比如GUI编程, 没有OO怎么做? 不要拿到锤子就把所有东西当钉子敲. 通用编程语言应该支持所有编程范式.

  • 我最近安装了Linux, 下面用了prax.cr这个替代pow的工具, 它就是用crystal重写的. 看看能不能解决我关注的Ruby缺少类型检查的 问题.

  • 新泽西节点。。。就算选美国你倒是找一个西海岸的VPS呀。

  • 工资待遇是13k起,水平可以的话比这个高很多,具体看能力。

  • 解析函数的阶段可以说是编译期。在这个阶段可以对函数代码进行优化。不过Ruby实现不支持。。。

  • Ruby语言的语法特性和执行方式其实是可以支持函数边界类型验证的(比如Racket就实现了),这个是属于可以做的事情。

  • C# partial应该可以做到这一点。

  • C语言特性以外的都不是必需品,但是作为现代通用编程语言,很多特性是保证开发效率和工程质量必须的。 烂语言有很多,比如Autoit,PHP,Perl,都能用,但是烂。

    函数式,类型系统都是极大提升开发效率和质量的,作为通用编程语言,是必须有的特性,没有理由不加。

  • 还是要用语言实现比较好。库写起来不好的。

  • 实现类型验证的简单过程:

    # 定义函数需要加上类型
    define_function :calculate, [Array(A)] do |objects|
      lambda {
        objects.map{|o| count_method.call(o)}.sum
      }
    end
    def define_function(name, types)
      Function.new(method: block.call, types: types)
    end
    
    # 解析调用到这个函数的代码的时候,会进行类型验证
    define_function :run do
      call_function(:calculate, :objects)
    end
    def call_function(func_name, args)
      func = get_function(func_name)
      type_checking(func, args)
      lambda { func.call(args) }
    end
    
    # 类型验证会去检查是否函数是否支持该类型,不支持的话就报错
    def type_checking(func, args)
      func.types.each_with_index do |type, i|
        unless args[i].kind_of?(type)
          raise TypeError
        end
      end
    end