Web++: A C++ Web Framework
132 subscribers
440 photos
36 videos
20 files
177 links
Web++ Framework (A C++ web framework to ease the pain of web development)

Using modern C++20/23.
GitHub: https://github.com/the-moisrex/webpp

I've been working on this project since 2019...
Download Telegram
With this, you can check the constraints of a function call arguments inside a C++20 requires clause.

I've been looking for such a thing for a long time until I saw this tweet; I then updated it to what you see in the picture and I also added it to my web framework.

Example Usage:

template <typename T>
concept fooable =
requires(T t) {
t.foo(
requires_arg(std::integral),
requires_arg(std::same_as<short>)
);
};


Source on GitHub
My updated version on Godbolt
Initial idea on Godbolt
With this, you can pass concepts as a template parameter easily.

Source code on Github
Example on Godbolt
I changed the license to MIT.
Web++: A C++ Web Framework
I changed the license to MIT.
Should I change the license to BSL? What do you think?
A sign that tells me I should write more tests now, but I want more features instead 😅
This media is not supported in your browser
VIEW IN TELEGRAM
Here's a couple of days of me working on this project using Termux on Android. I've got 3 months of these now.

I've been recording them using asciinema and what you see above is merely a replay of them.
😁1
alloc_deleter in boost smart_ptr is not move assignable,
thus std::unique_ptr<T, alloc_deleter> is not,
thus variant<..., unique_ptr<..., alloc_deleter>> is not,
thus vector<variant>::emplace(iter, ...) can't move stuff around!

Should alloc_deleter be move-assignable?

The tweet
Web++: A C++ Web Framework
alloc_deleter in boost smart_ptr is not move assignable, thus std::unique_ptr<T, alloc_deleter> is not, thus variant<..., unique_ptr<..., alloc_deleter>> is not, thus vector<variant>::emplace(iter, ...) can't move stuff around! Should alloc_deleter be move…
The story went on to the point that I made a template new type called "dynamic" which is an allocator-aware type.

The problem that I got with it right now is that where I tend to use that type is where the 1th template parameter will be an incomplete type.

That led me to adding checks to see if a type is_complete. But now I don't think that's the right solution here.

I found a compiler bug along the way too.
Oh that beautiful red color of failure; it means I successfully passed the compile-time errors :)
My query builder so far 🙈😅
Implemented my own std::function alternative (which is allocator-aware) called istl::function and it's beating std::function's performance with the default std::allocator.

Read more about its performance here
✔️ SQL Query Builder tests are passing
✔️ istl::function tests are passing

1. Next steps are to write more tests for SQL Query Builder and then solve them of course so we can have a more stable SQL Database support system inside this.

2. After that, I might start working on a new, dynamic router. The current router is static and it's good but you probably can't use it inside a source file and thus that would mean your whole application essentially will have to be a big header-only executable. So a dynamic router is necessary.
I probably will use the recently made istl::function in there too.
Web++: A C++ Web Framework
Implemented my own std::function alternative (which is allocator-aware) called istl::function and it's beating std::function's performance with the default std::allocator. Read more about its performance here
Some of istl::function properties so far:

- allocator-aware
- Small stack size (alloc size + void*)
- no internal SOO, you can use stack_allocator instead
- beats std::function at benchmarks, and gets beaten by it at the same time
Live stream started
Live stream finished (1 minute)
Live stream started
Live stream finished (1 minute)