Raspberry Pi 4

The Raspberry Pi 4 is a leap forward not just for the Pi but for single-board computers across the board. It’s a great light-weight desktop replacement. It’s even surprised me as a viable Rust / Ada development environment.

Raspberry Pi 4 running MATE desktop

My setup includes a Raspberry Pi 4 FLIRC case which is basically a giant aluminum heat sink. This allows for a completely silent setup running at an average of 54’C. During extended code-compiles that tops out around 65’C which is more than enough cooling and completely worth the silence when compared with a fan.

The FLIRC Raspberry Pi 4 case is the best viable silent cooling option.

The Raspberry Pi 4 firmware does not yet support booting from USB. That’s coming in the future. For now the best way to get much better system performance is to use the SD card for booting only and then running the system from a high-quality USB 3.1 stick. Expect about ~10x better performance from doing this than running on an SD card.
It’s easy, take a look at this post for how to do that.

Raspberry Pi 4 specs showing microSD card for boot and USB 3.1 card for system.

Unfortunately Raspian still only provides an armv7l 32-bit release. Ubuntu MATE does support armv7lΒ (ARMv7 32-bit) andΒ arm64Β (ARMv8 64-bit) but there’s no support for RPi4 yet. It is possible to get a 64-bit os on the RPi4 by copying over the Raspian firmware using Ubuntu Server for ARM but having done it I wouldn’t say it’s worth the effort. Better to just wait for official support if you need to run a 64-bit system.

Ada, Rust and Steelman requirements

Ada and Rust are the only two pragmatic languages that are still growing in a healthy way that meet the Steelman language requirements (created by US DoD circa 1978).

Crucial in the Steelman requirements were:

  • A general, flexible design that adapts to satisfy the needs of embedded computer applications.
  • Reliability. The language should aid the design and development of reliable programs.
  • Ease of maintainability. Code should be readable and programming decisions explicit.
  • Easy to produce efficient code with. Inefficient constructs should be easily identifiable.
  • No unnecessary complexity. Semantic structure should be consistent and minimize the number of concepts.
  • Easy to implement the language specification. All features should be easy to understand.
  • Machine independence. The language shall not be bound to any hardware or OS details.
  • Complete definition. All parts of the language shall be fully and unambiguously defined.