• Async, js модули, в браузере как правильно сделать синхронизацию?

    @pvvv Автор вопроса
    отвечу сам, хоть и не знаю.
    Любой await всё равно поломает синхронность выполнения. И придётся возвращать промисы и ожидать их во всех следующих зависимых скриптах, которые надо будет ещё и как type="module" объявить (что вероятно поломает и их порядок даже без await). И дополнительно так же синхронизировать и сами встроенные скрипты, так как не уверен что с await порядок их выполнения сохранится.
    Тем не менее есть крайне дурацкие способы поломать асинхронность через вебворкеров (deasync), но пользоваться ими я пожалуй не буду.

    а вообще про принудительную асинхронную загрузку "тому кто это придумал надо гвоздь в голову забить" (с) ДМБ

    причём есть возможность синхронной загрузки wasm меньше аж 4кБ (там вроде это ограничение хотели увеличить, но если даже и увеличили, не уверен что можно полагаться что оно будет работать везде).
    Написано
  • Async, js модули, в браузере как правильно сделать синхронизацию?

    @pvvv Автор вопроса
    Михаил Ливач, спасибо конечно за jQuery, но прикоснувшись совсем недавно в первые в жизни к волшебному миру УЭБпрограммирования, я от простого яваскрипта всё никак разо##еть обратно не могу пока.

    Ведь если бы вместо wasm (с его обязательной асинхронной загрузкой) был бы просто чистый js без асинхронных функций, то всё нормально и так по очереди исполнялось бы.
    Неужели нет способа поломать единственный асинхронный вызов, сделав его обратно синхронным, чтобы больше ничего не трогать?
    Написано
  • Async, js модули, в браузере как правильно сделать синхронизацию?

    @pvvv Автор вопроса
    Это не тот случай.
    Пока то "большое", на аж целых 50кБ wasm не загрузится, всему остальному на странице делать всё равно абсолютно нечего. И будут все остальные ждать загрузки и выполнения первого скрипта "синхронно" (если бы это был просто файл.js), или рассевшись в асинхронную очередь awaitов или цепочку колбэков - разницы вообще никакой.

    Вот если у меня в html первой строкой идёт
    <script src='несколько мегабайт яваскрипта.js'></script>
    то всё нормально и потом дальше разбросанные по странице встроенные скрипты по очереди выполнятся. Но если вдруг 50кБ wasm, то его обязательно надо загружать асинхронно и потом дополнительно расставлять костыли синхронизации всем остальным, потому что порядок исполнения теперь какой попало.
    Написано
  • Async, js модули, в браузере как правильно сделать синхронизацию?

    @pvvv Автор вопроса
    параллельного запуска как раз не хочется, но загрузка сделана исключительно через промисы.

    вопрос как всё остальное затормозить пока сама функция init отработает (и куда её, кстати, лучше засунуть? в window.onload?), ведь <script>await init()</script> нельзя сделать.
    Чтобы остальные встроенные тэги <script> заведомо получили проинициализированные глобальные объекты, и не пришлось ничего в них менять, запихивая в колбэки init'а.
    Написано
  • Async, js модули, в браузере как правильно сделать синхронизацию?

    @pvvv Автор вопроса
    не особо помого,
    async и defer для скриптов вроде бы не особо затрагивают выполнение собственно асинхронных функций.
    я в принципе понимаю как это делать правильно, но хочестся странного: без передачи коллбэков, не меняя ничего в остальных скриптах, в первом внешнем скрипте somefile.js просто подождать выполнения асинхронной инициализации и потом продолжить дальше остальные скрипты (в том числе и не внешние на которые defer не работает) как будто ничего асинхронного и не было.
    Написано
  • Async, js модули, в браузере как правильно сделать синхронизацию?

    @pvvv Автор вопроса
    забыл обернуть в код - парсер пожрал :(

    пусть будет например загрузка wasm в отдельном файле somefile.js с асинхронными функциями

    async function init(){
    instance = await WebAssembly.instantiate(await load('...wasm...'),{env:env})).instance;
    }

    и соответсвенно в html
    <script src="somefile.js"></script>
    как правильно дождаться выполнения асинхронных функций и возвращать объекты из этого somefile.js чтобы далее в html файле испольвать их в других <script>console.log(wasm)</script> "синхронно" ?
    Написано
  • Как вернуть двумерный массив?

    @pvvv
    typedef struct{
      int data[3][5];
    }array_t;
    
    array_t & my_static_singleton_array() {
      static array_t array = {{{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}}};
      return array;
    }
    
    void add12(array_t & array, int n){
      (*((int (*) [3][5]) &array))[1][2] += n;
    }


    вроде как-то так,
    но вообще, конечно, лучше так не делать, особенно с кастованием этой структуры обратно в массив...
    Написано
  • Как в С можно сделать реагирование на клавишу клавиатуры без ожидания обязательного ввода (без использования стандартных библиотек)?

    @pvvv
    Ожидание enter может быть когда включена стороквая буферизация ввода, которую возможно через какой-нибудь setvbuf удастся отключить.
    Без буферизации если в stdin что-то есть, ожидания не будет и getch просто вернёт первый символ. Ожидание будет когда там ничего нет.

    А вот самой функции действительно нет:
    https://gist.github.com/mschrader15/1417b802475abe...
    https://www.flipcode.com/archives/_kbhit_for_Linux...

    Либо может быть просто через ftell(stdin) возможно выяснить есть ли что-нибудь в буфере stdin, и только тогда звать getch, чтобы он не заблокировался в ожидании ввода. Но опять же при отсутсвии постороковой буферизации.
    Написано