1. Lua / Говнокод #7195

    −92

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    -- async IO operations
    -- op1.asyncRun(cb) - execute op1, and call cb(op1_result) after op1 completion
    
    -- op1 * g - new async operation which will execute op1.asyncRun(), then execute g(op1_result).asyncRun() and return op2_result
    -- op1 .. op2 - the same, but ignore result of op1. Will execute op1.asyncRun(), then op2.asyncRun() and return op2_result
    private.binder = {
    __mul =
            function(op1, g)
                local op = {
                    asyncRun =
                        function(cb)
                            op1.asyncRun(
                                function(op1_result)
                                    g(op1_result).asyncRun(cb)
                                end
                            )
                        end
                }
                setmetatable(op, private.binder)
                return op
            end,
    
    __concat =
            function(op1, op2)
                 return op1 * function(op1_result) return op2 end
            end,
    
    __metatable = 1
    }
    
    -- примеры использования:
    -- (Chatter.IO.Log("tic") .. Chatter.IO.Sleep(1000) .. Chatter.IO.Log("tac") .. Chatter.IO.Sleep(1000) .. Chatter.IO.Log("toe")).asyncRun(function() end)
    -- (Chatter.IO.GetTime * Chatter.IO.Log .. Chatter.IO.Sleep(1000) .. Chatter.IO.GetTime * Chatter.IO.Log).asyncRun(function() end)

    Lua.

    Запостил: burdakovd, 07 Июля 2011

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

    • Мне не нравится тот факт, что в луа сборщик мусора недетерминированный (насколько я прочитал). Совершенно же не подходит для встроенного использования. Напр. игровые ресурсы в опенгл можно уничтожать только в потоке опенгла, а в Луа, как я понял, сборка может произойти в любом потоке, что создаёт лишний геморрой.
      Ответить
      • я недавно играл в такое, совкового происхождения
        сэйвы грузило минуты по три
        перед удалением посмотрел - а там lua
        Ответить
      • Я, кстати, не знаю как у луа с синхронизацией объектов
        Сам луа ничего про потоки не знает, там только корутины есть

        А зачем вам думать про сборку мусора? Хотите писать деструкторы?
        Ответить
    • Ебать лапша-код!
      Ответить

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