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

TMP refactoring in Kvasir #90

Open
odinthenerd opened this issue Nov 30, 2016 · 2 comments
Open

TMP refactoring in Kvasir #90

odinthenerd opened this issue Nov 30, 2016 · 2 comments

Comments

@odinthenerd
Copy link
Member

There are still a good number of things in Kvasir which are not in line with modern TMP style. Especially offending are the uppercase nested Types (rather than lowercase) and the idiom of returning by inheritance. This is actually starting to infect things outside of core like MakeAction in Io and should be refactored soon.

Things could also run much faster if we made many more type empty inside and relied on pattern matching to work on them (instantiating is less costly for the compiler if the struct is truly empty).

@CvRXX
Copy link

CvRXX commented Nov 30, 2016 via email

@odinthenerd
Copy link
Member Author

I think a lot of the current TMP elite are involved in brigand, so there is little chance that it will be deprecated without someone coming up with a paradigm shifting change in highly performant meta programming. Therefore its not possible/performant to wrap the whole lib, for example lambdas could drastically change and no amount of wrapping can abstract that. What we could do is alias everything in a kvasir::mpl and only allow trivial eager lambdas MP11 style.

I do agree that peppering the lib with brigand::list is probably not good for long term stability. In a general sense we need to be especially careful with dependencies which come from other domains as they could change in future in ways we cannot support on microcontrollers.

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

2 participants