Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Jan 2019 00:11:03 +0000
From:      Alejandro Martinez <unledev@gmail.com>
To:        Brian Neal <brian@aceshardware.com>
Cc:        freebsd-hackers@freebsd.org, Garance A Drosehn <drosih@rpi.edu>
Subject:   Re: Speculative: Rust for base system components
Message-ID:  <CAFwFPky1v7%2Bf=d5EiqWW5XEKVXmB9a2Cinffi4%2BzOxNAsx00Ag@mail.gmail.com>
In-Reply-To: <E0CA1E33-C096-44DC-B494-DE3B87237E57@aceshardware.com>
References:  <ca76e5f7-6e59-bd67-144a-90ad66f0252e@metricspace.net> <7d7bc47d-04cf-2f9b-00a3-e3d9d92b3623@aceshardware.com> <72922F2C-9D27-47AA-BB1C-2DA8589CF008@rpi.edu> <92bd5362-d898-aa12-8f3d-9fbe23f38e0c@aceshardware.com> <CAFwFPkziF%2BEvZ2fEv1fErfmDujPm9UhxvoYUBoCo-%2BtjXtBWmw@mail.gmail.com> <E0CA1E33-C096-44DC-B494-DE3B87237E57@aceshardware.com>

index | next in thread | previous in thread | raw e-mail

Hi Brian,

On Fri, Jan 4, 2019 at 4:50 PM Brian Neal <brian@aceshardware.com> wrote:
>
> Sure!
>
> Just go to http://godbolt.org/ and type a small program in each language, enter the appropriate compilation flags and compare the output. The function I used took a count as a parameter, iterated through the count, summed up odd numbers and returned the sum.

I did the test with what I understood must had been the code you used,
but my results are different. See [1].

> >> It was a debug build with no optimization for either compiler. But we
> >> can easily run a variety of settings for comparison:

Debug builds show also panic and overflow checks for Rust sources,
which explains the difference in instruction count.

> >>
> >> Compiler              Flags                 Inst. Count Build Time
> >> ======================================================================
> >> clang 7.0.0           none                           33 296ms
> >>                       -O3                            23 341ms
> >> rustc 1.31.0          none                          110 606ms
> >>                       -C opt-level=3                 67 643ms
> >> gcc 8.2               none                           37 211ms
> >>                       -O2                            24 249ms
> >>                       -O3                          119* 206ms
> >>
> >> * With -O3, gcc unrolled and vectorized the loop. The other compilers
> >> did not emit vectorized code at any of the standard optimization levels.

I did not see this. Actually I had to force Rust with extra flags to
stop it from emitting such code.
In fact, both Rust and clang generate the exact same code for the
equivalent function.

> >> So, essentially, double the build time and ~3 times the code for the
> >> same logic.

This is not true in the tests I did wrt instruction count. The
compiler is certainly slower, although not sure it is 2x slower than
clang.

In fact, as you can see, there's one implementation in Rust that beats
the C code in inst count for both gcc and clang.
That said, instruction count is hardly a good metric, especially with
relatively recent CPUs.

My 2c: these tests focus on a very narrow set of properties and cases
that IMO should not be the basis for considering a language.

[1] https://godbolt.org/z/hqi_VX.

Cheers,
  Alex


help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFwFPky1v7%2Bf=d5EiqWW5XEKVXmB9a2Cinffi4%2BzOxNAsx00Ag>