Skip to content
Snippets Groups Projects
  1. Nov 07, 2019
  2. Aug 07, 2019
  3. May 26, 2019
  4. May 10, 2019
  5. Feb 19, 2019
  6. Sep 24, 2018
  7. Sep 22, 2018
  8. Aug 20, 2018
    • Yorick Peterse's avatar
      Add prefetching support for stable Rust · 843aa10b
      Yorick Peterse authored
      This replaces the VM dependency on std::intrinsics with a dependency on
      std::arch. The std::arch module provides the means to perform CPU
      prefetching, but without having to use Rust nightly.
      
      This means we can finally remove any traces of nightly-only features,
      including those used for parking_lot (which weren't very useful to begin
      with).
      
      All of this means you can now build the VM on stable Rust, while still
      being able to benefit from CPU prefetching.
      Unverified
      843aa10b
  9. Aug 02, 2018
  10. Aug 01, 2018
  11. Jul 31, 2018
  12. Jul 25, 2018
  13. Jul 23, 2018
  14. Jul 15, 2018
  15. Feb 10, 2018
    • Yorick Peterse's avatar
      Use "let mut" for mutable arguments · bb9d6d99
      Yorick Peterse authored
      Using "var" is a bit confusing because one might read it as "variable"
      opposed to something along the lines of "mutable variable". Using "let
      mut" makes it more clear that we're defining a mutable variable, it also
      ensures both definitions always start with the same keyword.
      Unverified
      bb9d6d99
  16. Nov 02, 2017
  17. Aug 06, 2017
  18. Jul 13, 2017
  19. Jul 05, 2017
  20. Jul 04, 2017
    • Yorick Peterse's avatar
      Embrace prototype OO and add more type info · 8f56cba6
      Yorick Peterse authored
      The compiler now embraces prototype OO more, removing any mentions to
      "classes", instead providing a simple "object" keyword. This keyword on
      the outside behaves the same, but the underlying code/behaviour is much
      more straightforward. For example, this:
      
          object Person {
            fn init(name: String) {
              let @name = name
            }
          }
      
      Is (roughly) compiled down to this:
      
          let Person = Object.new
      
          fn(self) {
            fn new(name: String) {
              let instance = prototype.new
      
              instance.init(name)
      
              instance
            }
      
            fn init(name: String) {
              let @name = name
            }
          }.call(Person)
      
      Here "Object.new" creates an empty object with its prototype set to
      "Object". In this setup there are no class methods, but I actually quite
      like this. Since you can define methods directly in a module there isn't
      really a good reason to support class methods.
      
      One big benefit of this approach is that bootstrapping is much simpler,
      and the compiler can more easily infer types. I personally also find it
      much easier to reason about objects when you have _just_ objects and
      methods, instead of also having classes and meta classes.
      
      With this also comes the decision to expose prototypes more to the
      language. For example, Object will respond to the "prototype" message
      instead of responding to some kind of "class" message.
      
      Finally, in this commit the compiler is also changed to mostly rely on
      message sending for defining core constructs. For example, when you
      define a trait like so:
      
          trait ToString {
            fn to_string -> String
          }
      
      It's (roughly) compiled down to:
      
          let ToString = Trait.new
      
          fn(self) {
            define_required_method('to_string')
          }.call(ToString)
      
      Knowledge such as the type signatures of the required methods or any
      type arguments will only be known to the compiler for the time being.
      Unverified
      8f56cba6
  21. Jun 15, 2017
  22. Mar 08, 2017
  23. Dec 25, 2016
    • Yorick Peterse's avatar
      Rename Aeon to Inko · ec852107
      Yorick Peterse authored
      Inko ("インコ") means parrot/parakeet in Japanese. In Inko communication
      happens via message passing, for both objects and processes. Naming the
      language after parrots/parakeets (a rather vocal type of bird, some
      known for mimicking human speech) makes more sense than naming it after
      the concept of eternity. Furthermore, naming the language after parrots
      allows the creation of a proper logo and mascot; something quite hard
      when your language is called "Aeon".
      Unverified
      ec852107
  24. Sep 22, 2016
  25. Sep 14, 2015
Loading