Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

flintxx tests fail to compile with --enable-cxx #753

Closed
dimpase opened this issue May 30, 2020 · 36 comments
Closed

flintxx tests fail to compile with --enable-cxx #753

dimpase opened this issue May 30, 2020 · 36 comments
Milestone

Comments

@dimpase
Copy link
Contributor

dimpase commented May 30, 2020

I get

make[1]: Entering directory '/usr/obj/work/flint2/flintxx'
    CC   ../build/flintxx/test/t-arithxx
    CC   ../build/flintxx/test/t-codegen
    CC   ../build/flintxx/test/t-expression
    CC   ../build/flintxx/test/t-flint_classes
    CC   ../build/flintxx/test/t-fmpq_matxx
    CC   ../build/flintxx/test/t-fmpq_polyxx
    CC   ../build/flintxx/test/t-fmpqxx
    CC   ../build/flintxx/test/t-fmpz_matxx
    CC   ../build/flintxx/test/t-fmpz_mod_polyxx
    CC   ../build/flintxx/test/t-fmpz_poly_matxx
    CC   ../build/flintxx/test/t-fmpz_poly_qxx
    CC   ../build/flintxx/test/t-fmpz_polyxx
    CC   ../build/flintxx/test/t-fmpzxx
    CC   ../build/flintxx/test/t-forwarding
    CC   ../build/flintxx/test/t-ltuple
test/t-fmpz_polyxx.cpp:323:25: error: invalid operands to binary expression ('flint::fmpz_polyxx' (aka 'fmpz_polyxx_expression<operations::immediate, detail::fmpz_poly_data>') and 'typename std::__lazy_enable_if<std::is_arithmetic<int>::value && std::is_arithmetic<unsigned long>::value, std::__promote<int, unsigned long> >::type' (aka 'double'))
    tassert(r*f + s == g*pow(2, d));
                       ~^~~~~~~~~~
/usr/obj/work/flint2/flintxx/test/helpers.h:29:11: note: expanded from macro 'tassert'
    if (!(expr)) \
          ^~~~
/usr/obj/work/flint2/flintxx/expression.h:561:1: note: candidate template ignored: substitution failure [with Expr1 = flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>, Expr2 = double]: no type named 'type' in 'flint::mp::enable_if<flint::traits::is_implemented<flint::rules::UNIMPLEMENTED>, flint::detail::nary_op_helper_step2<flint::rules::UNIMPLEMENTED, flint::operations::times, flint::tuple<const flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data> &, flint::tuple<const double &, flint::empty_tuple> > >::return_t>'
operator*(const Expr1& e1, const Expr2& e2)
^
test/t-fmpz_polyxx.cpp:326:25: error: invalid operands to binary expression ('flint::fmpz_polyxx' (aka 'fmpz_polyxx_expression<operations::immediate, detail::fmpz_poly_data>') and 'typename std::__lazy_enable_if<std::is_arithmetic<int>::value && std::is_arithmetic<unsigned long>::value, std::__promote<int, unsigned long> >::type' (aka 'double'))
    tassert(r*f + s == g*pow(2, d));
                       ~^~~~~~~~~~
/usr/obj/work/flint2/flintxx/test/helpers.h:29:11: note: expanded from macro 'tassert'
    if (!(expr)) \
          ^~~~
/usr/obj/work/flint2/flintxx/expression.h:561:1: note: candidate template ignored: substitution failure [with Expr1 = flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>, Expr2 = double]: no type named 'type' in 'flint::mp::enable_if<flint::traits::is_implemented<flint::rules::UNIMPLEMENTED>, flint::detail::nary_op_helper_step2<flint::rules::UNIMPLEMENTED, flint::operations::times, flint::tuple<const flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data> &, flint::tuple<const double &, flint::empty_tuple> > >::return_t>'
operator*(const Expr1& e1, const Expr2& e2)
^
test/t-fmpz_polyxx.cpp:329:25: error: invalid operands to binary expression ('flint::fmpz_polyxx' (aka 'fmpz_polyxx_expression<operations::immediate, detail::fmpz_poly_data>') and 'typename std::__lazy_enable_if<std::is_arithmetic<int>::value && std::is_arithmetic<unsigned long>::value, std::__promote<int, unsigned long> >::type' (aka 'double'))
    tassert(r*f + s == g*pow(2, d));
                       ~^~~~~~~~~~
