The Green Side of the Lua

(arxiv.org)

38 points | by radiator 3 days ago

11 comments

  • dbdr 18 minutes ago
    This paper is relevant:

    Energy Efficiency across Programming Languages: How Does Energy, Time, and Memory Relate?

    https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/pap...

    This is the main summary table:

        Energy                  Time                    Memory
        (c) C 1.00              (c) C 1.00              (c) Pascal 1.00
        (c) Rust 1.03           (c) Rust 1.04           (c) Go 1.05
        (c) C++ 1.34            (c) C++ 1.56            (c) C 1.17
        (c) Ada 1.70            (c) Ada 1.85            (c) Fortran 1.24
        (v) Java 1.98           (v) Java 1.89           (c) C++ 1.34
        (c) Pascal 2.14         (c) Chapel 2.14         (c) Ada 1.47
        (c) Chapel 2.18         (c) Go 2.83             (c) Rust 1.54
        (v) Lisp 2.27           (c) Pascal 3.02         (v) Lisp 1.92
        (c) Ocaml 2.40          (c) Ocaml 3.09          (c) Haskell 2.45
        (c) Fortran 2.52        (v) C# 3.14             (i) PHP 2.57
        (c) Swift 2.79          (v) Lisp 3.40           (c) Swift 2.71
        (c) Haskell 3.10        (c) Haskell 3.55        (i) Python 2.80
        (v) C# 3.14             (c) Swift 4.20          (c) Ocaml 2.82
        (c) Go 3.23             (c) Fortran 4.20        (v) C# 2.85
        (i) Dart 3.83           (v) F# 6.30             (i) Hack 3.34
        (v) F# 4.13             (i) JavaScript 6.52     (v) Racket 3.52
        (i) JavaScript 4.45     (i) Dart 6.67           (i) Ruby 3.97
        (v) Racket 7.91         (v) Racket 11.27        (c) Chapel 4.00
        (i) TypeScript 21.50    (i) Hack 26.99          (v) F# 4.25
        (i) Hack 24.02          (i) PHP 27.64           (i) JavaScript 4.59
        (i) PHP 29.30           (v) Erlang 36.71        (i) TypeScript 4.69
        (v) Erlang 42.23        (i) Jruby 43.44         (v) Java 6.01
        (i) Lua 45.98           (i) TypeScript 46.20    (i) Perl 6.62
        (i) Jruby 46.54         (i) Ruby 59.34          (i) Lua 6.72
        (i) Ruby 69.91          (i) Perl 65.79          (v) Erlang 7.20
        (i) Python 75.88        (i) Python 71.90        (i) Dart 8.64
        (i) Perl 79.58          (i) Lua 82.91           (i) Jruby 19.84
    • lionkor 4 minutes ago
      Any comparison with Lua that doesn't include LuaJit also shouldn't include any JavaScript (or rather, should test it with some super inefficient ancient runtime instead of V8)
    • misja111 8 minutes ago
      Why didn't they include assembly? IMO this should be the benchmark, not C
      • LoganDark 6 minutes ago
        Assembly has no idiomatic way to do things. Creating an optimized assembly comparison is another paper in itself.
  • Rochus 2 days ago
    Interesting results. Particularly they barely found a speed-up of newer compared to older LuaJIT versions (rather the contrary). Maybe they should have used the Are-we-fast-yet suite instead of the (random looking) set of microbenchmarks. I did measurements of Lua and LuaJIT some time ago based on Are-we-fast-yet and saw significant differences in LuaJIT performance (see http://software.rochus-keller.ch/are-we-fast-yet_LuaJIT_2017...).

    I also compared different PUC Lua versions in an earlier measurement (see http://software.rochus-keller.ch/are-we-fast-yet_lua_results...) and found similar significant differences between versions.

  • vaylian 1 hour ago
    The nice thing about Lua is that it can easily be combined with compiled languages. If you identify the hot path in your program, you can implement them in a more efficient language.
    • themafia 19 minutes ago
      The C interface to ruby is just superb. It provides a very simple and first class access to the entire runtime and all it's features. It's absolutely my favorite language to write extensions in.

      Lua is probably my second favorite. It's marred by it's initial creation as a stack based interpreter and requires more calls and contortions to achieve the same effects as you would in any other language; however, once you understand a handful of useful primitives it's quite easy to intuit the correct set of calls for any use case.

      The blend of dynamic language with underlying compiled extensions is vastly underappreciated. I suspect it has a lot to do with the difficulty of packaging and distributing these extensions into current virtualized and cloud environments. Which is a pity given the extreme combination of flexibility and efficiency that it otherwise unlocks.

  • perilunar 1 hour ago
    Save a few watts per device making the client-side code a bit more efficient.

    Spend Gigawatts running data centres for LLMs.

    • indy 41 minutes ago
      Share this article on LinkedIn and you'll have countless managers talking about how they initiated a company wide policy to convert all Python scripts into Lua using Claude
      • keybored 36 minutes ago
        As Earth stakeholders, saving watts is not just good business sense—it’s a Kantian imperative.
    • keybored 1 hour ago
      Most environmental chatter in a nutshell.
  • PaulRobinson 1 hour ago
    Energy efficiency as a "my language is better than yours" point was not on my bingo card for 2026.

    JIT as an energy saver intuitively makes sense, and is probably the model most languages need to think about for "shipping to prod". I'm aware Python has started developing this, and given the install base, it's encouraging that results like this show it could have significant benefits for users.

  • winter_blue 1 hour ago
    I'd like to see a study that compares Python and Ruby, against (1) Rust, (2) C, (3) C++, (4) Zig, (5) Go, (6) a JVM language (like Scala or Kotlin or Clojure), and (7) the main CLR language (C#).

    I would imagine that all 7 of them absolutely trounce Python and Ruby.

    Python and Ruby have been an immense environmental (and type safety) disaster.

    JS though (via V8 and other engines) has been surprisingly fast. I've always wondered why Python and others couldn't copy some of the tricks V8 uses to be fast...

  • lucascdotnet 58 minutes ago
    Is the title "The Green Side of the Lua" a pun/parodic allusion to something?

    I have been compiling a list of papers that have titles with this kind of style.

    • helenite 13 minutes ago
      Have you published the list yet?
    • pansa2 54 minutes ago
      I guess it alludes to “The Dark Side of the Moon”
    • keybored 53 minutes ago
      “Lua” is “moon” Portuguese, so it’s a reference to Dark Side of the Moon.
  • fouronnes3 1 hour ago
    Is a paper that publishes a 0.01% improvement of something at the cost of 5 times more power really an improvement? I believe that every single computer science measurement metric should have Joules or Watts in the denominator. If you are training a model I want to see performance per total energy consumed. If you are measuring inference accuracy, measure PER WATT.

    I've always been a bit confused by the apparent tendency of the computer science field to mostly ignore energy and power. We are too often satisfied with the idea that software and programs exist in a perfect whiteboard world of xkcd 505 abstract compute.

  • misja111 30 minutes ago
    This kind of article keeps coming back, I've seen similar articles on LinkedIn where the bottom line is to switch from Python to C. The reasoning, in a nutshell, is that if a language allows you to waste fewer CPU cycles, it is more energy efficient, hence greener.

    This completely ignores the fact that such a language might be more difficult to master because it uses fewer higher abstractions; CPU efficient languages tend to be closer to the machine domain and further away from the mathematical and real world. So while in theory the language lets you write very efficient code, you might well miss the opportunity and it could even be that using some off the shelve abstraction in a higher level language, your code would have been more efficient.

    To drive that point to the extreme: the ultimate CPU efficient language is the language of the CPU itself: assembly. Try writing an efficient highly scalable webserver in assembly alone, good luck with that.

    Then there is something else that all these articles conveniently ignore: development speed. Most of us write software for commercial enterprises. Product owners want the new feature tomorrow, not next year. They don't want a clever and amazingly fast application that might crash in production, they don't want security holes by missed buffer overflows.

    Also, most of us work in a team where colleagues come and go, including yourself. Your colleagues won't be happy with you when you leave them some amazingly cleverly and efficiently written software that nobody understands or can maintain.

    TL;DR; while all else being equal, the point of the article is true: it has little to no meaning in the real world. Yet, with phrasing like 'green languages', 'reduce the carbon footprint', these articles will catch on to an uninformed audience again and again.

  • morgoths_bane 56 minutes ago
    O lado verde da Moon.
  • aa-jv 2 hours ago
    As someone who has shipped Lua as a solution to many an embedded dilemma, this is highly interesting work.

    I wonder if there will be motivation in the future to address energy consumption in future JIT work .. in fact I wonder whether other languages are going to face a similar optimization path. It would be grand to see progress being made on this at a more general scale. I'm looking at you, Python ..