1. Haskell / Говнокод #14343

    −83

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    setRegState :: RegisterStates -> M_Register -> Word8 -> RegisterStates
    setRegState rs r n =
      let (a, b, c, d, e, f, h, l, pc, sp) = rs in
      case r of
        M_A -> (n, b, c, d, e, f, h, l, pc, sp)
        M_B -> (a, n, c, d, e, f, h, l, pc, sp)
        M_C -> (a, b, n, d, e, f, h, l, pc, sp)
        M_D -> (a, b, c, n, e, f, h, l, pc, sp)
        M_E -> (a, b, c, d, n, f, h, l, pc, sp)
        M_F -> (a, b, c, d, e, n.&.0xF0, h, l, pc, sp)
        M_H -> (a, b, c, d, e, f, n, l, pc, sp)
        M_L -> (a, b, c, d, e, f, h, n, pc, sp)

    Haskell has no boilerplate.
    Из исходников заброшенного эмулятора GameBoy (https://github.com/bitc/omegagb/)

    Запостил: Yuuri, 10 Января 2014

    Комментарии (8) RSS

    • понятно почему его забросили
      Ответить
    • Этот ваш хаскел такой хаскел.
      Ответить
    • для системщины не так уж и сильно говновато. например:
      https://github.com/bitc/omegagb/blob/master/src/CpuIO.hs
      Ответить
      • Интересно, насколько тормазная подобная интерпретация?
        Ответить
        • Ну switch то шустрый должен получиться, если хаскель сделает его именно табличкой переходов. А быстрее свича ты, имхо, ничего и не придумаешь, только JIT.

          Ну и в конце-концов это же GameBoy, а не нинтендо64 или сонька какая-нибудь. Он и на javascript летать будет ;)
          Ответить
          • хаскель же вроде в С транслируется?
            Ответить
          • В рассылке как раз жалуются, что «that is still only 10% of real time speed on my computer. And all this is still without emulating most of the GB graphics hardware».
            И представлять сложные состояния километровыми кортежами значений, когда есть хотя бы структуры — это говновато вне зависимости от задачи и подхода. Например, в LazyNES (https://github.com/trez/LazyNES/blob/master/CPU/Definition.hs) всё гораздо лучше организовано.
            Ответить

    Добавить комментарий