/usr/obj/work/flint2/flintxx/test/helpers.h:29:11: note: expanded from macro 'tassert'
    if (!(expr)) \
          ^~~~
/usr/obj/work/flint2/flintxx/expression.h:561:1: note: candidate template ignored: substitution failure [with Expr1 = flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>, Expr2 = double]: no type named 'type' in 'flint::mp::enable_if<flint::traits::is_implemented<flint::rules::UNIMPLEMENTED>, flint::detail::nary_op_helper_step2<flint::rules::UNIMPLEMENTED, flint::operations::times, flint::tuple<const flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data> &, flint::tuple<const double &, flint::empty_tuple> > >::return_t>'
operator*(const Expr1& e1, const Expr2& e2)
^
    CC   ../build/flintxx/test/t-mp
3 errors generated.
make[1]: *** [../Makefile.subdirs:88: ../build/flintxx/test/t-fmpz_polyxx] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/usr/obj/work/flint2/flintxx'
make: *** [Makefile:216: check] Error 2

This is with

./configure --prefix=/usr/obj/work --with-ntl=/home/dima/sagetrac-mirror/local --enable-cxx

and CC, CXX set to clang and clang++ (version 8.0.1) on OpenBSD 6.7.

I guess it is a pure C++ issue - how does one see the actual C++ invocations ?
If e.g. CXXFLAGS are ignored then a wrong -std= is used.

@wbhart
Copy link
Collaborator

wbhart commented May 30, 2020

You can see CXXFLAGS in Makefile presumably. Our C++ has a tendency to break C++ compilers.

However, perhaps @tthsqe12 can see something wrong.

@wbhart
Copy link
Collaborator

wbhart commented May 30, 2020

Does it work if you pass -std=c11 in CXXFLAGS?

@dimpase
Copy link
Contributor Author

dimpase commented May 30, 2020 via email

@wbhart
Copy link
Collaborator

wbhart commented May 30, 2020 via email

@wbhart wbhart added this to the flint-2.6 milestone May 30, 2020
@dimpase
Copy link
Contributor Author

dimpase commented May 31, 2020

I think you have a special verbose target in Makefile, so that make verbose <stuff> creates chatty output. So there is no ticket needed, apart from for documentation.

@dimpase
Copy link
Contributor Author

dimpase commented May 31, 2020

Please see #755 in relation with this.

@wbhart
Copy link
Collaborator

wbhart commented May 31, 2020

I take it this is fixed by your patch that I just merged?

@dimpase
Copy link
Contributor Author

dimpase commented May 31, 2020

still testing - it does not help that Flint tends to re-build and re-test everything :P

(and for the life of me I can't figure out how to test a subset of Flint - I'd probably need to modify some loop in Makefile to do this)

@wbhart
Copy link
Collaborator

wbhart commented May 31, 2020

If you just want to test a single Flint module it's: make check MOD=module_name

Flint uses dependency tracking, so I don't know why it's rebuilding everything, unless that's the standard behaviour of make.

@dimpase
Copy link
Contributor Author

dimpase commented May 31, 2020

No, #755 and #756 didn't help, it still fails (despite correct CXXFLAGS being put into Makefile by
./configure).

I also don't get verbose output for make verbose check MOD=flintxx.
(also not for make verbose check). A makfile bug.

