npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

burette

v1.2.0

Published

Chemical programming framework based on Banatre's gamma-calculus.

Downloads

12

Readme

Burette

Chemical programming framework based on Banâtre's Gamma

Please see API.md for the documentation of Burette.

Explanation of the examples can be found in examples.md.

Features

  • Composable: Solutions can be combined in an arbitrary way, producing parallel and serial execution flow.
  • Parallel execution: Reagents can operate on the elements of a solution in a parallel manner.
  • Non-deterministic execution: The arguments of a Reagent are selected in an arbitrary order.
  • Functional-first: Program execution equals to a number of multiset transformations realized by pure Reagents.

Only four (or three and a half) core concepts to understand:

  • Solution: A multiset of elements (molecules) that provides an environment for reactions.
  • Reagent: Takes some elements out of the enclosing solution and produces new ones (or nothing).
  • Tropes: A collection of the most used Reagent patterns.
  • Catalyst: A simple way to perform side-effects while preserving the purity of Reagents.

Example

This simple example calculates the majority element:

const Burette = require('burette');
const Solution = Burette.Solution;
const Tropes = Burette.Tropes;

const majority = Tropes.Selector((x, y) => x !== y);

const keepOne = Tropes.Reducer((x, y) => y);

Solution.seq([1, 2, 3, 4, 5, 5, majority], keepOne, [])
  .react()
  .then(s => console.log(s.multiset));

// Output: [ 5 ]

Theory

What does chemical programming mean?

Chemical programming (CP) is not about chemistry-related computations. Instead CP takes advantage of the chemical reaction model to establish a new programming paradigm and express computations.

Gamma is a formalism proposed by Jean-Pierre Banâtre in 1986, that kickstarted the CP scene. The most important structure in Gamma is the multiset. In a multiset elements does not have to be unique as opposed to the traditional mathematical set. Molecules in this multiset can interact freely and this interaction corresponds to execution. Of course two numbers can hardly interact in any way. But we have reactions, that can take elements from the multiset and emit new elements (or even nothing, for example in the case of an annihilator).

A reactions consists of a reaction condition and an action. If an element satisfies the condition then it's taken out of the multiset and replaced by the results of the action. Multiple parallel reactions can be carried out because no element can be used by two reactions.

For more information on Gamma please read the following article:

Gamma and the Chemical Reaction Model: Fifteen Years After

How does Burette correspond to Gamma?

The aim of Burette is to provide a framework that can be used in production and to enable developers to experience the CP paradigm. Therefore some aspects of Gamma may be altered or even left out if needed. But the core principle remains the same.

I hope that Burette can raise some awareness towards the fascinating world of chemical programming!