Strongtalk-2020 is the name I have given to of one of my recreational computing projects. It’s the continuation of the work done in the late 1990s by an all-star cast of programmers who went on to create many other amazing things including, but by no means limited to:
- the Hotspot JIT compiler for the Java VM
- the Dart programming language
- the Newspeak programming platform
- the Java programming language specification
- warehouse-scale computing at Google
This is quite an array of achievements — and was more than enough to pique my interest in the Strongtalk platform and investigate what work would be required to bring it up to date to run on a modern-day computer system.
Performing such a task is (at least) an interesting thought experiment, and there have been a number of attempts by people far more capable than me to resuscitate it.
Here are some of the
challenges facts in the project visible from the outset:
- 32-bit computing model
- C++ 98 dialect of C++, and little use of the C++ standard library.
- diabolical use of the preprocessor
- Windows as the primary platform
- Project appears to have been abandoned several times
Undeterred by the above, I started to see if I could get it compiled on a modern Linux installation. I consider Debian 10 to be the best option for what I need in 2020. Your experiences and requirements may be different. 🙂
I consider myself fortunate to have been involved in an ambitious porting job of an ANSI C99 project to many different UNIX platforms, as well as Win32 and MacOS X. (I was mainly involved in the UNIX part of things.) Although I made a few decisions then I would not make now, the experience has stuck with me to ensure that whatever one creates on a computer is usable by others. Emboldened by this experience I felt sure that I could manage it, and even if the project never made it to a worthwhile checkpoint, the task would be educational.
It’s always good to start these sort of things at the end and work backwards to the current status to see what’s required. These were the rough targets I had in mind.
- Use the latest revision of the C++ standard, C++20, it having just been agreed by the C++ working group in February 2020.
- Convert the code to be 64-bit only and drop support for 32-bit architectures.
- Run on both Linux and Windows.
- Conservatively make use of modern-and-popular C++ libraries, for important-but-peripheral aspects of the system such as logging and unit tests.
- Slightly less conservatively, make use of modern and well-tested libraries, for important-and-central aspects of the system which required updating. The only component to which this applies is the x86-64 runtime macro assembler for the JIT compiler.
- Even less conservatively, refresh the GUI toolkit.
Some of the less precisely defined goals are:
- Keep the source tree the same shape where possible.
- Improve the naming of classes and variables (usually this means making them longer and more descriptive)
In the late 1990s, Professor Daniel J. Bernstein maintained on his web pages what he called “the standard workstation”, but as the early 2000s wore on, he no longer updated the specifications. This has stuck in my mind as a good concept.
Here is my equipment list for 2020. I don’t have all of it, but most of it is easily available. All of it just reflects my personal tastes and experience; you are not expected to agree with any of it 🙂
Keyboard Lenovo ThinkPad Compact USB Keyboard with TrackPoint
Mouse Integrated into the previous item. 🙂
Display Dell UP3017
Graphics NVIDIA GM107GL aka Quadro K1200
Disk Samsung 860 PRO SSD
CPU Intel i7 or Xeon @ 3.4 GHz
RAM As much as you can afford that will fit.
All in all, the best option for my use right now seems to me to be the HP Z240 SFF (small form-factor) workstation. Although they are no longer manufactured by HP, they are available to buy online at many places. Even better, HP are still producing BIOS updates for them.
The system uses a Realtek ALC221 chipset, but with some HP-specific changes. To get it to behave properly, the following configuration must be applied.
options snd_hda_intel beep_mode=0
options snd_hda_intel enable_msi=1
options snd_hda_intel model=alc221-hp-mic
options snd-hda-intel patch=snd_hda_intel.fw
options snd_hda_intel power_save=0
options snd_hda_intel power_save_controller=N
options snd_hda_intel probe_only=0,1
0x10ec0221 0x103c802e 0
With the above in place:
- the front microphone jack is active
- both the front and rear headphone / line out jacks are active.
This is the first post.