Note that it appears that one gets C compiler compilling C++ files (cf. #753 (comment)) - I don't see how correct CXXFLAGS may be divined with this setup. Once the default std=c++<..> is not the one you need, it woud fail.

@wbhart
Copy link
Collaborator

wbhart commented May 31, 2020

You are right on both counts. The makefile is ignoring verbose when building tests (it works fine for the library).

And the C compiler is used to compile the flintxx tests.

Both are bugs. I think we need an EXTRA_CXX_TESTS and have it dealt with separately to the ordinary tests.

I'll have a go at fixing it on Tuesday (Monday is a public holiday). Then we'll have another rc.

@wbhart
Copy link
Collaborator

wbhart commented Jun 2, 2020

It turns out the C++ compiler is used to compile the flintxx tests. What was wrong was the quiet mode was printing CC instead of CXX, but then calling CXX.

However, the C++ tests are all failing. I have literally no idea why this is. I can't make head nor tail of C++ error messages, and no -std=blah seems to fix it for me. It seems like the C++ language has changed in completely incompatible ways since our tests were written.

This is why Flint is a C library and not a C++ library. C++ is not a proper language.

Anyhow, I can't fix this. I'm hoping @tthsqe12 may be able to figure out how to fix all the broken C++ tests.

make check MOD=flintxx

@tthsqe12 can you let me know if you have time to look into this?

I will however look into the verbose mode, which is certainly not working as expected.

@tthsqe12
Copy link
Contributor

tthsqe12 commented Jun 2, 2020

Ok I will test this out asap.

@wbhart
Copy link
Collaborator

wbhart commented Jun 2, 2020

It took me really a lot of hours (Make is an absolutely terrible language), but I seem to have fixed the verbose build feature.

I can't do another rc until we sort out the failing C++ tests. I don't know how long that will take.

@wbhart
Copy link
Collaborator

wbhart commented Jun 2, 2020

@tthsqe12 the C++ test fail on ordinary Ubuntu linux with ordinary g++, no need to go to something as exotic as OpenBSD or clang.

@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020

I didn't know that your CI does not run a part of tests, namely the C++ ones.
I thought it's something specific to a relatively recent clang release.

Actually, clang/clang++ is the standard compiler on macOS with its Xcode, nothing too exotic.

@dimpase dimpase changed the title flintxx tests fail to compile with --enable-cxx and clang/clang++ 8.0.1 (OpenBSD) flintxx tests fail to compile with --enable-cxx Jun 3, 2020
@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020

here is the verbose error output (on linux with g++ 8.3.1)

g++ -pedantic -Wall -O2 -funroll-loops -g -mpopcnt  -I/mnt/opt/Sage/flint2 -I/mnt/opt/Sage/flint2/build -I/usr/local/include -I/usr/local/include -I/usr/local/include  -Wl,-rpath,/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,-rpath,/mnt/opt/Sage/flint2 test/t-fmpz_polyxx.cpp ../build/flintxx/../../test_helpers.o -o ../build/flintxx/test/t-fmpz_polyxx -L/mnt/opt/Sage/flint2 -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib -lflint -lmpfr -lgmp -lm -lntl -lpthread  -MMD -MP -MF ../build/flintxx/test/t-fmpz_polyxx.d -MT "../build/flintxx/test/t-fmpz_polyxx" -MT "../build/flintxx/test/t-fmpz_polyxx.d"
In file included from test/t-fmpz_polyxx.cpp:19:
test/t-fmpz_polyxx.cpp: In function ‘void test_functions()’:
test/t-fmpz_polyxx.cpp:323:25: error: no match for ‘operator*’ (operand types are ‘flint::fmpz_polyxx’ {aka ‘flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>’} and ‘__gnu_cxx::__promote_2<int, long unsigned int, double, double>::__type’ {aka ‘double’})
     tassert(r*f + s == g*pow(2, d));
                        ~^~~~~~~~~~
/mnt/opt/Sage/flint2/flintxx/test/helpers.h:29:11: note: in definition of macro ‘tassert’
     if (!(expr)) \
           ^~~~
In file included from /mnt/opt/Sage/flint2/fmpzxx.h:19,
                 from /mnt/opt/Sage/flint2/fmpz_polyxx.h:21,
                 from test/t-fmpz_polyxx.cpp:16:
/mnt/opt/Sage/flint2/flintxx/expression.h:561:1: note: candidate: ‘template<class Expr1, class Expr2> typename flint::detail::binary_op_helper<Expr1, flint::operations::times, Expr2>::enable::type flint::operator*(const Expr1&, const Expr2&)’
 operator*(const Expr1& e1, const Expr2& e2)
 ^~~~~~~~
/mnt/opt/Sage/flint2/flintxx/expression.h:561:1: note:   template argument deduction/substitution failed:
/mnt/opt/Sage/flint2/flintxx/expression.h: In substitution of ‘template<class Expr1, class Expr2> typename flint::detail::binary_op_helper<Expr1, flint::operations::times, Expr2>::enable::type flint::operator*(const Expr1&, const Expr2&) [with Expr1 = flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>; Expr2 = double]’:
test/t-fmpz_polyxx.cpp:323:5:   required from here
/mnt/opt/Sage/flint2/flintxx/expression.h:561:1: error: no type named ‘type’ in ‘flint::detail::nary_op_helper<flint::operations::times, flint::tuple<const flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>&, flint::tuple<const double&, flint::empty_tuple> > >::enable’ {aka ‘struct flint::mp::enable_if<flint::traits::is_implemented<flint::rules::UNIMPLEMENTED>, flint::detail::nary_op_helper_step2<flint::rules::UNIMPLEMENTED, flint::operations::times, flint::tuple<const flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>&, flint::tuple<const double&, flint::empty_tuple> > >::return_t>’}
In file included from test/t-fmpz_polyxx.cpp:19:
test/t-fmpz_polyxx.cpp:326:25: error: no match for ‘operator*’ (operand types are ‘flint::fmpz_polyxx’ {aka ‘flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>’} and ‘__gnu_cxx::__promote_2<int, long unsigned int, double, double>::__type’ {aka ‘double’})
     tassert(r*f + s == g*pow(2, d));
                        ~^~~~~~~~~~
/mnt/opt/Sage/flint2/flintxx/test/helpers.h:29:11: note: in definition of macro ‘tassert’
     if (!(expr)) \
           ^~~~
In file included from /mnt/opt/Sage/flint2/fmpzxx.h:19,
                 from /mnt/opt/Sage/flint2/fmpz_polyxx.h:21,
                 from test/t-fmpz_polyxx.cpp:16:
/mnt/opt/Sage/flint2/flintxx/expression.h:561:1: note: candidate: ‘template<class Expr1, class Expr2> typename flint::detail::binary_op_helper<Expr1, flint::operations::times, Expr2>::enable::type flint::operator*(const Expr1&, const Expr2&)’
 operator*(const Expr1& e1, const Expr2& e2)
 ^~~~~~~~
/mnt/opt/Sage/flint2/flintxx/expression.h:561:1: note:   template argument deduction/substitution failed:
/mnt/opt/Sage/flint2/flintxx/expression.h: In substitution of ‘template<class Expr1, class Expr2> typename flint::detail::binary_op_helper<Expr1, flint::operations::times, Expr2>::enable::type flint::operator*(const Expr1&, const Expr2&) [with Expr1 = flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>; Expr2 = double]’:
test/t-fmpz_polyxx.cpp:326:5:   required from here
/mnt/opt/Sage/flint2/flintxx/expression.h:561:1: error: no type named ‘type’ in ‘flint::detail::nary_op_helper<flint::operations::times, flint::tuple<const flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>&, flint::tuple<const double&, flint::empty_tuple> > >::enable’ {aka ‘struct flint::mp::enable_if<flint::traits::is_implemented<flint::rules::UNIMPLEMENTED>, flint::detail::nary_op_helper_step2<flint::rules::UNIMPLEMENTED, flint::operations::times, flint::tuple<const flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>&, flint::tuple<const double&, flint::empty_tuple> > >::return_t>’}
In file included from test/t-fmpz_polyxx.cpp:19:
test/t-fmpz_polyxx.cpp:329:25: error: no match for ‘operator*’ (operand types are ‘flint::fmpz_polyxx’ {aka ‘flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>’} and ‘__gnu_cxx::__promote_2<int, long unsigned int, double, double>::__type’ {aka ‘double’})
     tassert(r*f + s == g*pow(2, d));
                        ~^~~~~~~~~~
/mnt/opt/Sage/flint2/flintxx/test/helpers.h:29:11: note: in definition of macro ‘tassert’
     if (!(expr)) \
           ^~~~
In file included from /mnt/opt/Sage/flint2/fmpzxx.h:19,
                 from /mnt/opt/Sage/flint2/fmpz_polyxx.h:21,
                 from test/t-fmpz_polyxx.cpp:16:
/mnt/opt/Sage/flint2/flintxx/expression.h:561:1: note: candidate: ‘template<class Expr1, class Expr2> typename flint::detail::binary_op_helper<Expr1, flint::operations::times, Expr2>::enable::type flint::operator*(const Expr1&, const Expr2&)’
 operator*(const Expr1& e1, const Expr2& e2)
 ^~~~~~~~
/mnt/opt/Sage/flint2/flintxx/expression.h:561:1: note:   template argument deduction/substitution failed:
/mnt/opt/Sage/flint2/flintxx/expression.h: In substitution of ‘template<class Expr1, class Expr2> typename flint::detail::binary_op_helper<Expr1, flint::operations::times, Expr2>::enable::type flint::operator*(const Expr1&, const Expr2&) [with Expr1 = flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>; Expr2 = double]’:
test/t-fmpz_polyxx.cpp:329:5:   required from here
/mnt/opt/Sage/flint2/flintxx/expression.h:561:1: error: no type named ‘type’ in ‘flint::detail::nary_op_helper<flint::operations::times, flint::tuple<const flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>&, flint::tuple<const double&, flint::empty_tuple> > >::enable’ {aka ‘struct flint::mp::enable_if<flint::traits::is_implemented<flint::rules::UNIMPLEMENTED>, flint::detail::nary_op_helper_step2<flint::rules::UNIMPLEMENTED, flint::operations::times, flint::tuple<const flint::fmpz_polyxx_expression<flint::operations::immediate, flint::detail::fmpz_poly_data>&, flint::tuple<const double&, flint::empty_tuple> > >::return_t>’}
make[1]: *** [../Makefile.subdirs:94: ../build/flintxx/test/t-fmpz_polyxx] Error 1

@tthsqe12
Copy link
Contributor

tthsqe12 commented Jun 3, 2020

Oh, I can reproduce the error. It is just a matter of finding the offending commit/code.

@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020

It might have stopped working just because C++ compilers got updated in the past years, and what worked on g++4 in 2013 is not working on g++8 in 2020, as the targeted by default C++ standard got bumped up.

@tthsqe12
Copy link
Contributor

tthsqe12 commented Jun 3, 2020

Indeed. The offending "commit" was my upgrade from gcc5 to gcc7.

@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020

C++ is not a proper language.

Just like English :-)

