Нет, не вычитаются, а добавляются, потому что сами по себе несут ценность и могут входить в добавочную стоимость других продуктов, проприетарных или свободных, но т.к. производные свободные будут так же бесплатны, то я сузил до проприетарных.
Вопрос к товарищам-апдептам Инкскейпа и векторной графики в целом. Если ли в Инкскейпе или в аналогичном софте функция создания констрейтов для точек? Допустим, у нас есть симметричный контур, в нём есть две точки, которые я хочу соединить констрейтом вида: если меняется x одной, то так же меняется x другой. Или, например, поменяли x одной, с тем же значением, но противоположным знаком меняется x у другой. Могут быть и более сложные функциональные зависимости. Это было бы полезно при создании всяких симметричных контуров, логотипов (может быть и для шрифтов подойдёт, но у шрифтовиков уже всё это, вероятно, есть в их специализированном софте).
Вам может быть интересна эта публикация. У вас лишь похоже на Lisp (да и такой цели не стояло, как я понимаю. У вас акцент на стековости), а там автор поставил себе цель попытаться воспроизвести Лисп достаточно близко на синтаксисе Питона. То есть собственного парсера тоже нет, просто используется тот факт, что кортежи визуально похожи на S-выражения.
Ещё в комментах люди соревнуются в минимальных реализациях Lisp :D
Вообще, говоря, отменять что-то это не задача промисов. Промисы это как бы транспорт для возврата результата. А «отменяемость» это фича того поставщика данных, который нам даёт промис. Если реализовать это в промисе, то что делать с источниками данных, которые в принципе не поддерживают отмену?:
В мире ECMAScript микрозадачи именуют заданиями («jobs»).
Вот это место смутило. По идее как раз стандарт и определяет что и как называется. Тогда неясно откуда взялась «авторское» именование и почему оно противоречит стандарту и, мало того, указывается как основное, более правильное (!).
Что касательно задач и микрозадач, то, опять же, я думаю, ситуация здесь несколько проще, чем автор пытается нам описать. Задача, в терминологии автора, соответствует функции, прилетевшей из события или таймера (setTimeout, setInterval), а микрозадача соответствует setImmediate. Таким образом, микрозадача будет выполняться раньше, чем любая задача (потому что первая ставится в начало очереди, а вторая — в конец). Это же проясняет и ситуацию с промисами. Если имплементация промиса для вызова уже резовленного промиса «использует» setImmediate (ставит обработку в начало очереди), то мы получаем правильный порядок, если setTimeout(fn, 0) (ставит обработку в конец очереди), то будет некорректная последовательность в выводе.
Коммуницировать-то они могут, через storage event, но обработка такого события делается ровно так же, как и обработка любого другого, асинхронно (в отдельном фрейме). А синхронность проверить очень просто, нужно открыть две вкладки с одного домена и подвесить одну из них бесконечным циклом. Если, как говорится в статье, все вкладки с одного домена делят между собой один событийный цикл, то подвесятся они все (в чём я сомневаюсь).
Неожиданные реактивные выполнения команд, которые имеют побочные эффекты (например, удаляют какой-то файл на диске) — это последнее, что вы хотите от своей консоли.
Использование ~ вместо ^ … позволяет при восстановлении платформы получить версию у которой боляя поздняя патч версия
Не уловил сути этого изменения. Как раз циркумфлекс даёт более позднюю версию с учётом совместимости по мажорной версии, конечно. Тильда даёт версию в рамках минора, если указаны все три составляющие:
Мне нравится техника, которую я называю «прогрессивная детализация». Суть её в том, что на первых страницах расположено мало пунктов и они крупные (низкая детализация). Они даны с картинками и, зачастую, более крупным кеглем набрано название. Посетитель, которому нужно быстро или не кайф разбираться в тонкостях меню, скорее всего выберет блюдо с таких первых страниц. Анализируя цены можно также понять, что такие блюда имеют цену выше средней за «скорость». Посетитель, который готов разбираться что он будет кушать, пролистает дальше и получит более детализованный набор блюд (средняя детализация). В конце меню расположена подробная таблица по всем блюдам с калорийностями и прочим (самая высокая детализация).
Возможно, backdrop следует перевести как «задний план», а background оставить за устоявшимся «фон». Не уверен, что «задний план» правильный перевод, но так как нужно подчеркнуть разницу между фоном-составной-частью-элемента и фоновым содержимым определённого элемента, деваться особо некуда.
О чём и речь. Решить-то можно, но выглядит коряво до невозможности. Просто плохой дизайн закрепился и теперь считается технологическим решением. collapse намного логичней.
Это неверно. Тут перепутан субъект и объект глагола. Смысл грифинга (griefing) не в том, что игрок «скорбит», а в том, что он «вызывает скорбь» у других игроков. То есть вызывает негативные эмоции у других игроков и тем самым портит впечатление от игры.
Ещё в комментах люди соревнуются в минимальных реализациях Lisp :D
А ещё можно создавать свой промис и пометить его как отменяемый.
Promise.resolve(5) // возвращаем константу, отмена?
Поэтому в минимальной реализации промисов нету отмены. А вообще, если очень хочется, то можно.
Что касательно задач и микрозадач, то, опять же, я думаю, ситуация здесь несколько проще, чем автор пытается нам описать.
Задача, в терминологии автора, соответствует функции, прилетевшей из события или таймера (
setTimeout
,setInterval
), а микрозадача соответствуетsetImmediate
. Таким образом, микрозадача будет выполняться раньше, чем любая задача (потому что первая ставится в начало очереди, а вторая — в конец). Это же проясняет и ситуацию с промисами. Если имплементация промиса для вызова уже резовленного промиса «использует»setImmediate
(ставит обработку в начало очереди), то мы получаем правильный порядок, еслиsetTimeout(fn, 0)
(ставит обработку в конец очереди), то будет некорректная последовательность в выводе.