Андрей
Андрей
Vitaly
Поясни, пожалуйста.
мутировать стейт можно только чрез посылку экшенов, считай в 1 месте
Андрей
А где вы встречаете многопоточку?
Vitaly
и опять таки очень похоже на append-only подход: посылаешь экшены и редьюсишь до нового стейта
Дима
Поясни, пожалуйста.
Нужен single point of truth в состоянии чудовищной параллельности вычислений, в которой смысл предыдущих пакетов-сообщений сервера может меняться в зависимости от контекста и любых последующих сообщений. Проще говоря, это нелинейная история
Nikita
каждый раз хочу попросить его забанить за подобные ники, но потом вижу плашку админ
Nikita
Nikita
(
Андрей
Group Butler [beta]
Nikita kicked for flood!
Дима
Из-за ряда особенностей кода, "типа многопоточка типичного жса" обретает все признаки (проблемы) полноценной многопоточности (так как ни один тред не может захватывать контекст монопольно)
Дима
Дима
В данный момент у меня реализованны безопасные корутины для тредов и хуки для их перехвата
Андрей
Авось потом БД нормальную благодаря тебе смогут сделать)
Дима
Я скорее не про бд а про рантайм
Андрей
Дык какая разница? В твоём случае редакс - это бд.
Дима
Ну да
Андрей
Хотя нет, тебе надо CA только реализовать. Чот оверкилл задача.
Андрей
Надо поискать примеры из промышленных баз.
Дима
Хотя нет, тебе надо CA только реализовать. Чот оверкилл задача.
async function typicalThread(userId: number, attempt: number = 1) {
await initAction().done()
const result = await requestAction({ userId, attempt }).fail()
console.log('request failed!', result)
}
requestAction.done.epic(
fail$ => fail$.map(
({ params }) => {
if (params.userId > -1 && params.attempt < 5) return requestAction({
userId, attempt: params.attempt + 1
})
}
)
)
Дима
Это то, что в данный момент уже есть, покрыто тестами на 90%
Дима
requestAction и initAction — это инициаторы асинхронных запросов, без имплементации
Дима
То бишь это диспатчи экшнов в редакс стейт сами по себе)
Дима
Через пару трюков стало возможным делать await прямо для них
Дима
await action().fail() означает что выполнение вернётся в тред только если асинхронный запрос (инициируемый данным экшном) упадёт
Андрей
Как у тебя CAS интересно реализован)
Дима
Дима
Андрей
Вот смотрю на всё это и понимаю... Пойду на языки, где параллельность изначально была предусмотрена) А то делать троллейбус не охота.
Дима
Неправильно понимаешь
Дима
Это обычные корутины
Дима
Если тебе от них неуютно, то лучше как раз таки сидеть в жс, лол
Дима
Это обычные корутины
Другое дело что их просто никто не реализовал по нормальному
redux-saga была неплохой попыткой но это не то
Андрій
Андрей
Эм... А разве корутин в js ещё нет. Генераторы же.
Дима
Дима
Что делать при ошибке выполнения асинхронного запроса, что делать при успешном выполнении и возможность выбирать условия при котором продолжится выполнение треда
Дима
Дима
Фактически это аналог do notation)
Genya-©/\√`¶£®
ребята вопрос, есть функция
Genya-©/\√`¶£®
function add(x) {
return function(y) {
return x + y;
};
}
Genya-©/\√`¶£®
add(30)(30) // 60
Genya-©/\√`¶£®
можно ли решить вопрос без указания переменной x ?
Genya-©/\√`¶£®
function add()
Дима
#noobs
Дима
For #noobs: https://t.me/joinchat/Be4rsT3Uyr1TjmSlrRc77g
Genya-©/\√`¶£®
спс
Ruslan
я правильно понял, что сеттеры и геттеры в js неявные?
Дима
В каком плане?
Nikolay
Сеттеры и геттеры сами по себе, как концепция, порождают неявность :)
Ruslan
Пережиток объектно-ориентированного программирования
Андрей
В чём связь?
Sasha
Nikolay
Что подробнее? Очевидно же, неявность в маскировке функций под простые поля.
Sasha
Дк это же как раз круто. Это явность
Андрей
Ну да, это удобно.
Ruslan
GOTO тоже удобно раньше было
Андрей
Ruslan
«…they make code harder to read, understand, and maintain, by obscuring a function call and pretending it's a property access - with the sole dubious benefit of "you don't have to type parens".
They makes it impossible to know for sure if something has side effects, and make it possible for foo.bar = baz; foo.bar === baz to not be true. In addition, they cause huge performance slowdowns»
Дима
Андрей
Дима
Если требуется вно получить значение, то просто явно вызови функцию для его получения, а не маскируй её под простое чтение из контекста
Андрей
Понял, да. В js геттеры-сеттеры могут оказаться не очень хорошими.
Андрей
Только сейчас дошло, что бинарная совместимость в js не нужна.
Андрей
Это же интерпретируемый язык.
Дима
Дима
Нет
Андрей
Да.
Sasha
В python и go - дескрипторы вообще считаются хорошим тоном
Андрей
Ты не имеешь права менять public API.
Дима
Если я читаю значение, гораздо проще быть уверенным в том, что оно однозначно будет без сайд эффектов
Андрей
А геттер или чтение из поля - это разный байткод.
Sasha
Дима