One needs to talk about C++x, with x in {98,11,14,17} (at least). And different C++ compilers have different defaults for x, i.e. without an explict -std=c++<x> in CXXFLAGS. And there is also -std=gnu++..., as gcc project has had its own pass at extending C++98.

@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020

I got an easy fix (works at least with clang++8) - testing now.

diff --git a/flintxx/test/t-fmpz_polyxx.cpp b/flintxx/test/t-fmpz_polyxx.cpp
index 36e0c81a4..2d87f94ed 100644
--- a/flintxx/test/t-fmpz_polyxx.cpp
+++ b/flintxx/test/t-fmpz_polyxx.cpp
@@ -12,6 +12,7 @@
 #include <iostream>
 #include <sstream>
 #include <string>
+#include <functional>
 
 #include "fmpz_polyxx.h"
 #include "nmod_polyxx.h"
@@ -320,13 +321,13 @@ test_functions()
     f *= 2;
     ulong d = 0;
     ltupleref(r, s, d) = pseudo_divrem(g, f);
-    tassert(r*f + s == g*pow(2, d));
+    tassert(r*f + s == g*pow(2, std::cref(d)));
     r = 0; r = 0; d = 0;
     ltupleref(r, s, d) = pseudo_divrem_basecase(g, f);
-    tassert(r*f + s == g*pow(2, d));
+    tassert(r*f + s == g*pow(2, std::cref(d)));
     r = 0; r = 0; d = 0;
     ltupleref(r, s, d) = pseudo_divrem_divconquer(g, f);
