Oberon VS LjTools

Compare Oberon vs LjTools and see what are their differences.

Oberon

Oberon parser, code model & browser, compiler and IDE with debugger (by rochus-keller)

LjTools

LuaJIT 2.0 bytecode parser, viewer, assembler and test VM. Lua 5.1 parser, IDE and debugger. (by rochus-keller)
Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
Oberon LjTools
76 11
420 251
- -
7.4 0.0
about 1 month ago over 1 year ago
C++ C++
GNU General Public License v3.0 only GNU General Public License v3.0 only
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

Oberon

Posts with mentions or reviews of Oberon. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-01-21.
  • Boehm Garbage Collector
    9 projects | news.ycombinator.com | 21 Jan 2024
    > Sure there's a small overhead to smart pointers

    Not so small, and it has the potential to significantly speed down an application when not used wisely. Here are e.g. some measurements where the programmer used C++11 and did everything with smart pointers: https://github.com/smarr/are-we-fast-yet/issues/80#issuecomm.... There was a speed down between factor 2 and 10 compared with the C++98 implementation. Also remember that smart pointers create memory leaks when used with circular references, and there is an additional memory allocation involved with each smart pointer.

    > Garbage collection has an overhead too of course

    The Boehm GC is surprisingly efficient. See e.g. these measurements: https://github.com/rochus-keller/Oberon/blob/master/testcase.... The same benchmark suite as above is compared with different versions of Mono (using the generational GC) and the C code (using Boehm GC) generated with my Oberon compiler. The latter only is 20% slower than the native C++98 version, and still twice as fast as Mono 5.

  • Niklaus Wirth, or the Importance of Being Simple
    3 projects | news.ycombinator.com | 18 Jan 2024
    Great, thanks!

    There are books online for free, e.g.

    https://people.inf.ethz.ch/wirth/ProgInOberonWR.pdf

    and https://ssw.jku.at/Research/Books/Oberon2.pdf

    Oberon+ is a superset of Oberon 90 and Oberon-2. Here is more information: https://oberon-lang.github.io/, and here is the current language specification: https://github.com/oberon-lang/specification/blob/master/The.... I already had valuable feedback here on HN concerning the channel extensions. Further research brought me to the conclusion, that Oberon+ should support both, channels and also monitors, because even in Go, the sync package primitives are used twice as much as channels. Mutexes and condition variables can be emulated with channels (I tried my luck here: https://www.quora.com/How-can-we-emulate-mutexes-and-conditi...), but for efficiency reasons I think monitors should be directly supported in the language as well, even if it might collide with the goal of simplicity.

    Feel free to comment here or e.g. in https://github.com/rochus-keller/Oberon/discussions/45.

  • Tex-Oberon: Make Project Oberon Pretty Again
    3 projects | news.ycombinator.com | 6 Jan 2024
    > Does anyone know why Wirth never modernized his style?

    Readability. It's easier to read the source code with uppercase keywords. (I think Wirth once said that code is written once but read many times). See this source code - https://raw.githubusercontent.com/rochus-keller/OberonSystem... - to get an idea of this (the uppercase keywords allow you to easily scan the blocks of code). Ofcourse, one can claim that the same can be achieved better today with colour-coded keywords.

    If I remember right, the Oberon+ IDE - https://github.com/rochus-keller/Oberon - gives you an option to disable this and use lowercase keywords.

  • FreeOberon cross-platform Oberon language IDD
    3 projects | news.ycombinator.com | 12 Nov 2023
  • Project Oberon (New Edition 2013)
    2 projects | news.ycombinator.com | 14 Sep 2023
    > gain a deep understanding of it .. generate smaller subsets of the system

    You can use the OberonViewer for this purpose with the original source code, or the Oberon IDE with a version of the Project Oberon System which runs with SDL on all platforms, see https://github.com/rochus-keller/oberon/#binary-versions and https://github.com/rochus-keller/OberonSystem/tree/FFI

  • KolibriOS on Single Floppy Disk
    2 projects | news.ycombinator.com | 4 Sep 2023
    > Regardless, which one is more likely to be ported to a different architecture in the future?

    Not sure I understand the question. I'm talking about CPU architectures. The current implementation is in x86 assembler. So if you want to run it on AMD64 or ARM, then you have to replace all assembler files, in the present case probable the full source code.

    > what are the comparative performance benchmarks of the low-level language versus the high-level language?

    I don't have any measurements. But consider that many operating systems are implemented in C (e.g. Linux) with only isolated parts in assembler, so it is easier to port to other architectures. Linux apparently is fast enough and available for nearly every CPU. Oberon in contrast to C is garbage collected, which also affects performance. I have measurements comparing the same benchmark suite implemented in C++ and in Oberon, where the former is about 22% faster (see https://github.com/rochus-keller/Oberon/blob/master/testcase...).

  • Why Use Pascal?
    5 projects | news.ycombinator.com | 8 Jul 2023
  • C or LLVM for a fast backend?
    3 projects | /r/ProgrammingLanguages | 2 Jun 2023
    I actually had a similar problem some years ago and finally moved away from LLVM because of complexity, continuous research effort and performance. My current Oberon+ implementation works like this: the CIL code generator together with Mono is used during development, integrated with the IDE, using the debugging features integrated in Mono; to deploy the application and to gain another factor 2 of performance C99 instead of CIL can be generated and compiled with any compatible toolchain. Here are some performance measurements: https://github.com/rochus-keller/Oberon/blob/master/testcases/Are-we-fast-yet/Are-we-fast-yet_results_linux.pdf. Compiling to CIL is very fast and the time Mono needs to compile and run is barely noticable.
  • Do transpilers just use a lot of string manipulation and concatenation to output the target language?
    4 projects | /r/ProgrammingLanguages | 27 May 2023
  • Native AOT Overview
    8 projects | news.ycombinator.com | 26 May 2023
    > annoying aspects was requiring the .NET runtime ... OpenJDK is a blessed implementation in a way that Mono never was

    Which is unjustified, because Mono CLR is just a single executable less than 5 MB which you can download and run without a complicated installation process (see e.g. https://github.com/rochus-keller/Oberon/#binary-versions ). AOT compilation on the other hand is a huge and complex installation depending on a lot of stuff including LLVM, and the resulting executables are not really smaller than the CLR + mscorlib + app.

LjTools

Posts with mentions or reviews of LjTools. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-06-21.
  • LuaJIT decompiler that supports GOTO statements?
    3 projects | /r/lua | 21 Jun 2023
    I dug a little more and came across this tool which does seem to have the capability to view all LuaJIT Bytecode. https://github.com/rochus-keller/LjTools
  • A History of Lua
    14 projects | news.ycombinator.com | 10 Aug 2022
    > a large lua game code base, over 4000 files, 1.5 million lines of code

    Interesting; how do you manage to keep consistency? Do you have special tools to e.g. detect inadvertent global variables? I once wrote a Smalltalk VM in Lua (https://github.com/rochus-keller/Smalltalk/blob/master/Inter...) which is a much smaller code base but even with this size I quickly would have lost track of e.g. scopes and names without tools I had to write myself (https://github.com/rochus-keller/LJTools).

  • Minimalism in Programming Language Design
    6 projects | news.ycombinator.com | 24 May 2022
  • KT/COBOL — Choosing a VM edition — I need to hear your experiences with the VM you're currently using for your project.
    6 projects | /r/ProgrammingLanguages | 20 May 2022
    Most of my languages have VM backends; see e.g. https://github.com/rochus-keller/Oberon; I implemented different backends generating LuaJIT bytecode; a year ago I switched to Mono which is based on ECMA-335; here is a discussion why I switched: https://github.com/rochus-keller/Oberon/releases/tag/IDEv0.9.0; I implemented utility libraries for both LuaJIT and CIL bytecode; see https://github.com/rochus-keller/LjTools/, https://github.com/rochus-keller/Pelib/ and https://github.com/rochus-keller/MonoTools/. I evaluated many VMs and think the mentioned ones are best suited. There were a lot of challenges with both technologies, what is to be expected, and too much to describe here.
  • LuaJIT for backend?
    6 projects | /r/ProgrammingLanguages | 2 Jan 2022
    LuaJIT is well suited as a backend/runtime environment for custom languages; I did it several times (see e.g. https://github.com/rochus-keller/Smalltalk, https://github.com/rochus-keller/Som/, https://github.com/rochus-keller/Oberon/). I also implemented a bit of infrastructure to ease the reuse: https://github.com/rochus-keller/LjTools. LuaJIT has some limitations though; if you require closures you have to know that the corresponding LuaJIT FNEW bytecode is not yet supported by the JIT, i.e. switches to the interpreter; as a work-around I implemented my own closures; LuaJIT also doesn't support multi-threading, but co-routines; and there is no debugger, and the infrastructure to implement one has limitations (i.e. performance is low when running to breakpoints). For most of my projects this was no issue. Recently I switched to CIL/Mono for my Oberon+ implementation which was a good move. But still I consider LuaJIT a good choice if you can cope with the mentioned limitations. The major advantage of LuaJIT is the small footprint and impressive performance for dynamic languages.
  • Writing a Register Based VM
    3 projects | /r/ProgrammingLanguages | 16 Sep 2021
    Implementing a VM is certainly interesting, but if you just need a fast backend you could generate LuaJIT bytecode (see e.g. https://github.com/rochus-keller/ljtools/ LuaJitComposer.h/cpp).
  • Finl Is Not LaTeX
    8 projects | news.ycombinator.com | 27 May 2021
  • (LuaJIT) How to directly modify strings within LuaJIT Bytecode?
    2 projects | /r/lua | 26 Apr 2021
  • Bytecode for a Register Machine
    5 projects | /r/ProgrammingLanguages | 15 Feb 2021
    If you want to re-use LuaJIT as a backend, have e.g. a look at https://github.com/rochus-keller/ljtools
  • Favorite Program for writing LUA?
    1 project | /r/lua | 23 Dec 2020
    Recently I mostly use https://github.com/rochus-keller/LjTools#lua-parser-and-ide-features

What are some alternatives?

When comparing Oberon and LjTools you can also consider the following projects:

oberon-riscv - Oberon RISC-V port, based on Samuel Falvo's RISC-V compiler and Peter de Wachter's Project Norebo. Part of an academic project to evaluate Project Oberon on RISC-V.

SATySFi - A statically-typed, functional typesetting system

MoarVM - A VM with adaptive optimization and JIT compilation, built for Rakudo

ubpf - Userspace eBPF VM

Smalltalk - Parser, code model, interpreter and navigable browser for the original Xerox Smalltalk-80 v2 sources and virtual image file

port70 - A Gopher server in Lua

tectonic - A modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive.

tex-rs - A port of TeX82 to Rust. (WIP)

aws-lambda-rust-runtime - A Rust runtime for AWS Lambda

langs

atldotnet - Fully managed, portable and easy-to-use C# library to read and edit audio data and metadata (tags) from various audio formats, playlists and CUE sheets

LuaJIT - Mirror of the LuaJIT git repository