Weekly Work Log #11

The weekly work log posts report about my activities during the previous week(s).

New developments

  • tractor - Actor framework for Rust modelled after Pony’s actors: After having used several of the other Actor frameworks for Rust (e.g. xtra, xactor or Acteur), I started writing my own. Actors in tractor cannot deadlock as they do not support any blocking operations. Furthermore, sending a message to an actor can never fail in tractor, as holding a reference to an actor will prevent that actor from being stopped. Actors will terminate once no more references exist and it’s mailbox is empty. It also ships with a nice #[actor] proc_macro, actually my first proc_macro ever. This allows you to write very concise code and let the macro generate all the boilerplate code for you.

Pull requests (PR)

  • Ponyc #3707: Fix calculation of # CPU cores on FreeBSD/DragonFly. Pony uses the number of CPU cores (and not number of logical CPUs which include hyperthreads) to size the number of scheduler threads. On my i7-8565U, which is a 4-core, 2-way HT processor, Pony was using 8 scheduler threads instead of just 4. The benchmarks I was running at that time showed very significant increase of latency when using 8 scheduler threads vs just 4. (PR merged)

  • async-jsonrpc-client #12: This PR adds support for async-std via surf. (PR merged)

  • rumqtt #239 and rumqtt #240: rumqtt is a MQTT library for Rust. The first PR fixes some panics and improves performance and memory consumption. The second PR allows to retrieve the pkid (paket id) that rumqttc internally generates when a message is published. This is useful to correlate a message with it’s pkid and enables a client to know when a certain message has been acknowledged by the broker (QoS=1 or QoS=2). (PR pending)


Reported Bugs/Issues

  • Ponyc #3708: Report that ponyc fails to compile on FreeBSD 12.2.