ProductPromotion
Logo

Elixir

made by https://0x3d.site

GitHub - costaraphael/cspex: A library that brings all the CSP joy to the Elixir land.
A library that brings all the CSP joy to the Elixir land. - costaraphael/cspex
Visit Site

GitHub - costaraphael/cspex: A library that brings all the CSP joy to the Elixir land.

GitHub - costaraphael/cspex: A library that brings all the CSP joy to the Elixir land.

CSPEx

Hex.pm Hex.pm

A library that brings all the CSP joy to the Elixir land.

The aim of this library is to make it simple to work with CSP channels alongside Elixir actors and supervision trees, so that we can have another tool in our pockets, choosing it where it fits best.

Highly inspired on Go channels and Clojure core.async library.

Suggestions and pull requests are more than welcome.

Examples

You can simply create a channel and pass it to other processes:

channel = Channel.new

pid = spawn_link fn ->
  # This line will block until the data is read
  Channel.put(channel, :some)
  Channel.put(channel, :data)
end

Process.alive?(pid) #=> true

Channel.get(channel) #=> :some
Process.alive?(pid) #=> true

Channel.get(channel) #=> :data
Process.alive?(pid) #=> false

Or you can use a channel as part of a supervision tree:

import Supervisor.Spec

children = [
  worker(Channel, [[name: MyApp.Channel]])
]

{:ok, pid} = Supervisor.start_link(children, strategy: :one_for_one)

spawn_link fn ->
  # This line will block until some data is written to the channel
  data = Channel.get(MyApp.Channel)

  IO.puts "I read #{inspect data} from the channel."
end

Channel.put(MyApp.Channel, :data)

In any of the cases you can use a channel like any Enumerable or Colectable:

# Wraps the process name into a channel struct
# Works with PIDs too
my_channel = Channel.wrap(MyApp.Channel)

spawn_link fn ->
  # Blocks until all the values can be written
  Enum.into(1..10, my_channel)
end

# The buffer size means how many values I can put in a channel until it
# starts blocking.
other_channel = Channel.new(buffer_size: 10)

# The code bellow will block until the channel "my_channel" is closed.
for x <- my_channel, into: other_channel do
  x * 2
end

Installing

Add the dependency to the mix.exs file:

deps: [{:cspex, "~> x.x.x"}, ...]

Add the following snippet to anywhere you want to use it:

use CSP

Be happy!

Documentation

Online documentation is available here.

License

The CSPEx source code is licensed under the MIT License

Articles
to learn more about the elixir concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about Elixir.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory