9 ms·
Plywood: A New Cross-Platform Open Source C++ Framework
- anarchyrucks 6y agoTitle needs an edit to clarify what kind of framework this is.
- chrisseaton 6y agoFramework... for what? Turns out it's a framework for writing games, graphics, sound, that kind of thing.
- MaxBarraclough 6y agoApparently it includes a partial C++ parser too.
- Zolomon 6y agoFrom the article: "Please note that Plywood, by itself, is not a game engine! It’s a framework for building all kinds of software using C++."
- chrisseaton 6y agoIt seems pretty clearly focused on writing games and similar doesn’t it? Given those are all the examples.
- kroltan 6y ago> Given those are all the examples https://github.com/arc80/plywood/tree/master/repos/plywood/src/apps https://github.com/arc80/plywood/tree/master/repos/plywood/s... A video renderer, audio synthesis, parsing, and web server. Linked right from the article. The first is even the first demo in the article.
- eismcc 6y agoLibrary from authors Arc80 game engine. Author appears to significant game engine experience: I’ve worked in the game industry for 14 years. Until 2015, I worked as a Technical Architect at Ubisoft Montreal, on franchises such as Rainbow Six, Child of Light and Assassin’s Creed. Before that, I spent a few years developing desktop graphics software at Corel.
- petey283 6y ago> Most open source C++ projects are libraries that are meant to be integrated into other applications. Plywood is the opposite of that: It gives you a workspace into which source code and libraries can be integrated. A single Plywood workspace can contain several applications – a webserver, a game engine, a command-line tool. Plywood simplifies the task of building and sharing code between them. I think this works as a good overview.
- badsectoracula 6y agoWell, that is implied by the title: "Plywood: A New [...] Framework". Frameworks are by definition about providing the core elements to build your stuff on top of them[0]. [0] https://en.wikipedia.org/wiki/Software_framework https://en.wikipedia.org/wiki/Software_framework
- craftinator 6y agoIt has been my experience that most software posted on HN has little description of what it does, and no description of why it exists. The parent comment was highlighting the excellently concise mission statement written on the first page. I wish every project would do as well.
- arzel 6y agoAgreed. It seems that people love to just throw around “library” “language” and “framework” now, but not know the differences.
- deleted 6y ago[deleted]
- wtracy 6y agoThe word "framework" by itself provides no indication of how specialized the tool is, or what problem(s) it aims to solve. The above description indicates that it is a very general-purpose framework (handling things as disparate as game engines and web servers) and that it aims to enable code reuse, not just eliminate boilerplate code.
- BruceEel 6y ago> Runtime reflection is, in my opinion, the biggest missing feature in standard C++. Opinions?
- jfkebwjsbx 6y agoWhat is definitely missing is compile time reflection. I don’t think many devs care about the runtime one.
- pjmlp 6y agoWe can anyway generate the runtime one at compile time, that is how many Java and .NET compiler plugins and annotation processors work.
- jfkebwjsbx 6y agoExactly, with a compile-time one it would be relatively easy to build portable runtime reflection frameworks/libs, for those that really need it. Otherwise it would be a feature like RTTI that everyone "hates" if enabled by default.
- preshing 6y agoThis might come true some day, but it seems not in C++20 and in recent static reflection proposals there was no way to distinguish reflected from non-reflected members in the same class.
- pjmlp 6y agoYep that is post C++20. I am hardly a C++ user nowadays, but such stuff interests me, because the Windows Development team managed to push C++/WinRT as replacement for C++/CX, but are declining any improvement to Visual Studio support (at least comparable to C++/CX) until ISO C++ gets similar capabilities to C++/CX. So given that some C++ usage is required depending on which APIs you want to access from .NET, you can imagine there are many WinDevs not very happy with the downgrade in tooling support. Back to your point, in what cases might such distinction be relevant?
- billfruit 6y agoDoes it include UI components? Or is it designed to be used with third-party UI components like QT?
- wtracy 6y agoNo. It looks to be focused on projects that do not use any UI toolkit at all. CLI applications and games, basically.
- FlyingSnake 6y agoWill it replace the now defunct Djinni framework from Dropbox?
- wtracy 6y agoPlywood is C++ only, so no.
- deleted 6y ago[deleted]
- rambojazz 6y ago> I’m releasing part of that game engine as an open source framework I'm curious what this means exactly. Does it mean that requires the non-open source part to function? Or is it a standalone part of the non-open source engine that can be used by other projects (like a library)?
- preshing 6y agoIt's the latter: A standalone framework that can be used by other projects. It's like a library (or suite of libraries) with separate modules for platform abstraction, containers, JSON, etc. A bit more "batteries included" than vanilla C++, and you only link with what you use. These modules are organized into a workspace that helps set up new build pipelines, to compensate for the lack of a standard build system in C++.
- flohofwoe 6y agoMy guess would be it's the parts of the game that are generally useful and polished enough to be used as the base for other games (or non-game applications). Games often have parts that don't quite belong to the engine layer, but also not strictly to this specific game. It might be small adhoc helper modules, glue code to other 3rd party libraries or similar random stuff.
- hobo_mark 6y agoI see often, including in this case, that GitHub contains only a squashed version of the development history. Assuming that the developer keeps working on top of the original branch with full history, is there a way to keep a squashed and a not-squashed branch in sync automatically?
- bluejekyll 6y agoWhen you say “squashed” vs “not-squashed”, are you referring to the “squash” merge feature in Github? If so, that turns a PR branch into a single commit onto the target branch (master). Unless the old branches are kept around, the unsquashed commits won’t be available.
- hobo_mark 6y agoI'm referring to the squash feature of git rebase. The developer collapsed years of commits into one before pushing to GitHub, I am wondering if there is a way to keep working on top of the original history privately, and pushing to the "clean" history on GitHub, without having to cherry-pick all new commits for GitHub by hand.
- wadim 6y agoI guess the "easiest" solution would be a clean and separate "github" directory where no work happens and where you just cp all your changes from your actual working directory into. If they version it, I could also imagine using master as an orphan branch and just cherry-pick the changes between two tags or commits into it.
- mook 6y agogit replace¹ should be able to do it; otherwise, grafts² work too. ¹ https://git-scm.com/docs/git-replace https://git-scm.com/docs/git-replace ² https://git.wiki.kernel.org/index.php/GraftPoint https://git.wiki.kernel.org/index.php/GraftPoint
- hobo_mark 6y ago
- morio 6y agoBrowsing over the code I'd say it's solid and seems to have been used in production. Just about the right amount of abstraction for practical use. Some parts could be replaced by standard C++ library functionality by now. My biggest issue so far: Use of bare pointers, especially in parser code. This should not appear in new code written in 2020. I'm kind of baffled by that as he seems to use stuff like std::move. This is no replacement for either Unreal or Unity for sure, it's pretty basic in functionality.
- phaedrus 6y agoI think "no bare pointers, ever" is overly dogmatic. Raw pointers still have a place, especially in game programming. The standard smart pointer types cover many common situations, but do not cover all situations (nor do I think were intended to).
- h0l0cube 6y ago> The standard smart pointer types cover many common situations, but do not cover all situations (nor do I think were intended to). They also add a level of indirection, which can manifest as cache misses. If you're iterating through large numbers of objects, memory locality can be a huge gain.
- uluyol 6y agoThis isn't a question of smart vs raw pointers, it's a question of pointer vs value. A std::vector<T> is considered good code in modern C++ and should often be preferred over a std::vector<std::unique_ptr<T>>.
- h0l0cube 6y ago> it's a question of pointer vs value Yeah, the indirection I was referring to generalises to this. Edit: You might be saying that STL data structures could have been used by the author to alleviate the memory locality issue, but as noted in another thread, it's common to use custom STL implementations or use entirely custom memory management in performance critical applications, to reduce on memory allocation frequency, memory usage and/or fragmentation. Or maybe the author is just more 133t than thou.
- andi999 6y agoIt is not just open source, it is under MIT license... so now I am interested
- andi999 6y agoOk, I am curious about the downvotes What is wrong with my comment. Open source can mean a lot (e.g. gpl) some of which cannot be used for production (in my and some other ppls environment). This one can, which is great. Reading on mobile it took 2 minutes to find out. So I thought i spare other ppl the hassle to find out themselves. And yes I believe licensing matter, and open source is too general a term.
- jonnypotty 6y agoYou seemed to be suggesting the open source might have some not good things about it. You can't do that ;)
- nightowl_games 6y agoI usually wouldn't care about yet another c++ game framework, but this author's prototypes are so impressive and artistic that it makes me believe he's doing something more than just playing around with technology.
- deleted 6y ago[deleted]
- huxingyi 6y agoThis framework has the potential to become another Qt if UI is been added. The coding style and document[0] are solid and similar with Qt[1]. Giving the Qt is heading in an unpopular way[2], I am looking forward to this framework. [0] https://plywood.arc80.com/docs/modules/runtime/api/string/String https://plywood.arc80.com/docs/modules/runtime/api/string/St... [1] https://doc.qt.io/qt-5/qstring.html https://doc.qt.io/qt-5/qstring.html [2] https://www.qt.io/blog/qt-offering-changes-2020 https://www.qt.io/blog/qt-offering-changes-2020