A lightweight Lisp interpreter in Malbolge Unshackled
In 2020-2021, Palaiologos created MalbolgeLISP, a LISP interpreter written in Malbolge, a public domain esoteric programming language. Malbolge was designed to be extremely difficult to use, with self-modifying code, trinary arithmetic, and a counter-intuitive "crazy operation." However, MalbolgeLISP aims to prove that useful programs can be written in Malbolge. It is the most advanced and usable Malbolge program to date. MalbolgeLISP supports features commonly found in LISPs, such as tacit programming, partial application, de Bruijn indices, and monad lifting. The v1.2 release improved performance, reduced code size, and added new features. MalbolgeLISP is based on a variant of Malbolge called Malbolge Unshackled, which introduces additional complexity. The rotation width in Malbolge Unshackled is chosen randomly by the interpreter, making programming more challenging. Additionally, the print instruction requires unicode codepoints, and loading values larger than a certain limit becomes difficult without knowing the rotation width. However, Malbolge Unshackled is Turing complete and offers enough addressable memory to create interesting programs.
Show HN: Resurrecting the Dillo browser
Dillo is a fast and lightweight graphical web browser that runs on various platforms such as Linux, BSD, MacOS, and even Atari. It is written in C and C++ with minimal dependencies and incorporates its own real-time rendering engine. One of its key strengths is its low memory usage and fast rendering, even when dealing with large webpages. Dillo utilizes the FLTK GUI library, known for being fast and free of unnecessary features. The browser supports protocols like HTTP, HTTPS, FTP, and local files, and it can be extended with plugins written in any programming language (search on GitHub for examples). It is licensed under the GPLv3 and aims to help authors comply with web standards through its bug meter feature. Dillo also aims to lower the entry barrier to the web, support older or less powerful machines, prioritize personal security and privacy, and ensure high software efficiency. The browser can be downloaded from the git repository, and contributions from users are highly encouraged, whether that involves reporting issues, spreading awareness of the browser, or submitting patches and pull requests.
GCC Specs: An Introduction
The GNU Compiler Collection (GCC) is a widely used compiler driver that runs compilers, assemblers, and linkers to process code. The driver abstracts away the details of these subprograms and organizes the arguments provided to them. Specs, which are specification strings, play a crucial role in this process. They describe how and when the driver runs each subprogram. The driver uses specs to determine the appropriate subprograms to execute based on the arguments it receives. This article explores the structure and functionality of specs by examining the output of running GCC. The article also delves into the ad hoc mini-language used in specs and the various forms of conditionals and substitutions it employs. Understanding specs is important for developers who want to customize the compilation and linking process or gain insight into how the driver manages and coordinates the subprograms.
A new approach to local multiplayer / splitscreen perspective with raytracing
This blog post discusses the author's idea for implementing a new kind of screen sharing for local cooperative multiplayer games using fully raytraced real-time rendering. The traditional solution for local cooperative multiplayer is splitting the screen into separate areas for each player, each with their own camera perspective. However, this can be challenging for 3D games. The author explores examples of games that have implemented interesting split-screen mechanics, such as Renegade Ops, which dynamically changes the screen layout based on the players' relative positions, and DYO, which turns split-screen into a core gameplay mechanic. The author also shares their own implementation of split-screen in their game Sphere Spectacle, using raytracing to dynamically adjust the camera at a pixel level and smoothly interpolate between perspectives. The code for this implementation was created in just two days, demonstrating the simplicity and potential of using raytracing for split-screen rendering. The author hopes that others will explore this concept further and build full games around it.
Benchmarking 20 programming languages on N-queens and matrix multiplication
The Programming Language Benchmark v2 (plb2) evaluates the performance of 20 programming languages on four CPU-intensive tasks: solving a 15-queens problem, multiplying two square matrices of 1500x1500 in size, solving 4000 hard Sudokus, and finding overlaps between two arrays of 1,000,000 intervals. The benchmark's results show that language implementations can be classified into four groups based on how and when compilation is done. The benchmark also discusses caveats, such as startup time and the difference between elapsed time and CPU time. It highlights subtle optimizations, such as controlling memory layout and optimizing inner loops. The plb2 benchmark complements the Computer Language Benchmark Games, but it does not evaluate memory allocation or garbage collection performance. The benchmark concludes by noting that while many languages have reached the 1.0 milestone and gained popularity, Python remains popular despite its poor performance. The author is not optimistic that a language will displace Python in the next decade.