{"id":298,"date":"2013-03-18T19:08:01","date_gmt":"2013-03-18T19:08:01","guid":{"rendered":"http:\/\/bryants.eu\/blog\/?p=298"},"modified":"2013-03-18T19:08:01","modified_gmt":"2013-03-18T19:08:01","slug":"plinth-status-update","status":"publish","type":"post","link":"https:\/\/bryants.eu\/blog\/2013\/03\/plinth-status-update\/","title":{"rendered":"Plinth Status Update"},"content":{"rendered":"<p>This week, I thought I&#8217;d give an update on which parts of Plinth are finished and what still needs doing.<\/p>\n<p>Last Tuesday, I finished implementing properties. They work as described in the last few blog posts, with a few extra considerations for initialising inherited properties.\u00a0Since then, I have been fixing various small omissions and other problems, such as an edge case in inheritance checking, and making sure value-typed variables do not alias each other.<\/p>\n<p>I have also added support for &#8220;<code>super.foo<\/code>&#8221; to access fields and methods on a super-class\/interface. For methods, this results in a non-virtual method call.<\/p>\n<p>There are several major things which still need implementing:<\/p>\n<ul>\n<li>Generics<\/li>\n<li>Enums<\/li>\n<li>Default and Variadic Arguments<\/li>\n<li>For-each loops<\/li>\n<li>Closures<\/li>\n<li>Access Specifiers (public, protected, package, and private)<\/li>\n<li>Standard Library<\/li>\n<li>Garbage Collector<\/li>\n<\/ul>\n<p>The next thing I will be working on is Generics, which will support using any type as a type argument, including things like primitives and functions. Generic types will not be erased at run-time; instead, run-time-type-information pointers will be passed into functions and stored inside objects, so that the type can still be used at run-time.<\/p>\n<p>After Generics, the biggest barriers to the language being useful are the standard library and the garbage collector. The standard library includes (at a minimum) various data structures and APIs for using files and network sockets, which should not be too difficult to implement.\u00a0On the other hand, the garbage collector is a difficult problem to solve efficiently in theory, especially in concurrent scenarios, so I am expecting it to take quite a while.<\/p>\n<p>While these features are being implemented, I am writing documentation for the language, including a language specification. It is very much a work-in-progress, but it is located here:\u00a0<a href=\"http:\/\/bryants.eu\/plinth\/\">http:\/\/bryants.eu\/plinth\/<\/a><\/p>\n<p>If you want to try out the language, some of the commits over the last week have made it much easier. There&#8217;s now an <a href=\"https:\/\/github.com\/abryant\/Plinth\/blob\/master\/build.xml\">ant build script<\/a> which will compile the compiler, runtime, and standard library. There&#8217;s also a <a href=\"https:\/\/github.com\/abryant\/Plinth\/blob\/master\/plinth\">bash script<\/a> which greatly simplifies running the compiler. Everything you need to know should be in the readme on <a href=\"https:\/\/github.com\/abryant\/Plinth\">GitHub<\/a>, but if there&#8217;s anything else you&#8217;d like to know, please ask.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week, I thought I&#8217;d give an update on which parts of Plinth are finished and what still needs doing. Last Tuesday, I finished implementing properties. They work as described in the last few blog posts, with a few extra considerations for initialising inherited properties.\u00a0Since then, I have been fixing various small omissions and other [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/posts\/298"}],"collection":[{"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/comments?post=298"}],"version-history":[{"count":6,"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/posts\/298\/revisions"}],"predecessor-version":[{"id":305,"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/posts\/298\/revisions\/305"}],"wp:attachment":[{"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/media?parent=298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/categories?post=298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bryants.eu\/blog\/wp-json\/wp\/v2\/tags?post=298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}