Some of the most significant differences include:
* Idris does not have a syntactic phase distinction.
In ATS, you can see clearly which arguments and values are required at
runtime, and which only exist for the sake of the type, because
irrelevant functions are declared with 'prfun', irrelevant types are
declared with dataprop or dataviewprop etc. In Idris, there are just
functions and datatypes, although functions used in types/proofs need
to be total. The Idris compiler performs a global usage analysis to
determine the things that need to be kept around for the program to
execute. You can declare that you expect certain arguments to be
irrelevant, and the compiler can tell you when that turns out not to
be true.
https://github.com/idris-lang/Idris-dev/wiki/Erasure-by-usage-analysis
* Idris does not have linear types or unboxed types.
Instead, the emphasis is on using embedded DSLs to ensure resources
are reclaimed. (I don't think these are equivalent, but I haven't
come up with a counter-example.) Oh, and there are no seperate types
for closures (as opposed to C-style procedures) in Idris.
* Idris is purely functional.
The real magic of ATS is the fact that, semantically, it's C; so it
lets you prove things about your imperitive programs! Idris has a
package for using and implementing simple algebraic effects, and it's
applicative (not-lazy) by default, so it's not /so/ functionally
opinionated, but I find this to be the biggest draw point for ATS.
* Idris is much cleaner syntactically.
I don't think I need to say much here. Idris looks like Haskell, it's
clear that a lot of thought went into it having a sensible and
consistent syntax.
* Typeclasses and templates.
Idris has a typeclass system. My current understanding of it suggests
that it's slightly more flexible than that of Haskell, because classes
only need to be consistent on any lexical context that tries to infer
them. ATS instead supports function templates, which are something
like C++ templates.
* Performance?
ATS runs /fast/. IIUC there is still plenty of low hanging fruit in
the Idris compiler, but there's really no comparison yet.
The other thing is that I found learning ATS difficult. After reading
the tutorial for a language named Agda, and watching Edwin's video
lectures on Idris, ATS made much more sense to me. I really prefer to
write Idris, I think, although there are still some places I'd rather
use ATS.
--
William Leslie
Notice:
Likely much of this email is, by the nature of copyright, covered
under copyright law. You absolutely MAY reproduce any part of it in
accordance with the copyright law of the nation you are reading this
in. Any attempt to DENY YOU THOSE RIGHTS would be illegal without
prior contractual agreement.