Remix.run Logo
dbdr an hour 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
DanRosenwasser 6 minutes ago | parent | next [-]

The methodology used in this paper was extremely bad. There is no reason there should be any disparity between a TypeScript and JavaScript benchmark.

Unfortunately it has continued to make the rounds for about a decade now and gets re-posted every year or so.

lionkor an hour ago | parent | prev | next [-]

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)

qsort 39 minutes ago | parent | prev | next [-]

I don't know what this table is supposed to measure but it doesn't check out.

(C, C++) and (JS, TS) are almost source-compatible, chances are you can rename test.c to test.cpp and test.js to test.ts and you're done. Yet they're showing massive differences?

Also most of the compiled languages with no runtime should get results that are very close to each other: good compilers should produce similar object-code for this type of microbenchmark.

Not to mention this is really measuring the implementation, you can't measure a language. Mike Pall wouldn't be down there, and JS/TS wouldn't be up there without V8 and friends.

atiedebee 26 minutes ago | parent [-]

I imagine you would want to test "idiomatic" code for these comparisons. It doesn't make much sense to compile with C++ and write everything in C.

misja111 an hour ago | parent | prev | next [-]

Why didn't they include assembly? IMO this should be the benchmark, not C

LoganDark an hour ago | parent [-]

Assembly has no idiomatic way to do things. Creating an optimized assembly comparison is another paper in itself.

piokoch 24 minutes ago | parent | prev | next [-]

I have to say I am surprised that Java is better than Go in terms of energy/time.

Zababa an hour ago | parent | prev [-]

This paper is not really relevant, it's based on the "Computer Language Benchmark Game", so what it measures is a mix of the efficiency/speed of the language and the attention that practitioners of that language gave to the Computer Language Benchmark Games.

What is measured in that table is neither naive code nor the absolute limit you can reach with each language, which means you can't really then compare languages between themselves the way the paper implies.

I think picking professionals at random that practice those languages and ask them to write Computer Language Benchmark Games code would be maybe a bit more representative, but even there you face huge biases.