-    tassert(r*f + s == g*pow(2, d));
+    tassert(r*f + s == g*pow(2, std::cref(d)));
 
     tassert(pseudo_div(g, f).get<0>() == r);
     tassert(pseudo_rem(g, f).get<0>() == s);

@tthsqe12
Copy link
Contributor

tthsqe12 commented Jun 3, 2020

I decided to fix it a better way. See if everything thing in the new pull request is good for you.

@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020

this would pin it to the range c++11 - c++20, but, well...

@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020

decided to fix it a better way

not sure how it's better. It's a different test you've implemented. My fix merely helps the compiler to deduce the correct types, your fix replaces the test with an easier test.

@tthsqe12
Copy link
Contributor

tthsqe12 commented Jun 3, 2020

Sorry. I am not familiar with pow. Was the issue that pow(2,d) could be integral or it could floating point? How can you make it be integral?
I hope that once the code is like this
* fmpz(pow(2, d) + 0.5)
everything will be fine.

@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020

The issue with pow(2,d) is that the template evaluation code in flintxx/expression chokes on it, but it does not choke on a slightly easier for it to digest pow(2,std::cref(d)). Note that

-    tassert(r*f + s == g*pow(2, d));
+    ulong ddd = 1.0;
+    tassert(r*f + s == g*ddd);

