RSS Amplifier

Blog

Renato Athaydes Blog

Renato Athaydes' Personal Blog.

renato.athaydes.comSource feed ↗23 posts

Live Last read · last published · next check

Latest posts

Creating Lisp Systems

I like to fiddle with Common Lisp from time to time, but unfortunately I always run in trouble when trying to do some basic things, normally outside of the language itself: how do I build a binary, including on CI (build server pipelines)? how do I write and run tests? how to mock during tests? how to debug code with a line-by-line debugger? how to describe/document a project for publication?…

Zig comptime: does anything come close?

Zig’s comptime feature has been causing a little bit of a fuss on programmer discussion forums lately. It’s a very interesting feature because it is relatively simple to grasp but gives Zig code some super-powers which in other languages tend to require a lot of complexity to achieve. That’s in line with Zig’s stated desire to remain a simple language. The most common…

Metaprogramming and testing in the D Programming Language

Written on Which language to choose? So many options! I have recently decided to play around with a few niche languages in the “system programming” realm. Having been programming for many years in higher level programming languages such as Java, Dart and Kotlin (and tried many, many others at the same level, or higher), I feel like I need to expand my horizons as for certain kinds of…

How I wrote my own Smart Home software

I’ve wanted to automate my home for a long time… having a background in industrial automation and software development, it felt like I was in a great position to be an early adopter. However, every time I looked into it, I quickly gave up because of two main problems: the sheer complexity of it all. prices. The complexity seems to be intentional on the part of most vendors. They tend…

A look at Unison: a revolutionary programming language

Unison is a pure functional programming language that comes with a few revolutionary ideas. Seriously, it makes everything we’re used to, like long builds, dependency version conflicts, tests that run every single build even when nothing checked by them has changed, manual encoding and serialization of data, and lots more look like primitive stuff from the time we were programming in caves.…

My IDE is too heavy so I moved to Emacs

IDEs (Integrated Development Environment) are great tools to make the lives of developers easier. They help us in so many ways it’s almost impossible for me to imagine working without one. But all the stuff they do to help us is not free, and lately, I’ve been suffering the consequences of that. I use an under-powered MacBook Air from around 2019 as my “hobby project”,…

The difficult problem of managing Java dependencies

Dependency management is a difficult topic, much more difficult than most developers probably realize. As long as things work, you barely need to pay any attention to which versions of your dependencies you’re currently using (but you should, of course), so that’s understandable. But if you want to build reliable software while keeping up with latest security patches in all of your…

Testing and building C projects with Zig

C has been around for a long time, but even today it is at the root of much of the critical infrastructure in the software world. A large amount of the lowest level software that is widely used today, from the Linux kernel to curl , from git to grep , and in fact, all of the GNU Core Utils , stuff you use every day like kill , cat , cp , mkdir , rm , du , date … all of this is written in C.…

Replacing logging APIs with the Java System Logger

Logging in the JVM, unfortunately, has never become fully standardized, resulting in a proliferation of logging frameworks and causing a problem for library authors who want to include logging facilities in their libraries. Given how Java has had, since Java 9, a System.Logger right in the standard library, I decided to investigate whether that has the potential to change things, or whether…

Revenge of Lisp (Part 2/2)

Note: This is a follow-up blog post to Revenge of Lisp - Learning Common Lisp to beat Java and Rust on a phone encoding problem . Please read that blog post first for context. In the previous Part of this blog post, I introduced basic Common Lisp to non-Lispers and discussed the phone number encoding problem, as well as Peter Norvig’s quick implementation of a solution in CL - which are the…

Revenge of Lisp (Part 1/2)

This may surprise you if you know me, but I’ve been learning Common Lisp for a few weeks now. It all started when I was reading, funnily enough, a blog post about another, much more hyped, language called Julia . The post was titled Julia and the reincarnation of Lisp , and in it the author lamented that despite his love for Common Lisp, it’d never become popular, so he was now trying…

How to write fast Rust code

