home.social

#кодгольфинг — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #кодгольфинг, aggregated by home.social.

  1. [Перевод] Компилятор WebAssembly, который помещается в один твит

    ▍ Введение Наш первый «компилятор WebAssembly в твите» имел длину 269 байт; с тех пор мы смогли снизить её всего до 192 байтов. В результате мы получили компилятор, получающий арифметическое выражение, записанное в обратной польской нотации, и компилирующий его в валидный модуль WebAssembly. Этот модуль экспортирует одну функцию, которая возвращает результат исходного арифметического выражения. Компилятор выглядит так: let c=(b,l)=>WebAssembly.instantiate(new Int8Array(
    [,97,115,109,1,,,,1,5,1,96,,1,127,3,2,1,,7,4,1,,,,10,
    l=(b=b.split` `.flatMap(t=>t>-1?[65,t]:107+'-*/'.indexOf(t)))
    .length+4,1,l-2,,...b,11])) А вот пример его использования: (await c('11 11 1 - + 4 * 2 /')).instance.exports['']() Но это не просто хитрый трюк — если вы начнёте разбираться, как работает этот код, то на удивление много узнаете о WebAssembly! В этом посте мы объясним, как это всё работает, пошагово деобфусцируя код.

    habr.com/ru/companies/ruvds/ar

    #кодгольфинг #code_golf #трюки_в_коде #разреженные_массивы #модули #компиляция_модулей #ruvds_перевод

  2. [Перевод] Компилятор WebAssembly, который помещается в один твит

    ▍ Введение Наш первый «компилятор WebAssembly в твите» имел длину 269 байт; с тех пор мы смогли снизить её всего до 192 байтов. В результате мы получили компилятор, получающий арифметическое выражение, записанное в обратной польской нотации, и компилирующий его в валидный модуль WebAssembly. Этот модуль экспортирует одну функцию, которая возвращает результат исходного арифметического выражения. Компилятор выглядит так: let c=(b,l)=>WebAssembly.instantiate(new Int8Array(
    [,97,115,109,1,,,,1,5,1,96,,1,127,3,2,1,,7,4,1,,,,10,
    l=(b=b.split` `.flatMap(t=>t>-1?[65,t]:107+'-*/'.indexOf(t)))
    .length+4,1,l-2,,...b,11])) А вот пример его использования: (await c('11 11 1 - + 4 * 2 /')).instance.exports['']() Но это не просто хитрый трюк — если вы начнёте разбираться, как работает этот код, то на удивление много узнаете о WebAssembly! В этом посте мы объясним, как это всё работает, пошагово деобфусцируя код.

    habr.com/ru/companies/ruvds/ar

    #кодгольфинг #code_golf #трюки_в_коде #разреженные_массивы #модули #компиляция_модулей #ruvds_перевод

  3. [Перевод] Компилятор WebAssembly, который помещается в один твит

    ▍ Введение Наш первый «компилятор WebAssembly в твите» имел длину 269 байт; с тех пор мы смогли снизить её всего до 192 байтов. В результате мы получили компилятор, получающий арифметическое выражение, записанное в обратной польской нотации, и компилирующий его в валидный модуль WebAssembly. Этот модуль экспортирует одну функцию, которая возвращает результат исходного арифметического выражения. Компилятор выглядит так: let c=(b,l)=>WebAssembly.instantiate(new Int8Array(
    [,97,115,109,1,,,,1,5,1,96,,1,127,3,2,1,,7,4,1,,,,10,
    l=(b=b.split` `.flatMap(t=>t>-1?[65,t]:107+'-*/'.indexOf(t)))
    .length+4,1,l-2,,...b,11])) А вот пример его использования: (await c('11 11 1 - + 4 * 2 /')).instance.exports['']() Но это не просто хитрый трюк — если вы начнёте разбираться, как работает этот код, то на удивление много узнаете о WebAssembly! В этом посте мы объясним, как это всё работает, пошагово деобфусцируя код.

    habr.com/ru/companies/ruvds/ar

    #кодгольфинг #code_golf #трюки_в_коде #разреженные_массивы #модули #компиляция_модулей #ruvds_перевод

  4. [Перевод] Компилятор WebAssembly, который помещается в один твит

    ▍ Введение Наш первый «компилятор WebAssembly в твите» имел длину 269 байт; с тех пор мы смогли снизить её всего до 192 байтов. В результате мы получили компилятор, получающий арифметическое выражение, записанное в обратной польской нотации, и компилирующий его в валидный модуль WebAssembly. Этот модуль экспортирует одну функцию, которая возвращает результат исходного арифметического выражения. Компилятор выглядит так: let c=(b,l)=>WebAssembly.instantiate(new Int8Array(
    [,97,115,109,1,,,,1,5,1,96,,1,127,3,2,1,,7,4,1,,,,10,
    l=(b=b.split` `.flatMap(t=>t>-1?[65,t]:107+'-*/'.indexOf(t)))
    .length+4,1,l-2,,...b,11])) А вот пример его использования: (await c('11 11 1 - + 4 * 2 /')).instance.exports['']() Но это не просто хитрый трюк — если вы начнёте разбираться, как работает этот код, то на удивление много узнаете о WebAssembly! В этом посте мы объясним, как это всё работает, пошагово деобфусцируя код.

    habr.com/ru/companies/ruvds/ar

    #кодгольфинг #code_golf #трюки_в_коде #разреженные_массивы #модули #компиляция_модулей #ruvds_перевод