All Projects → transient-haskell → Transient

transient-haskell / Transient

Licence: mit
A full stack, reactive architecture for general purpose programming. Algebraic and monadically composable primitives for concurrency, parallelism, event handling, transactions, multithreading, Web, and distributed computing with complete de-inversion of control (No callbacks, no blocking, pure state)

Programming Languages

haskell
3896 projects

Projects that are alternatives of or similar to Transient

Threadly
A library of tools to assist with safe concurrent java development. Providing unique priority based thread pools, and ways to distrbute threaded work safely.
Stars: ✭ 196 (-68.23%)
Mutual labels:  concurrency, threading
tutorial
Tutorials to help you build your first Swim app
Stars: ✭ 27 (-95.62%)
Mutual labels:  events, distributed-computing
simpledbm
SimpleDBM is an Open Source Multi-Threaded Embeddable Transactional Database Engine in Java.
Stars: ✭ 51 (-91.73%)
Mutual labels:  concurrency, transaction
Agency
Execution primitives for C++
Stars: ✭ 127 (-79.42%)
Mutual labels:  concurrency, threading
react-compose-events
A Higher-Order Component factory to attach outside event listeners
Stars: ✭ 25 (-95.95%)
Mutual labels:  events, composition
Floyd
The Floyd programming language
Stars: ✭ 133 (-78.44%)
Mutual labels:  concurrency, threading
thread-pool
BS::thread_pool: a fast, lightweight, and easy-to-use C++17 thread pool library
Stars: ✭ 1,043 (+69.04%)
Mutual labels:  concurrency, threading
python-json-socket
JSON messaging based socket interface with multi-threaded server and client
Stars: ✭ 52 (-91.57%)
Mutual labels:  distributed-computing, threading
concurrent-resource
A header-only C++ library that allows easily creating thread-safe, concurrency friendly resources.
Stars: ✭ 17 (-97.24%)
Mutual labels:  concurrency, threading
think-async
🌿 Exploring cooperative concurrency primitives in Python
Stars: ✭ 178 (-71.15%)
Mutual labels:  concurrency, threading
Java Interview
At the beginning, it was the repository with questions from Java interviews. Currently, it's more like knowledge base with useful links.
Stars: ✭ 114 (-81.52%)
Mutual labels:  concurrency, transaction
psched
Priority-based Task Scheduling for Modern C++
Stars: ✭ 59 (-90.44%)
Mutual labels:  concurrency, threading
Tupl
The Unnamed Persistence Library
Stars: ✭ 83 (-86.55%)
Mutual labels:  concurrency, transaction
Pht
A new threading extension for PHP
Stars: ✭ 175 (-71.64%)
Mutual labels:  concurrency, threading
Jdonframework
Domain-Driven-Design Pub/Sub Domain-Events framework
Stars: ✭ 978 (+58.51%)
Mutual labels:  concurrency, transaction
thread-pool
A modern thread pool implementation based on C++20
Stars: ✭ 104 (-83.14%)
Mutual labels:  concurrency, threading
soabase-stages
A tiny library that makes staged/pipelined CompletableFutures much easier to create and manage
Stars: ✭ 23 (-96.27%)
Mutual labels:  concurrency, threading
Concurrencpp
Modern concurrency for C++. Tasks, executors, timers and C++20 coroutines to rule them all
Stars: ✭ 340 (-44.89%)
Mutual labels:  concurrency, threading
React Native Threads
Create new JS processes for CPU intensive work
Stars: ✭ 527 (-14.59%)
Mutual labels:  concurrency
Concurrent Programming
🌵《实战java高并发程序设计》源码整理
Stars: ✭ 562 (-8.91%)
Mutual labels:  concurrency

IMPORTANT NOTE: Transient is being translated to a new repo

THIS REPO IS DEPRECATED

Please, for the last version, go to:

https://github.com/transient-haskell/transient-stack

There is all the haskell packages, including distributed computing (transient-universe) and client-side web (axiom)

Transient logo

Hackage Stackage LTS Stackage Nightly Build Status Gitter

Simple Haskell Donate

NOTE: distributed computing and web primitives Are in transient-universe and axiom. Some examples at transient-examples

Some feedback on transient:

  1. Rahul Muttineni @rahulmutt nov. 09 2016 03:40 Lead developper of ETA (the JVM Haskell compiler)

    It's a bit mind bending in that it's like using a higher-level list monad, but it's very, very cool. For beginning Haskellers, what would be really useful is a visualisation of what happens when you do various distributed/parallel stuff. It's almost shocking how effortlessly you can run computations across threads/nodes.

    The cool part is the composability in the distributed setting. You can make higher-order monadic functions that allow you to compose & reuse a long chain of distributed transactions via wormhole and teleport. Another benefit is that the transaction becomes first class and you can see exactly what's going on in one place instead of distributing the logic across actors making the code equivalent to event callbacks, as you've stated.

https://gitter.im/Transient-Transient-Universe-HPlay/Lobby?at=58228caa35e6cf054773303b

What is Transient?

One of the dreams of software engineering is unrestricted composability.

This may be put in these terms:

let ap1 and ap2 two applications with arbitrary complexity, with all effects including multiple threads, asynchronous IO, indeterminism, events and perhaps, distributed computing.

Then the combinations:

 - ap1 <|> ap2          -- Alternative expression
 - ap1 >>= \x -> ap2    -- monadic sequence
 - ap1 <> ap2           -- monoidal expression
 - (,) <$> ap1 <*> ap2  -- Applicative expression

are possible if the types match, and generate new applications that are composable as well.

Transient does exactly that.

The operators <$> <*> and <> express concurrency, the operator <|> express parallelism and >>= for sequencing of threads, distributed processes or web widgets. So even in the presence of these effects and others, everything is composable.

For this purpose transient is an extensible effects monad with all major effects and primitives for parallelism, events, asynchronous IO, early termination, non-determinism logging and distributed computing. Since it is possible to extend it with more effects without adding monad transformers, the composability is assured.

Motivating example

This program, will stream "hello world" from N nodes if you enter "fire" in the console

main= keep $ initNode $ inputNodes <|> distribStream

distribStream= do
      local $ option "fire" "fire"
      r <- clustered . local . choose $ repeat "hello world"
      localIO $ print r

Read the tutorial to know how to compile and invoke it.

This program will present a link in the browser and stream fibonnacci numbers to the browser when yo click it. (if you have Docker, you can run it straigh from the console; See this

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]

This program combines both functionalities:

main= keep . initNode $ inputNodes <|> webFib <|> distribStream

Documentation

The Wiki is more user oriented

My video sessions in livecoding.tv not intended as tutorials or presentations, but show some of the latest features running.

The articles are more technical:

These articles contain executable examples (not now, since the site no longer support the execution of haskell snippets).

Plans

Once composability in the large is possible, there are a infinite quantity of ideas that may be realized. There are short term and long term goals. An status of development is regularly published in Gitter.

Among the most crazy ones is the possibility of extending this framework to other languages and make them interoperable. treating whole packaged applications as components, and docking them as lego pieces in a new layer of the Operating system where the shell allows such kind of type safe docking. this composable docker allows all kinds of composability, while the current docker platform is just a form of degraded monoid that do not compute.

Contribute:

Wanna contribute? Make sure that you've read our contributor guidelines. We'd like to hear from you and your ideas, get in touch with other contributors through:

Once you learn something interesting, you can contribute to the wiki

You can also donate to the lead developer in order to make possible the dedication of more time to fullfil the potential advantages of true software composability across the whole stack.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].