Pull to refresh
3
0

User

Send message

На shadertoy можно найти подобные способы рисования кривых Безье

https://www.shadertoy.com/results?query=bezier

Нашел вот такие данные

выборка всего из 299 человек, но думаю общую картину отражает https://blog.scottlogic.com/2022/06/20/state-of-wasm-2022.html

Может потому что на чистом текстовом wat мало кто захочет писать, а бинарный wasm обычно компилируют из более привычных C/C++/Rust/etc

Тогда делаем следующие:

  • перед запуском колбэка удаляем эффект из всех подписок

  • вызываем колбэк, что приведет к подписке только у актуальных сигналов (реактивных переменных)

  • дополнительно: ограничиваем запуск эффекта, если не было изменения ни одной из переменных (внутри эффекта мы все равно можем только читать значения)

let currentEffect = null
let globalWriteCount = 1
const effectsMap = new Map()

function createSignal(initialValue) {
  let value = initialValue
  const subscribers = new Set()

  const read = () => {
    if (currentEffect) {
      subscribers.add(currentEffect)

      let effectsList = effectsMap.get(currentEffect)
      if (!effectsList) {
        effectsList = new Set()
        effectsMap.set(currentEffect, effectsList)
      }

      effectsList.add(subscribers)
    }
    return value
  }

  const write = (newValue) => {
    if (newValue === value) return

    value = newValue
    globalWriteCount += 1
    subscribers.forEach((fn) => fn())
  }

  return [read, write]
}

function createEffect(callback) {
  let writeCount = 0

  const effect = () => {
    if (writeCount === globalWriteCount) return

    writeCount = globalWriteCount
    currentEffect = effect
    const effectsList = effectsMap.get(effect)

    if (effectsList) {
      for (const subscribers of effectsList) {
        subscribers.delete(effect)
      }
    }

    callback()
    currentEffect = null
  }

  effect()

  return () => {
    const effectsList = effectsMap.get(effect)

    if (effectsList) {
      for (const subscribers of effectsList) {
        subscribers.delete(effect)
      }
      effectsMap.delete(effect)
    }
  }
}

Уже почти появился в виде structuredClone
Может лет через пять допилят до вида deepCopy и уберут существующие ограничения у structuredClone

Я все же придумал как отписаться от эффекта

let currentListener
const effectsMap = new Map()

function createSignal(initialValue) {
  let value = initialValue
  const subscribers = new Set()

  const read = () => {
    if (currentListener) {
      subscribers.add(currentListener)
      
      let effectsList = effectsMap.get(currentListener)
      if (!effectsList) {
        effectsList = new Set()
        effectsMap.set(currentListener, effectsList)
      }

      effectsList.add(subscribers)
    }
    return value
  }

  const write = (newValue) => {
    value = newValue
    subscribers.forEach((fn) => fn())
  }

  return [read, write]
}

function createEffect(callback) {
  const effect = () => {
    currentListener = effect
    callback()
    currentListener = undefined
  }
  effect()
  
  return () => {
    const effectsList = effectsMap.get(effect)
    
    if (effectsList) {
      for (const subscribers of effectsList) {
        subscribers.delete(effect)
      }
      effectsMap.delete(effect)
    }
  }
}

Использование

const revomeEffect = createEffect(() => {
  counter.textContent = count()
})

// later
revomeEffect()

вроде вполне удобный велосипед получился

надо будет делать Set

Так оно уже const subscribers = new Set()

Но останется проблема отписок.

Да, и как её пофиксить быстро, красиво и в процессе не написать еще один фреймворк я не знаю.

Нет, array[array.length-1] - это array.at(-1). А array.findLast() как array.find только ищет с конца.

Можно сделать createEffect как во Vue.js whenDepsChange

function createEffect(callback) {
  const effect = () => {
    currentListener = effect
    callback()
    currentListener = undefined
  }
  effect()
}

тогда подпишется при первом обращении к countB().

Недавно попалось одно научно-популярное видео с интересным наблюдением: собаки справляя нужду в большинстве случаев поворачиваются носом либо на юг, либо на север. Так что, возможно и у котов есть какие-нибудь особенности и мы наконец таки узнаем, куда они так стремительно несутся в 4 утра - на север или на юг =)
https://www.youtube.com/watch?v=nbJX6m9lzcM&t=98s (1:38)

потом на каком-нибудь другом сайте понадобится тот же самый Angular или React или еще какая-нибудь либа той же версии с того же CDN, и все уже будет готово заранее.

Подобное поведение кэша не так давно изменилось. Теперь каждый сайт должен тянуть сам все ресурсы с CDN независимо от того использовались ли ранее эти ресурсы на других сайтах.
https://www.stefanjudis.com/notes/say-goodbye-to-resource-caching-across-sites-and-domains/
https://developer.chrome.com/blog/http-cache-partitioning/#how-will-cache-partitioning-affect-chromes-http-cache
Если это так, то и нет смысла держать в памяти скомпилированный и оптимизированный код.

Например доступ к символу строки по индексу, может возвращать то, что угодно программисту, но не то, что было задано при инициализации связи со строкой

Не могли бы вы привести пример кода, где такая магия будет работать.

Вы не поняли сути игры, грабить корован можно только когда зеленая точка находится на зеленом поле, то есть вы нападаете как бы из засады =)

К сожалению данная версия игры непроходима, из-за бага вы не получите ачивку Robbed: Yes

Hotfix

замените в скрипте const C на let C

Отличный шутер получился, жаль, что идет только в 30 фпс. Жду DLC чтобы поиграть за синюю и красную точку =)

3-я сторона может спокойно вызвать const value = ref.deref(); и держать ссылку сколько её угодно. Так что для подобных вещей WeakRef бесполезен.

Жаль, выходит такие велосипеды подойдут только для экстремалов любящих совмещать езду по горам и грязевые ванны.

А почему нет ни переднего, ни заднего крыла? Вся ж грязь будет в спину и рожу лететь

Hidden text

В оригинале интерактивные примеры, можно мышкой пошевелить начало луча и интуитивно станет понятно, где ширина равна единице, а где высота.

Расшарить в гуглодокс нельзя, служба безопасности будет сильно ругаться и Маша отправится в декрет сильно раньше запланированного срока. Да и помимо экселя есть масса документов которые в гуглодокс не откроются (всякие CAD системы)

Information

Rating
Does not participate
Registered
Activity