Since I wrote How to write really slow Rust code and its sequence, Part 2 , I have received so much feedback and suggestions to make my Rust code run faster that I decided I had enough material to write another post, this time focusing on more advanced tools and techniques available to Rust developers rather than on how to avoid noobie mistakes that will totally destroy your Rust code performance,…

How to write really slow Rust code - Part 2

This blog post is a follow-up to How to write really slow Rust code , which itself was a follow-up to a paper analysis which discussed how programming language affects developer’s productivity and program’s efficiency. I have received a lot of feedback after these posts, specially the latest one, hence I would like to clarify a few points that I think were not made clear enough, and…

How to write really slow Rust code

I have recently published a blog post that, as I had expected (actually, hoped for, as that would attract people to contribute to the “study”), generated quite some polemic on the Internet! The post was about an old study by Lutz Prechelt comparing Java to C/C++, as well as a few follow-up papers that added other languages to the comparison, including Common Lisp and a few scripting…

Revisiting Prechelt's paper and follow-ups comparing Java, Lisp, C/C++ and scripting languages

In 1999, Lutz Prechelt published a seminal article on the COMMUNICATIONS OF THE ACM (October 1999/Vol. 42, No. 10) called Comparing Java vs. C/C++ Efficiency Differences to Interpersonal Differences , henceforth , which seems to have later (March 2000) been expanded into a full paper, An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl for a search/string-processing program ,…

Vanilla Java: Using Java SE as a Framework

The Java Language Specification specifies in minute detail the grammar and semantics of the Java Programming Language. It also includes platform features like the loading of classes and interfaces , service provisioning and annotations that can provide runtime and compile-time information for meta-programming. With all these features, I think it’s fair to consider Java Standard Edition , or…

Why Gradle is loathed while actually being great!

Gradle is a misunderstood gem. Most people using Gradle did not choose to use it and were forced into it by the toolchain of whatever platform they wanted to work with (Android, Jetbrains IDEs, nearly all Kotlin projects…). Hence, there seems to be lots of Gradle hate going around . This disturbs me (in a weak sense, like people flashing bare ankles on a freezing day disturb me) because I…

Taking Project Loom for a spin

Project Loom is one of many the Java JDK’s incubating project that aim to design and, all going well, deliver new features to Java. Its objective is to support easy-to-use, high-throughput lightweight concurrency and new programming models on the Java platform , according to the Project’s Home Page. I was very excited to read about the current state of Project Loom in the State of Loom…

Writing HTTP files to test HTTP APIs

Writing automated tests for HTTP APIs is currently harder than it needs to be. You have basically two common approaches to the problem: write tests in your favourite programming language using a HTTP client. use a GUI tool like Postman , Swagger Inspector and its older cousin, SoapUI . I believe that none of these approaches is ideal. Furthermore, I think that an alternative solution exists that…

Running WebAssembly on the JVM

Web Assembly (or WASM) is the hot, new technology that aims to allow more efficient programming languages to run inside a browser at near-native speeds. In summary, it is a low-level instruction format that’s both fast to load and to execute, perfect for handling demanding content in a web browser that JavaScript would have more difficulty handling. Web Assembly has two formats: binary (the…

Interesting Features of the Dart Programming Language

Dart is often compared to Java for being a “boring” language. While it’s true that if you know Java (or JavaScript for that matter) Dart will look pretty familiar, I hope you’ll agree after reading the rest of this post that Dart has quite a lot more to offer, without going to extremes and becoming inaccessible. And to be honest, I would even go as far as saying that Dart…

Comparing JVM alternatives to JavaScript

Given that a build/compilation step seems to be a necessary evil no matter what we do, and that we’ve known how to write large applications for a long time in the backend using decent tools, why not try to use those in the front end too!? After all, back in 2011 when I was doing web development, people were already experimenting with that idea… for example, I was using GWT , which is…

Creating a website generator to generate my website

This blog post is about how I ended up writing my own static website generator to make it easy for me to publish this very blogging website.