А не связано ли появление серых кругов с тем, что изображение на мониторе тоже само по себе мерцает? Соответственно из-за сочетания частот мерцания самого монитора и картинки изменяется «скорость» их движения.
А что не так было с возможностями Союза? Вроде народу в стране было ненамного меньше, чем в США. Да и страны поменьше вроде Германии немало технологических достижений имеют.
Зато придётся описывать интерфейс, если там будет больше аргументов. Что мы пишем BiFunction, что Arrow — какой-то существенной разницы в объёме написанного не видно, честно говоря. Разве что более многословно описывается последовательность вызова функций, но и возможностей больше.
Работа с монадами в jArrows пока не реализована из коробки, в статье по ссылкам это называется Kleisli Arrow. С такой стрелкой можно делать композицию функций, которые возвращают монады.
А как, отвлекаясь от простых математических функций из примера, из статического метода сделать closure? Статический метод — это уже не эквивалент лямбды и примера со стрелкой.
Проблемы, решаемые данным подходом, показаны в начале статьи: явное описание dataflow в приложении. Если Ваc смущает, что простые математические функции можно вызвать проще, то можно написать более абстрактный пример:
Тут f1, f2, arr2, f2 — какие-то существующие длинные функции, как это обычно и бывает. В безточечной записи с обычными вызовами это будет выглядеть примерно так (описание интерфейса лямбды опустим):
Function someLambda = (A instA, B instB) -> {
return f3(arr2(f1(instA)), arr2(f2(instB)));
}
someLambda.apply(instA, instB);
Для простых функций оно выглядит почти одинаково, но что, если мы захотим использовать монады или сделать параллельный combine, например? Со стрелкой мы просто используем ParallelAction вместо Action, а вот лямбду придётся переписывать с futures со всеми вытекающими.
Блок — это sin_cos (который определён как Action.of(Math::sin).combine(Math::cos)), который можно применять к паре значений.
В вашем примере sumSinCos — не лямбда, так что он уже не совсем эквивалентен: нужно ещё описать класс-обёртку. В итоге количество строк такое же.
Например верификация пользователя. По-сути, любой процесс, который можно описать блок-схемой, хорошо ложится на эту модель, математические примеры приведены просто чтобы не писать много кода для описания реальных объектов.
В своей области LabVIEW хорош, но в мейнстримовом прикладном программировании графический подход почему-то не получил распространения. А к области Java LabVIEW совсем слабо применим.
В прошлых опросах лидировала винда — не понимаю, откуда столько эмоций.
Что думаете о Swift?
Как показывает практика "свободному" ПО зачастую всё равно нужна корпоративная поддержка.
Ну как сказать — оккупировали… Вот по данным Stackoverflow Mac OS X и Linux уже практически опережают Windows.
И какой объём занимало ТЗ на ИТ-системы Freddie Mac и Fannie Mae?
В частности для обхода графа есть, к примеру, алгоритм Дейкстры.
Зато придётся описывать интерфейс, если там будет больше аргументов. Что мы пишем
BiFunction
, чтоArrow
— какой-то существенной разницы в объёме написанного не видно, честно говоря. Разве что более многословно описывается последовательность вызова функций, но и возможностей больше.Работа с монадами в
jArrows
пока не реализована из коробки, в статье по ссылкам это называется Kleisli Arrow. С такой стрелкой можно делать композицию функций, которые возвращают монады.А как, отвлекаясь от простых математических функций из примера, из статического метода сделать closure? Статический метод — это уже не эквивалент лямбды и примера со стрелкой.
Проблемы, решаемые данным подходом, показаны в начале статьи: явное описание dataflow в приложении. Если Ваc смущает, что простые математические функции можно вызвать проще, то можно написать более абстрактный пример:
Тут
f1, f2, arr2, f2
— какие-то существующие длинные функции, как это обычно и бывает. В безточечной записи с обычными вызовами это будет выглядеть примерно так (описание интерфейса лямбды опустим):Для простых функций оно выглядит почти одинаково, но что, если мы захотим использовать монады или сделать параллельный
combine
, например? Со стрелкой мы просто используем ParallelAction вместо Action, а вот лямбду придётся переписывать с futures со всеми вытекающими.Блок — это
sin_cos
(который определён какAction.of(Math::sin).combine(Math::cos)
), который можно применять к паре значений.В вашем примере
sumSinCos
— не лямбда, так что он уже не совсем эквивалентен: нужно ещё описать класс-обёртку. В итоге количество строк такое же.Не всегда получается свободно выбирать язык, всё-же Java значительно шире распространён.
Кстати решил переписать один из математических примеров в обычном стиле:
Не сказал бы, что он в 10 раз короче, тем более тут мы лишились возможности повторного использования блоков.