1,148 karma · joined October 5, 2010
[ my public key: https://keybase.io/erickt; my proof: https://keybase.io/erickt/sigs/WDhGSPcuMruumbNA5rWKGXcp2m-lOiX4n5YE6-goGMA ]
http://www.meetup.com/Rust-Bay-Area/events/143439552/
If I recall correctly, Skylight hooks into the ruby interpreter to do real time performance monitoring for Rails apps. They felt they couldn't get the performance they needed out of pure ruby, and felt that writing their hooks in Rust would be safer than in C. You can see Yehuda's presentation here. It's about an hour and 10 minutes in:
https://air.mozilla.org/sprocketnes-practical-systems-progra...
https://mail.mozilla.org/pipermail/rust-dev/2014-February/00...
http://www.freelists.org/post/nanomsg/0MQ-compatibility-libr...
That said, rust has been written in rust, and every commit is tested against our test suite on Linux, OS X, BSD, and Windows. So while the language itself may be changing, any code you write in it at a given point in time should work. It'll just take some (small) effort to keep that code in sync with the compiler.
So if you are able to handle that risk, we'd love to have you try it out. It'd really help us find the warts in the language/stdlib before we lock in 1.0.
Modes were supposed to give hints to the compiler whether or not to implicitly copy or move a value into a function, but it was buggy and confusing. So we replaced it with always moving for unique types, and always copying for reference counted types.
http://smallcultfollowing.com/babysteps/blog/2013/04/02/asso...
edit: Ho ho ho, I can't count. And we don't really have a 5-character-max criteria, but we do prefer shorter keywords.
https://issues.apache.org/jira/browse/LUCENE-1606
The elasticsearch folks were waiting for that before exposing regexes to the world.
It can be a pain, but it's really not that hard to handle if your build system provides a way to abstract out build patterns.
Of course, I'm completely biased :) I have my own build system called fbuild (http://github.com/erickt/fbuild) that's conceptually similar to fabricate/memoize. There's also mem (http://srp.github.com/mem/getting-started.html) and wonderbuild (http://retropaganda.info/~bohan/work/sf/psycle/branches/boha... -- although that link appears to be broken at the moment) if you're interested in some other projects that have similar roots.
I believe the key insight that we all independently made is that we can use the procedural execution stack for the dependency tree, and cache the function arguments and results to avoid work duplication. I believe this helps someone reason about what's going on in the build system compared to the declarative make systems because you can easily trace the inputs and outputs of some dependency.
Furthermore, you can do some pretty interesting things with this model if you push this idea. It's pretty simple to do integrated configuration and building. For instance in fbuild, I can do (fbuild uses python3 for it's host language):
import fbuild.builders.c
import fbuild.config.c.linux
def build(ctx):
# make a c compiler.
builder = fbuild.builders.c.guess_static(ctx)
# check if the system supports epoll
if fbuild.config.c.linux.sys_epoll_h(builder).header:
use_epoll = True
else:
use_epoll = False
builder.build_exe('foo', ['foo.c'],
defines=['USE_EPOLL' if use_epoll else 'USE_SELECT'])
I don't think many of the new build systems have looked into the configuration issue yet, which is a shame. I'd love to get some more ideas out there.http://felix-lang.org/tags/fbuild
That has some basic support for Java. I'm using Python3 for my dsl. Here's a dummy example of how to use it (from http://github.com/erickt/fbuild/tree/master/examples/java):
import fbuild.builders.java
def build(ctx):
java = fbuild.builders.java.Builder(ctx)
lib = java.build_lib('lib.jar', ['World.java'])
exe = java.build_lib('exe.jar', ['HelloWorld.java'], classpaths=[lib])
ctx.logger.log(' * running %s:' % exe)
java.run_class('HelloWorld', classpaths=[lib, exe])
I haven't had much demand for Java support, but it probably wouldn't be that difficult to extend it to download from a maven repository.