Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jan 31 15:06

    ldionne on gh-pages

    Update benchmarks to 490dbf6 fo… (compare)

  • Jan 24 07:47

    ldionne on gh-pages

    Update benchmarks to 490dbf6 fo… (compare)

  • Jan 23 02:04
    pthom commented #432
  • Jan 18 12:46

    ldionne on gh-pages

    Update benchmarks to 490dbf6 fo… (compare)

  • Jan 16 22:27
    ricejasonf commented #434
  • Jan 05 06:22
    ricejasonf commented #330
  • Jan 03 11:40

    ldionne on gh-pages

    Update benchmarks to 490dbf6 fo… (compare)

  • Jan 02 00:33
    ricejasonf closed #434
  • Jan 02 00:33
    ricejasonf commented #434
  • Jan 02 00:04
    ricejasonf opened #434
  • Dec 27 2018 13:11

    ldionne on gh-pages

    Update benchmarks to 490dbf6 fo… (compare)

  • Dec 22 2018 11:56
    pthom commented #432
  • Dec 22 2018 11:55
    pthom commented #432
  • Dec 21 2018 15:48
    pthom synchronize #432
  • Dec 21 2018 09:19
    sdebionne opened #433
  • Dec 21 2018 00:08
    ricejasonf commented #432
  • Dec 21 2018 00:03
    ricejasonf commented #432
  • Dec 20 2018 23:36
    pthom commented #432
  • Dec 20 2018 23:36
    pthom commented #432
  • Dec 20 2018 23:13
    ricejasonf commented #432
Jason Rice
@ricejasonf
or rather it is a contrived use case
Maik Klein
@MaikKlein

How do you output different error messages?

Pseudo code:

constexpr auto size = hana::size(something);
// (size == 0) => print "Does not contain anything"
// (size > 1) =>print "Contains duplicates"
where "print" would be the compile time error.
Jason Rice
@ricejasonf
wouldn't static_assert work?
Maik Klein
@MaikKlein
I could do static_assert(hana::size(s) == hana::size_c<1>, "Something is wrong");
but then I wouldn't know if it i was 0 or bigger then one and checking that seems a bit cumbersome with static_assert
Jason Rice
@ricejasonf
static_assert(size == 0, "Does not contain anything");
static_assert(size > 1, "Contains duplicates");
This message was deleted
Maik Klein
@MaikKlein
hm okay I must be tired :d
Jason Rice
@ricejasonf
Maik Klein
@MaikKlein

Wait it should work with 1, but should not accept 0 or 2+. size == 0 doesn't work because 1 == 0 will trigger the assert, and static_assert triggers at false not true.

size != 0 doesn't work because it will also trigger at 1+. I could solve this but it would require some boolean shenanigans

Jason Rice
@ricejasonf
ah right
Maik Klein
@MaikKlein
    static_assert(size != 0 || size >= 1, "Empty");
    static_assert(size == 1 || size == 0, "More than 1");
Should be what I want, but that seems way too complicated for something so simple
Jason Rice
@ricejasonf
here is a much, much simpler solution and the good news is it only generates one warning :P
#include<type_traits>

template<int size, typename = void>
struct SizeChecker
{ };

template<int size>
struct SizeChecker<size,
  std::enable_if_t<(size == 0)>>
{
  static_assert(size == 0, "Does not contain anything");
};

template<int size>
struct SizeChecker<size,
  std::enable_if_t<(size > 1)>>
{
  static_assert(size > 1, "Contains duplicates");
};

int main()
{
  constexpr int size = 1;
  SizeChecker<size>{};
}
Maik Klein
@MaikKlein
haha
Jason Rice
@ricejasonf
sorry that's all i got
Maik Klein
@MaikKlein
It appears that I was very confused and you can actually write it like this static_assert( size != 0, "Must not be empty") and static_assert(size <= 1, "Too many")
I think the trigger at false must have confused me somehow
Jason Rice
@ricejasonf
ah right It would check the second one after asserting that it wasn't 0
Maik Klein
@MaikKlein
?
Jason Rice
@ricejasonf
meaning you can't get two failures
Maik Klein
@MaikKlein
I can only get one failure
Jason Rice
@ricejasonf
yeah.. nm :)
Maik Klein
@MaikKlein
because for 0, 0 <= 1 is true
:d
Jason Rice
@ricejasonf
@MaikKlein Regarding your question about 'previous template instantiations', precompiled header files might be the answer. I'm not sure to what extent it would make a difference, but it shaves off about 5 seconds (from 8 seconds total) from my convoluted primality test. A more extreme case could be tested by fiddling with the upper end of the range in expensive.hpp.
As you can see in the Makefile you can compile a .pch just like you can an object file.
Jason Rice
@ricejasonf
Apparently clang has modules implemented. I wonder if it would be feasible to export that map variable and tell clang to fully evaluate/optimize the AST to output a pch or header file that leaves all of the cruft behind.
Maik Klein
@MaikKlein
@ricejasonf interesting, haven't used pch's yet.
btw is there a way to benchmark the compile time? I tried -ftime-report in clang but it's not very helpful.
Maik Klein
@MaikKlein
I am thinking of something like
foo<a,b,c,d> at line 24 in foo.hpp took 1.54 seconds to instantiate.
Jason Rice
@ricejasonf
@MaikKlein idk. I was just using time make and it appears that Hana uses a ruby script that calls a make command
Maik Klein
@MaikKlein
I guess that works okay for isolated code, but I would really like to see where the bottleneck is in my current code base. I'll have a look at clang modules now and see if they give me any benefit.
Maik Klein
@MaikKlein
I guess I am also going to try templight, it even integrates kcachegrind
^ wtf is that image
ah it's his profile picture
Jason Rice
@ricejasonf
this oss?
your project that is
Maik Klein
@MaikKlein
My project will be open source
not sure if that is what you asked though :d. I am not the creator of templight
Jason Rice
@ricejasonf
is it on github?
Maik Klein
@MaikKlein
Not yet, it's in a very early state. It will be a 2d game framework with an entity component system.
Louis Dionne
@ldionne
@MaikKlein To find the compile-time bottlenecks in your code, first isolate the TUs that are problematic. Then, what I usually do is simply comment out instantiations and compile over and over with time clang++ ….
Also, I just found out about ccache. It caches files between compilations, and it’s really awesome (from what I can see so far).
Jason Rice
@ricejasonf
@ldionne I'm not sure if manual intervention is required for Travis to include my third commit and cancel the builds for the second commit.