hython
FunctionalPlus
hython | FunctionalPlus | |
---|---|---|
2 | 10 | |
572 | 2,001 | |
- | - | |
10.0 | 7.7 | |
almost 7 years ago | 16 days ago | |
Haskell | C++ | |
GNU General Public License v3.0 only | Boost Software License 1.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
hython
-
Leaving Haskell Behind
This really resonates with me.
I’ve been using it in a decidedly industrial application for about 1.5 years now. I had some fairly significant experience with it prior (https://github.com/mattgreen/hython).
For the first time in a long time (20 years experience) I’ve needed to learn a significant amount of things. It’s a combo of the domain and the language. It’s rather exhilarating, and also exhausting. Could also be a lot to bite off on with a busy home life too.
Regardless, the language is brilliant. My manager exhorts me to generally write in a top-down manner a lot because Haskell’s flexibility really conveys dev intent well, so think hard about how it should read, and start from there. This is a huge mindset shift from most langs, where you can feel your brain shut off to save cycles as you type “function” over and over. It really feels like it is meant to be write-friendly. Point-free functions are wonderfully terse to write. I joke that TH is my favorite language: a type-checked macro language that lets me write almost anything I want.
And there’s the rub: even with controlled effects via monads, the syntax is still hard for me to scan and read. I don’t know if this comes eventually or what, but this feels like a function of how dense a line could be. I miss early return dearly, and understand why it isn’t a thing (except if you have a MonadZero at hand) but I know it’s a syntactic transformation that won’t make it in. I really miss the amazing Rust LSP. Haskell’s recently lost the ability to flesh out pattern matches due to Haskell internals shifting with 9.x. I still hate and screw up stacking monads. Compile times can be brutal, esp if you hit the lens library.
I really think the community is one of the strongest group of programmers I’ve already seen. I don’t want to belabor this and dwell on the big brain memes, it’s more that they think hard on this stuff and actually push forward, vs just telling each other that web frameworks are rocket science and it’s impossible to do better than what it exists.
Ultimately, Haskell fits like a glove for our domain of program analysis. Beyond that, I’d still be a bit wary. I’m still thirsty for a PL that is essentially OCaml but with a better syntax. But that’s just me.
- Dhall: A Gateway Drug to Haskell
FunctionalPlus
-
Leaving Haskell Behind
Hoogle is really amazing!
Inspired by it, I implemented something similar for FunctionalPlus (a functional-programming library for C++): https://www.editgym.com/fplus-api-search/
I'd love to see more projects taking this path too. :)
-
C++ algorithm helpers - kdalgorithms
You can get a feel for it on its api search site: as an example, enter these queries:
-
C++20 Ranges The Key Advantage - Algorithm Composition
I use a library called FunctionalPlus daily.
-
Why C++ for everything?
As idiomatic, I will try to adopt as much as possible purely functional programming in C++ by using https://github.com/Dobiasd/FunctionalPlus . Do you have by any chance any alternative suggestion?
-
Building a Dual Shared and Static Library with CMake
Any project CML file that is more complex than this is mismanaged and needs fixing asap. There is absolutely no reason to make CML files describing requirements of a library substantially more complex other than if you have a vendetta against yourself, package maintainers and your users.
-
CLion IDE
FunctionalPlus - 30 lines for usage requirements + 60 for install rules: just simple commands creating a target, setting properties and defining install rules. Hmm, nothing unholy here.
-
Integrating sanitizers into your CI workflow
Another option is to use a superbuild CML where you can do all the nasty, platform specific things. Example of a superbuild CML.
-
Best practice unit tests + examples with cmake
You can copy this project structure: https://github.com/Dobiasd/FunctionalPlus
- CMake and the Future of C++ Package Management
What are some alternatives?
C++ B-tree - Git mirror of the official (mercurial) repository of cpp-btree
v8pp - Bind C++ functions and classes into V8 JavaScript engine
dynamic_bitset - Simple Useful Libraries: C++17/20 header-only dynamic bitset
Hashmaps - Various open addressing hashmap algorithms in C++
function2 - Improved and configurable drop-in replacement to std::function that supports move only types, multiple overloads and more
sparsehash - C++ associative containers
pybind11 - Seamless operability between C++11 and Python
LSHBOX - A c++ toolbox of locality-sensitive hashing (LSH), provides several popular LSH algorithms, also support python and matlab.
nvim-dap - Debug Adapter Protocol client implementation for Neovim
CPM.cmake - 📦 CMake's missing package manager. A small CMake script for setup-free, cross-platform, reproducible dependency management.
flat_map - Header only associative linear container.
sparsepp - A fast, memory efficient hash map for C++