On Thu, Jun 13, 2013 at 4:35 PM, Diogo Resende <[email protected]>wrote:

> +1 for all your work. It's always good to have people thinking about new
> ways of developing and improving code. Even if it's not widely adopted,
> it's good to have different paths to choose :)
>
>
Thanks Diogo.  And in case it wasn't clear, I'm not trying to change how
node core APIs work.  I'm creating a new set of idioms that work on several
runtimes, of which node is just one.  Since I'm a long-time node.js
contributor, care has been taken to make sure these new APIs work well with
existing node.js code.



> --
> Diogo Resende
>
> On Thursday, June 13, 2013 at 20:54 , Tim Caswell wrote:
>
> As some of you know, and many of you do not, I've been spending the last
> few months working on implementing git in javascript.
>
> I started out with a small, but successful [kickstarter] that enabled me
> to quit my day job and work full time on JS-Git.  Since then I've worked
> with others like Chris Dickinson on the project.  At this time, there is a
> node CLI tool in npm called "js-git-node" (I'll probably rename to just
> "js-git" or "js-git-cli") that supports full clone.  I also have a chrome
> app that shows one way the code can run in a non-node'js environment with
> minimal changes.
>
> The goal of the project is to give git to all JavaScript environments as a
> set of modular packages.  I will target chrome apps, websites, node client
> and servers, and anything else that makes sense.
>
> While working on this project, I've developed many new interfaces for
> things like streams and callbacks.  I didn't want to port the node APIs
> directly to other platforms and instead took this opportunity to redesign
> from scratch what I would have done for node in hindsight.
>
> I'm now at the point where I'm very happy with the resulting API
> primitives.
>
> The new stream interface is called [min-stream] because is the minimal API
> surface for streams (data or objects) with backpressure and protocol
> filters.  It's a lot simpler than node streams and can interop with node
> streams using the [min-stream-node] library.
>
> The stream interface is designed in such a way that creating a stream is
> nothing more than creating a function with a certain behavior and
> signature.  Piping a stream source to a stream sink is just a normal
> function call.  There is no need for an 82 line [pipe] function to connect
> min-streams.
>
>     // The body of a TCP echo server in min-streams is simple
>     socket.sink(socket.source);
>
> Another primitive that replaces callback-last-style in node is called
> [continuables].  It's much closer to node callbacks than promises (in fact
> all it takes to convert a node style function to a continuable is to use
> bind to partially apply the non-callback arguments).
>
> To convert setTimeout to continuable format is simply:
>
>     function sleep(ms) {
>       return function (callback) {
>         setTimeout(callback, ms);
>       };
>     }
>
> Also of interest is integrating generators into continuables.  The next
> v0.11.3 release of node should finally have full support for ES6 generators
> (behind a flag for now) and chrome dev channel already has it (also behind
> a flag).  By using a tiny 40 line helper library, it's trivial to write
> sync style code that consumes native callback or continuable code with no
> build step as I've done in the [gen-run] library.
>
> Then using the sleep function above is as simple as:
>
>     function* () {
>       console.log("Waiting 1 second");
>       yield sleep(1000);
>       console.log("Done waiting")
>     }
>
> I'm still working on js-git and am starting to make progress much faster
> now that I've decided what APIs I want to build from and implemented most
> the primitives.  Any of these sub-projects can be used standalone and
> probably deserve their own announcement mail, but I'd rather not spam the
> list with every project I release.  Follow me on twitter @creationix if you
> want that level of traffic.
>
> I do need your help.  In order to finish [js-git] in a timely manner, I
> need to continue working on it full-time.  If you find this project
> worthwhile and/or need it in your project, please show support by backing
> the fundraiser on [bountysource]. (or better, getting your employer to
> sponsor)
>
> There are so many awesome project ideas that have git in javascript as a
> dependency.  I'm running out of money from the kickstarter (it's been
> months) and will have to stop working on js-git and get a new job if I
> don't get more funds soon.
>
> This is an experiment to see if a person can live off making 100% open
> source software that doesn't cater to any particular business.
>
> All software I've released in the open and is licensed MIT for anyone to
> use.  I have open discussion on IRC (#js-git) and twitter and the jsgit
> google group every day looking for community feedback on the APIs.
>
> Let me know what you think.
>
> -Tim Caswell
>
> [bountysource]: https://www.bountysource.com/#fundraisers/325-js-git
> [js-git]: https://github.com/creationix/js-git
> [kickstarter]: http://www.kickstarter.com/projects/creationix/js-git
> [js-git-node]: https://github.com/creationix/js-git-node
> [min-stream]:
> https://github.com/creationix/js-git/blob/master/specs/min-stream.md
> [min-stream-node]: https://github.com/creationix/min-stream-node
> [continuable]:
> https://github.com/creationix/js-git/blob/master/specs/continuable.md
> [gen-run]: https://github.com/creationix/gen-run
>
> [pipe]: https://github.com/joyent/node/blob/master/lib/stream.js#L46-L127
>
> --
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nodejs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>
>
>  --
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nodejs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to