compiles just fine, so one can multiply a flint poly with a double (don't know why, though)

@tthsqe12
Copy link
Contributor

tthsqe12 commented Jun 3, 2020

There are several issues here that I am not fully understanding. What a headache.
The d is a ulong. The first question is: what becomes of pow(2,d)? It is my understanding that both 2 and d are converted to double and the return is a double.
So lets assume now that we are dealing with fmpz_poly * double. There is no fmpz_poly_mul_d function so the double has to be converted back to a ulong, slong, or fmpz. Who decides which? In order for the test code to have been passing in the past, this had to have been being decided somewhere ...

@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020 via email

@tthsqe12
Copy link
Contributor

tthsqe12 commented Jun 3, 2020

Ok. Sounds like no one knows the return type of pow(int, ulong). I hope adding 0.5 to it and converting it to an fmpz is an acceptable solution to the test code without relying on any particular version of c++.

@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020 via email

@tthsqe12
Copy link
Contributor

tthsqe12 commented Jun 3, 2020

Ok. This is probably something for @wbhart to keep in mind for 2.7.

@wbhart
Copy link
Collaborator

wbhart commented Jun 3, 2020

I will close this now, as I believe the substance of it has been dealt with. Obviously we still lack a maintainer for the C++ wrapper. It is just being maintained so it keeps passing its tests and no more. Volunteers welcome.

@wbhart wbhart closed this as completed Jun 3, 2020
@dimpase
Copy link
Contributor Author

dimpase commented Jun 3, 2020

IMHO this needs a follow-up issue, as this fix is just papering the problem over.

@wbhart
Copy link
Collaborator

wbhart commented Jun 3, 2020

You are of course welcome to open a separate issue explaining precisely what it is you would like to see implemented. But the C++ wrapper hasn't been maintained in years for lack of volunteers who know C++ well enough.

The version of Flint that was originally wrapped had about 120,000 lines of code and took 3 months of work, 9 hours a day to wrap in C++. Current Flint is nearly 500,000 lines of code. So unless there is one hell of a motivated contributor, I don't see a hell of a lot happening.

@dimpase
Copy link
Contributor Author

dimpase commented Jun 4, 2020 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants