Важное примечание: переход переводится в новое репо
Это репо устарело
Пожалуйста, для последней версии, перейдите к:
https://github.com/transient-haskell/transient-stack
Существуют все пакеты Haskell, включая распределенные вычисления (Transiet-Universe) и клиентская сеть (Axiom)

ПРИМЕЧАНИЕ. Распределенные вычислительные и веб-примитивы находятся в переходной универсальной и аксиоме. Некоторые примеры на переходных перерывах
transient :Rahul Muttineni @rahulmutt Nov. 09 2016 03:40 Ведущий разработчик ETA (компилятор JVM Haskell)
Это немного склоняется в том, что это похоже на использование списка более высокого уровня Monad, но это очень, очень круто. Для начинающих хакеллеров, что было бы действительно полезно, так это визуализация того, что происходит, когда вы делаете различные распределенные/параллельные вещи. Почти шокирует, насколько легко вы можете запускать вычисления по потокам/узлам.
Прохладная часть - это композиция в распределенной настройке. Вы можете выполнять монадические функции более высокого порядка, которые позволяют вам составлять и повторно использовать длинную цепь распределенных транзакций с помощью wormhole и teleport . Другое преимущество заключается в том, что транзакция становится первым классом, и вы можете точно увидеть, что происходит в одном месте, вместо того, чтобы распространять логику среди актеров, делающих код, эквивалентный обратным вызовам события, как вы заявили.
https://gitter.im/transient-transient-universe-hplay/lobby?at=58228caa35e6cf054773303b
Одной из мечтаний о разработке программного обеспечения является неограниченная композиция.
Это может быть помещено в эти термины:
Пусть ap1 и ap2 Два приложения с произвольной сложностью, со всеми эффектами, включая множественные потоки, асинхронные ввода -вывода, индетерминизм, события и, возможно, распределенные вычисления.
Затем комбинации:
- ap1 <|> ap2 -- Alternative expression
- ap1 >>= x -> ap2 -- monadic sequence
- ap1 <> ap2 -- monoidal expression
- (,) <$> ap1 <*> ap2 -- Applicative expression
Возможно, если типы совпадают, и генерируют новые приложения, которые также являются композиционными.
Временный делает именно это.
Операторы <$> <*> и <> Экспресс -параллелизм, оператор <|> Экспресс параллелизм и >>= для секвенирования потоков, распределенных процессов или веб -виджетов. Таким образом, даже в присутствии этих эффектов и других, все композитно.
Для этой цели Transient является расширяющимся эффектом MONAD со всеми основными эффектами и примитивами для параллелизма, событий, асинхронного ввода-вывода, раннего прекращения, нетерминизма регистрации и распределенных вычислений. Поскольку возможно расширить его с большим количеством эффектов, не добавляя трансформаторы MONAD, композиция гарантирована.
Эта программа будет транслировать «Hello World» из N узлов, если вы войдете в «Огонь» в консоли
main = keep $ initNode $ inputNodes <|> distribStream
distribStream = do
local $ option " fire " " fire "
r <- clustered . local . choose $ repeat " hello world "
localIO $ print rПрочитайте учебник, чтобы узнать, как скомпилировать и вызвать его.
Эта программа представит ссылку в браузере и транслирует номера Fibonnacci в браузер, когда вы нажимаете по нему. (Если у вас есть Docker, вы можете запустить его от консоли; см. Это
main = keep . initNode $ webFib
webFib = onBrowser $ do
local . render $ wlink () (h1 " hello fibonacci numbers " )
r <- atRemote $ do
r <- local . threads 1 . choose $ take 10 fibs
localIO $ print r
localIO $ threadDelay 1000000
return r
local . render . rawHtml $ (h2 r)
where
fibs = 0 : 1 : zipWith (+) fibs ( tail fibs) :: [ Int ]Эта программа объединяет обе функции:
main = keep . initNode $ inputNodes <|> webFib <|> distribStreamВики более ориентирована на пользователя
Мои видео -сессии в livecoding.tv не предназначены в качестве учебных пособий или презентаций, но показывают некоторые из последних функций.
Статьи более технические:
Эти статьи содержат исполняемые примеры (не сейчас, поскольку сайт больше не поддерживает выполнение фрагментов Haskell).
Как только композиция в большой степени возможно, существует бесконечное количество идей, которые могут быть реализованы. Есть краткосрочные и долгосрочные цели. Статус разработки регулярно публикуется в.
Среди самых сумасшедших - возможность расширить эту структуру на другие языки и сделать их совместимыми. Обработка целых упакованных приложений как компонентов и стыковки их как кусочки LEGO в новом уровне операционной системы, где оболочка обеспечивает такой тип безопасной стыковки. Этот композиционный Docker обеспечивает все виды композиции, в то время как текущая платформа Docker является просто формой разлагаемого моноида, который не вычисляет.
Хотите внести свой вклад? Убедитесь, что вы прочитали наши руководящие принципы участника. Мы хотели бы услышать от вас и ваших идей, связаться с другими участниками через:
Страница проблем для переходного процесса
Страница проблем для переходной универсации
Страница проблем для аксиомы
Как только вы узнаете что -то интересное, вы можете внести свой вклад в вики
Вы также можете пожертвовать ведущему разработчику, чтобы сделать возможным посвящение большего времени для полного обеспечения потенциальных преимуществ истинной композиции программного обеспечения по всему стеку.