Carp, a compiled Lisp with type inference and a borrow checker
The borrow checker is <i>the</i> reason to use Rust, in spite of its annoyances (clunky syntax, limited type inference, non-interactive programming, long compilation times, etc.), so it's always nice to see someone trying to provide the upsides of Rust without the downsides.<p>That being said, your website is disappointingly terse regarding how Carp recovers the advantages of Rust in the context of a Lisp derivative. What makes this particularly suspicious is the fact that, in the past, Lisp programmers have claimed to recover the advantages of other statically typed languages in a Lisp setting, but there have always been huge caveats, like “the system can be very easily circumvented, reducing the benefits of static typing to nothing”.<p>The main reason why I feel confident that Rust is a safe language isn't just the fact that rustc seems to catch many bugs in practice. That alone wouldn't distinguish it from the countless static analysis tools for C and C++ that have existed for decades. The main reason why, at least in my opinion, Rust is such a trustworthy language in spite of its ginormous complexity, is the fact that its core developers, in particular Niko Matsakis, do a terrific job of communicating the process by which Rust's features are conceived and designed. When you read Matsakis' blog [0], it becomes patently clear that Rust's developers take into account the kind of corner cases that in many other languages are only discovered months or years after the feature has been implemented [1][2].<p>Other languages that inspire similar confidence in me are:<p>(0) Standard ML. It has a formal proof of type safety.<p>(1) Pony. It has a formal proof of type safety.<p>(2) Haskell, <i>as specified in the Haskell Report</i> (i.e., without the crazy GHC-specific language extensions), because its type system is similar to Standard ML's, and there are no reasons to believe the differences introduce any type safety holes.<p>(3) OCaml, <i>again without the crazy extensions</i> (GADTs, first-class modules, etc.), for more or less the same reasons as Haskell.<p>Links:<p>[0] <a href="http://smallcultfollowing.com/babysteps/" rel="nofollow">http://smallcultfollowing.com/babysteps/</a><p>[1] <a href="http://joyoftypes.blogspot.pe/2012/08/generalizednewtypederiving-is.html" rel="nofollow">http://joyoftypes.blogspot.pe/2012/08/generalizednewtypederi...</a><p>[2] <a href="http://io.livecode.ch/learn/namin/unsound" rel="nofollow">http://io.livecode.ch/learn/namin/unsound</a>