Traits seem to be working.
[Thread Prev] | [Thread Next]
- Subject: Traits seem to be working.
- From: Ori Bernstein <ori@xxxxxxxxxxxxxx>
- Date: Sat, 21 Feb 2015 10:28:51 -0800
- To: myrddin-dev@xxxxxxxxxxxxxx
Go me. I was too lazy to announce this when I got it working, but I realized last night that I should really send out a mail. As of a few weeks ago, I got traits working -- You can now define traits for types, and expect them to actually compile and run. Traits are close to concepts in C++, and similar to compile time only interfaces in certain other languages. An example would be: /* Define a hashable trait. This will allow any type that has an implementation of this trait to get hashed. */ trait hashable @a = hash : (val : @a -> uint32) ;; /* hashing implementation for integers */ impl hash int = hash = {val -> val * Bigprime } ;; /* hashing implementation for strings */ impl hash byte[:] = hash = {str var h = 1 for b in str h = 33 * h * (b castto(int32)) ;; } ;; /* use the hashing */ const main = { std.put("hash of 123: %i\n", hash(123)) std.put("hash of "abc": %i\n", hash("abc")) /* this will error out, saying there's no trait implemented */ /* std.put("hash of 'c': \n", hash('c')) */ } There are currently a few limitations on traits that I would like to lift. The biggest one is that currently, it only works on concrete types. You can't, for example, implement: impl hash @a::(numeric,integral) = ... ;; and get a hash implementation for every numeric type. This feature probably means that the API of some libraries could probably be adjusted.
Re: Traits seem to be working. | Ryan Gonzalez <rymg19@xxxxxxxxx> |
Re: Traits seem to be working. | Ryan Gonzalez <rymg19@xxxxxxxxx> |
- Prev by Date: Rudimentary testing in mbld: Done.
- Next by Date: Re: Traits seem to be working.
- Previous by thread: Re: Rudimentary testing in mbld: Done.
- Next by thread: Re: Traits seem to be working.
- Index(es):