Да, React очень интересный, но мне он показался очень подробным, что-ли, например, в todomvc на нем в 3 раза (!) больше кода, чем в Warp9.
Кроме того, у идея работать с POJSO есть свои минусы — если мы захотим по рабочему приложению получить слепок данных, чтобы их сохранить, например, — нам понадобится в каждый компонент добавить метод для экстракции этих данных из state. Посмотрите на исходники TodoMVC, там, чтобы этого избежать, пришлось все изменения делать внутри одного компонента (TodoApp), что тоже дурно попахивает, если мы говорим об архитектуре.
Я посмотрел на Javelin (https://github.com/tailrecursion/javelin). На первый взгляд он, так же как и RxJs и Bacon, не предоставляет ничего для постройки интерфейсов, только только дает возможность подцепиться к уже существующим элементам.
Примеры на github.com/tailrecursion/javelin-demos тоже все в стиле: вот у нас DOM и мы к нему цепляемся и изменяем. По мне нет смысла городить FRP если конечным шагом является подписка на реактивную переменную и модификация DOM с помощью jquery из обработчика.
Посмотрите на warp9 повнимательнее тут вся соль в композиции (собираем интерфейс по кусочкам) и модульности (любой кусок, вплоть до всего приложения включая view можно завернуть в AMD и загружать через requirejs). Дополнительным бонусом идет подход для сокращения утечек — посмотрите примеры, например, knockout и reactivecoffee этим страдают.
Если сравнивать с уличным героином — да. Чистый героин, как и большинство опиоидов, не вызывает серьезных осложнений при длительном применении, кроме зависимости.
Я читал на редите AMA одного наркомана, там вылезла следующая информация: при приеме героина вырабатывается толерантность, из-за которой нужно повышать дозу, а при повышении дозы растет вероятность остановки дыхания. Автор топика с этим согласился и сказал, что уже знает, что примерно так закончит. Получается опиоды лучше рассматривать как билет в один конец.
Спасибо за критику, это очень круто, особенно за #6 — классическая ошибка при метапрограммировании)
Если модуль большой, то невозможно найти те модули, которые использует данный модуль
Можно раскрыть мысль, почему это важно, я согласен, что очень часто нужна информация, где используется данный модуль, но не помню случая, когда задавался вопросом, кого он использует. Возможно, это просто вопрос привычки?
PS Вашу статью читал, она великолепна и всеобъемлюща, подробно описывает модули с технической точки зрения, но почему то после её прочтения у меня не сложилось понимания как нужно проектировать библиотеки используя современный модульный подход в JS. Именно поэтому мне и пришла в голову идея yamd — попытаться сделать систему похожей на java/c# (насколько это возможно), чтобы переиспользовать свой опыт этих языков.
В AngularJS, как и любом другом фреймворке для создания приложений, основанном на шаблонах есть как минимум одна родовая травма — приложения не поддаются композиции. Именно поэтому создать компонент в AngularJS (директиву) сложнее, чем её использовать.
В React, наоборот, нет различия между приложением и компонентами, и само приложение строится через композицию компонентов.
Кстати, при использовании React, не возникает целого класса вопросов, который возникает при использовании AngularJS, например, как создать элемент интерфейса дерево (a-la проводник в windows).
Если не ошибаюсь, в java 8 появится sun.misc.Contended аннотация, которую можно будет вешать на класс или его поле/поля, чтобы избежать False sharing'а.
Мне кажется, что при тотальном автопилоте кол-во машин резко снизится так, как пока человек работает 8 часов в офисе «его» машиной могут пользоваться другие люди, кроме того одна машина может отвозить привозить несколько людей, которые живут и работают рядом. Получает гибрид из общественного транспорта и личного водителя, а город станет местом для жизни)
25 лет назад Буран слетал в космос и сел на автоматике, а тут какие-то автомобили. Вспоминаем закон мура и думаем как техника ускорилась с тех пор, так же вспоминаем про то, что по сравнению с компом реакция человека ничтожна. Кстати, в России 28K смертей в год в дтп (это 1.5% от всех смертей).
Не понимаю, зачем использовать эфвемизмы, особенно такие очевидные и явно выделенные. Смысл в них, какой? Тем б*ле_ _итатb так*й т3кст *чень _еприятно, @ _начит эт* явное неуважение к читателю.
Мы давно записали фотографию и затем только читаем. В системе периодически вылетают диски — мы их заменяем новыми, но перебалансировки не происходит. Со временем все диски будут заменены, а так как перебалансировки не было — наша фотография хранилась только на старых дисках, следовательно, мы её потеряем.
Если java-программист хочет использовать замыкание (изменение локальной переменной из лямбды), то java сообщество не бьёт его палкой, а рекомендует использовать костыль в виде int[] или AtomicInteger. Возникает вопрос, почему это окостылевание не делает компилятор, если оно и так общепринято? Ответ я не знаю.
Это не трюк, а костыль. Когда я в первый раз увидел подобный код (там использовался AtomicInteger), я включил повышенный внутренний уровень опасности, ожидая хитрой работы с потоками, оказалось зря — это был как раз этот «трюк»: использование вещей для этого не предназначенных, чтобы обойти искуственное ограничение. По-моему, сложность для людей очевидна.
Замыкания и лямбды можно реализовать на уровне синтаксиса без добавления новых инструкций в байткод и изменения виртуальной машины. Доказательство: C#, Scala.
Кроме того, у идея работать с POJSO есть свои минусы — если мы захотим по рабочему приложению получить слепок данных, чтобы их сохранить, например, — нам понадобится в каждый компонент добавить метод для экстракции этих данных из state. Посмотрите на исходники TodoMVC, там, чтобы этого избежать, пришлось все изменения делать внутри одного компонента (TodoApp), что тоже дурно попахивает, если мы говорим об архитектуре.
Примеры на github.com/tailrecursion/javelin-demos тоже все в стиле: вот у нас DOM и мы к нему цепляемся и изменяем. По мне нет смысла городить FRP если конечным шагом является подписка на реактивную переменную и модификация DOM с помощью jquery из обработчика.
Посмотрите на warp9 повнимательнее тут вся соль в композиции (собираем интерфейс по кусочкам) и модульности (любой кусок, вплоть до всего приложения включая view можно завернуть в AMD и загружать через requirejs). Дополнительным бонусом идет подход для сокращения утечек — посмотрите примеры, например, knockout и reactivecoffee этим страдают.
Я читал на редите AMA одного наркомана, там вылезла следующая информация: при приеме героина вырабатывается толерантность, из-за которой нужно повышать дозу, а при повышении дозы растет вероятность остановки дыхания. Автор топика с этим согласился и сказал, что уже знает, что примерно так закончит. Получается опиоды лучше рассматривать как билет в один конец.
Конечно, всегда есть исключения, но не стоит на них надеяться, а то можно закончить как www.reddit.com/user/SpontaneousH/submitted
Можно раскрыть мысль, почему это важно, я согласен, что очень часто нужна информация, где используется данный модуль, но не помню случая, когда задавался вопросом, кого он использует. Возможно, это просто вопрос привычки?
PS Вашу статью читал, она великолепна и всеобъемлюща, подробно описывает модули с технической точки зрения, но почему то после её прочтения у меня не сложилось понимания как нужно проектировать библиотеки используя современный модульный подход в JS. Именно поэтому мне и пришла в голову идея yamd — попытаться сделать систему похожей на java/c# (насколько это возможно), чтобы переиспользовать свой опыт этих языков.
В AngularJS, как и любом другом фреймворке для создания приложений, основанном на шаблонах есть как минимум одна родовая травма — приложения не поддаются композиции. Именно поэтому создать компонент в AngularJS (директиву) сложнее, чем её использовать.
В React, наоборот, нет различия между приложением и компонентами, и само приложение строится через композицию компонентов.
Кстати, при использовании React, не возникает целого класса вопросов, который возникает при использовании AngularJS, например, как создать элемент интерфейса дерево (a-la проводник в windows).
mail.openjdk.java.net/pipermail/hotspot-dev/2012-November/007309.html
У вас в примере все async_code функции ничего не возвращают, это случайность или ограничение данного подхода?
Я что-то не так понял?
Если java-программист хочет использовать замыкание (изменение локальной переменной из лямбды), то java сообщество не бьёт его палкой, а рекомендует использовать костыль в виде int[] или AtomicInteger. Возникает вопрос, почему это окостылевание не делает компилятор, если оно и так общепринято? Ответ я не знаю.