• 手机游戏现在乃至以后都是绝对的主流,中国手游是统治地位,原神一年赚几百亿。单一付费的模式被价格歧视模式打爆。什么 3A 游戏大作都要被边缘化了。你提的问题不重要。

  • 社交平台这种赢家通吃的领域,个人开发者甚至普通小公司团队都没有赢面。

  • 猎头群。

  • 讨薪说明 at 2017年07月15日

    直接找相关政府部门告,公司怕政府。

  • 乱码至少知道几点:字符编码区间,以及明文的统计学规律(比如 is 这种的出现频率),然后写一个函数检查是否符合明文的统计学规律就可以了。

  • 你一篇文章写太长了,拆分成 5 篇文章吧。

  • @samatist 对了,你是深圳人,可以看看这个: http://blog.linjunhalida.com/blog/shuiku/ 比程序员有前途多了,深圳明年很大可能开涨一波。

  • 背了二十五万卡债。。千万不要滚成高利贷了,你很危险呀,赶紧先还了。

  • 难得看到昆山的工作,友情顶一下。我估计难招,会 ruby 的人不太会跑昆山,上海的人看不上这个工资。

  • @nikoloss Hi, 你好,我们工作经常英文开会,还是需要听说的能力的。

  • 你道出了一个非常可怕的现实:

    • 我们知道:办公环境能促进程序员的产出
    • 同时:老板并没有很热衷改进办公环境
    • 所以:老板并不是很在乎程序员的产出

    也就是说,程序员在整体业务里面,并不是核心需要推动的因素。

  • 玩了大概 6 年了吧

  • 打了补丁的部分可以跳过不做类型检查嘛。给个报警之类的。

  • 还在招聘中,快快投简历。

  • 还好,就是隔音成问题,影响开会

  • 都不是好的办公环境,好的办公环境是一个人一个单间,保证不影响工作,开会到外面会议室开。 我这种才是最好的办公环境。封闭,安静,没其他干扰因素(唯一的缺陷是门不太隔音不过不要紧我买了隔音耳塞)

  • 我该不该走 at 2017年05月02日

    有诚意的老板不会不发工资,真没钱不可以多办几张信用卡,房子抵押掉付工资呀。楼主明显被忽悠了。走完了之后发贴说一下这家公司的名字,让大家不要掉坑。

  • 自己顶一下,我们还在继续招聘。

  • 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
    
    
  • 因为我就写了一句话,不明白是正常的。举个例子:

    def calculate(objects)
      objects.map(&:count).sum
    end
    
    class A
      def count; rand; end
    end
    
    class B
      def count; 10; end
    end
    
    calculate(12.times.map{A.new})
    calculate(12.times.map{B.new})
    

    在 ruby 里面,calculate 就不晓得传进来的是什么东西,只会把 count 消息传给 object,让 object 返回结果,object 本身要实现接收:count 然后执行对应方法的过程。

    • 优化 1: 假设传进来的 objects 都是同样的类型,我们可以先取得 count_method,这样不需要 object 动态查找 count 的 method。

      def calculate(objects)
      # 假设objects都是同样类型
      count_method = objects.first.class.get_method(:count)
      objects.map{|o| count_method.call(o)}.sum
      end
      
    • 优化 2:宏编译优化,查找 count_method 的过程在编译期的时候就完成了。

      def create_calculate(klass, objects)
      count_method = klass.get_method(:count)
      lambda { |objects|
      objects.map{|o| count_method.call(o)}.sum
      }
      end
      

    calculate_method = create_caculate(A) calculate_method.calculate(objects)

    
    上面这两个优化可以提升很多的效率。要知道代码里面大多数的东西都是在方法调用来调用去。
    
    
  • 很明显是执行的时候才会猜类型呀,能够动态定义函数,同时函数本身不带有类型信息,那么只能在执行时才可以知道传进来的参数类型。 我觉得你以为实现的方式是:函数是一个模板,类似:func(T arg),当然不可能是这样的。