
CIDLib: C++ Development Environment - ingve
https://github.com/DeanRoddey/CIDLib#cidlib---a-c-development-environment
======
anon4lol
I've been developing C/C++ for over 20 years on everything from large scale
high-performance clusters to 8 bit embedded devices. Most of my career I have
been consulting and I've had the opportunity to work in almost every domain,
and I've had to work with a lot of other developers.

My thoughts are this guy is type of the developer I hate to work with most.
The style and naming Windows and Borland C++ specific, so this probably grew
organically from Win3.1/NT. This probably pre-dates STL, but holy cow. Given
how he misuses some terminology, he is probably a self-taught programmer from
days of old.

Generally, when I see that a developer has decided to use their own typdefs to
represent intrinsic data types, it's a bad sign. However, what I see that this
guy created his OWN class as a replacement for bool, I know I'm going to be
rewriting a lot of code.

There is no way I would use this library, regardless of the terms.

~~~
DeanRoddey
It's designed to be portable. There needs to be well defined types that each
per-platform driver can define such that they always are the same.

It would have been ugly and asymmetric to have some done that way and some
not. So all fundamental types are defined as part of the library.

~~~
sytelus
There is a huge difference in actually being portable and “designed to be
portable”. I think library’s usefulness would increase many fold if former was
the case.

~~~
DeanCIDLib
Well, that's one of the reasons for open sourcing it. I'm no a Linux guy. But
I know the issues very well, having worked on a lot of portable code before.
And there's an existing platform driver for Linux already there, it's just
very old and needs to be caught up.

------
shafte
I think it's cool to see projects like this! It's sort of like an "alternate
history" for a C++ programming model. I agree that it doesn't seem immediately
useful for most projects, but that's okay :)

I hope the author publishes more explaining some of the architecture and
design choices and how they diverge from what the rest of the community has
come up with. At the very least it will be an interesting comparison.

------
dig1
Part from license:

> Do not host in any public way your own versions of this code, in whole or in
> part. This repository should be the single source for the code base.

Author basically killed option to send PRs via github. I'd suggest author to
use more thoughtful/professional licenses for this (LGPL) if he wants some
protection. Otherwise, I'd stay away from this.

------
Game_Ender
It's interesting to see code bases like this. It does sort of have it all,
custom build system, IDL, implementations of things like XML and JPEG. Very
symptomatic of the need slowly being filled in the C++ community for a popular
build system and package manager.

I hope the author reconsiders their custom license that prevents any public
forks of the code base. It's already very hard to get anything out of non-
standard monoliths like this, with a custom license that chance drops close to
zero.

~~~
badsectoracula
I have a feeling that the author doesn't really want people to get anything
out of the library in the first place but instead people build on it as a
monolith.

------
781
Not Invented Here Syndrome, level: over 9000

Since he mentioned wanting some 3D/gaming stuff, I randomly checked out his
vector3 class. It's not usable, due to the usage of float8. Games use float4.
And since it's not templated...

As for matrix4 multiplication, a core operation, it's beyond bad:
[https://github.com/DeanRoddey/CIDLib/blob/master/Source/AllP...](https://github.com/DeanRoddey/CIDLib/blob/master/Source/AllProjects/CIDMath/CIDMath_4By4Matrix.cpp#L40)

~~~
DeanRoddey
That vector/matrix code is ancient and hasn't been used for a long time. There
are obviously going to be some bits like that. I used to really be into
fractals and ray tracing and those were just done to support that.

Since there is currently no 3D graphics in the system, there hasn't been any
justification to really go back and make them better relative to a lot of
other things that are more immediately needed.

Hopefully, if someone wanted to get involved and develop a graphics library
they would start with those classes. Or just remove those altogether and make
them part of such a new subsystem.

------
CyberDildonics
This was posted to the cpp sub-reddit. The wacky non-standard license and the
denouncing of modern C++ are large red flags, as well as vague terms like
'Object Request Broker' and custom implementations of standards.

To be fair though, the custom implementations of standards could be very
useful if they can be made free of dependencies.

~~~
Someone
_”vague terms like 'Object Request Broker'”_

That’s more _dated_ than _vague_ , IMO. See
[https://en.wikipedia.org/wiki/Object_request_broker](https://en.wikipedia.org/wiki/Object_request_broker).

~~~
DeanRoddey
The ORB is incredibly powerful. There's good video on it on my Youtube channel
that demonstrates what it can do.

And the related IDL compiler also allows for very powerful enumerations, far
beyond what C++ itself offers.

One reason ORBs have never caught on in C++ is exactly because there's no
comprehensive, monolithic framework. It only works really in those scenarios.
When you have such a thing, then any class that supports the binary streaming
mixing can be passed back and forth to remote ORB calls.

It's at the foundation of the CQC layer which has MANY complicated
client/server interfaces. Without the ORB they would be a massive PITA. With
it, they are quite manageable.

------
mattnewport
This doesn't do a terribly good job at the moment of explaining why I might
want to investigate it further or consider using it. What are the advantages
it offers?

~~~
corysama
Agreed. A huge amount of text goes into explaining how much work it was to
make and tons about what it's _not_. But, I'm having a hard time finding
explanation of what it _is_.

~~~
CyberDildonics
He has done the same thing on the cpp subreddit with regards to his 'object
request broker'. Lots and lots of text talking about how many lines it is and
what it isn't, while never giving an example of a problem that it solves that
couldn't be done easier with other simpler and more established libraries.

~~~
corysama
It's a pretty common problem when explaining tech. _You_ (non-specific "you")
have spent so much time thinking about a topic that all knowledge about it is
assumed. _You_ feel the need to defend your position from misunderstanding and
misrepresentation. Contrasting it against other tech is of great interest to
_you_. Meanwhile, _I_ have no idea what you are talking about because you
haven't actually explained what it is. But, explaining this big, complicated
thing you've been working on forever is hard and could potentially expose you
to criticism. Much more fun to continue bragging about how it's
different/better than other people's stuff.

~~~
DeanRoddey
This is the kind of positive response that makes me glad I did this.

There's LOTS of descriptions out there of what ORBs are. I have a good video
about how it works and what it does. I can't put ten books worth of
explanation in a read me.

~~~
corysama
I don't need a book. I just need _something_. The word "ORB" is not even
present in the GitHub readme. You don't link your blog or your videos. You
know that the explanations are sitting there waiting for me. I don't and you
didn't tell me.

Here's a positive suggestion: In the GitHub readme, lead with the second
paragraph. The first paragraph is not important to anyone but you. Having it
as the project's intro makes you come off as a self-important wank.

Cut the first paragraph and the first sentence of the second out completely.
Cut the third and forth paragraphs as well. Keep the fifth "Because it doesn't
use the STL" paragraph, then skip straight to the Goals section. Rewrite it to
explain itself in concrete, positive assertions instead of what it's not and
what it's anti.

Portability should come next. Then Gotchas. But, Modern vs. Classical is
mostly a rant that doesn't help me understand your project. You've already
heard more than enough about the license :p

You've made something really cool. You have every right to be proud of it.
But, other people don't know how cool it is and they never will if you don't
improve how you communicate with them. It's not just a matter of stating the
facts. It's understanding their point of view and tailoring your communication
around that.

You are a busy person. You know that there's more stuff being published every
day than you could possibly even glance over. And, you know that most of that
stuff is useless crap created by self-important wanks. So, what would it take
to get you to invest the time to understand some random wank's project?

If you are like most people, you aren't going to sit down with a cup of tea
and read the backstory of some random project like it's a New Yorker article.
You are going to read the first paragraph, then briefly skip around the rest
of the doc before deciding to move on or not. It's the only efficient way to
filter through the fire hose of crap.

When writing your description, you need to respect the reader's time and
ignorance. They don't know the huge amount that you know. They especially
don't know why this project is worth their attention. Your job is to sell them
on your project by being as clear, concrete, brief and genuine as possible.

~~~
DeanCIDLib
I'll take another shot at it.

But on the ORB thing, wires got crossed there. There's no way I'd mention the
ORB in the read me. That's very important but small piece of the overall
thing. He was referring to some of the videos on my personal Youtube channel
where I talk about some of the technologies I've created as part of this
project. Some of them are related to the ORB.

Obviously, if you have never heard of an ORB before it might take a bit of
effort to understand. But I can't really explain in-depth the foundations of
technology concepts in a video. I can only give the basics and demonstrate how
I've implemented that technology.

Beyond that, it would require a bit of study on the reader's part, as it does
for pretty much all libraries of this type. Qt's 3D graphics docs probably
don't include a fundamental tutorial on modern graphics architectures, right?

~~~
corysama
Again, it doesn't need a book. Apparently the ORB feature is important enough
that it has been mentioned many times in the discussion of this project. But,
it's not given a single mention(note1) in the 1946 word description of the
project.

I'm trying to get across is that you need to figure out what makes this
project valuable from the point of view of the user and broadcast that loud
and clear.

"It is a complete environment with build tools, project definition language,
loadable text system, a virtual kernel to isolate it from the underlying OS,
up through a full set of 'standard libraries', wrappers around lots of common
functionality, UI framework, Object Request Broker and IDL compiler, VM based
OO macro language with IDE, custom implementations of many standards (XML,
PNG, ZLib, JSON, SMTP, HTTP, etc...), and lots of other functionality."

That tells me what this project is. [note1]Hey! Object Request Broker was even
in there and I didn't see it in all the noise. Make that paragraph into a
bullet list. It's really the most important part of the whole doc. If you have
videos, other docs, link them right there. That way a visitor should be able
to get a high-level impression of the project a glance. Not after interpreting
the entire doc as a holistic concept.

All of the backstory, theory, goals, etc... are only interesting at all after
they know that what they're dealing with and that it is actually worth
investigating. Then, after they're invested in the project, they might have
motivation to go elsewhere to read up on concepts like the ORB.

~~~
DeanCIDLib
OK, it's been updated.

~~~
corysama
Tremendous improvement!

Thank you for sharing your hard work with the world.

------
vkaku
I honestly think that having alternate implementations let people go back to
when they were written; They are important.

The common understanding would be "Hey, this is how it was implemented in the
standard, and it totally caught on because it made sense and everything else
did not."

But I do not believe in those arguments. I often look at alternate
libraries/implementations for readability or for lost-in-time features.

There's a reason I read EASTL and BSD code. It makes me refreshed, understand
nuances better and more importantly, know what I've been missing out on.

------
Hydraulix989
This is a textbook example of why Lean Startup exists.

------
jdsully
To those surprised, this is exactly what million LOC pre-modern C++ programs
looked like. Including the implementation of "basic" things. I thank god we're
not in that world anymore, but it wasn't all that long ago either.

------
jnwatson
This is a little programming time capsule. Before open source, you had little
choice but to build essentially everything yourself.

~~~
DeanCIDLib
Well, to be fair, I didn't do it because I had to, I did it because I wanted
to. General purpose object frameworks are what I enjoy doing.

The (very complex and large) automation system built on top of it was really
just because I needed something practical to do with all of the general
purpose code I'd developed. Though that then drove the development of a lot
more general purpose code.

------
glangdale
I am pleased to see that, among many other things, it comes with its own regex
implementation.

~~~
vortico
Regex is included in C++11, not sure why you'd need a library for that.

~~~
pgeorgi
"decades of work by the author"

presumably C++11 didn't exist back then.

~~~
vortico
So? It does now. Only as a museum piece is this project interesting, if that
even.

------
vortico
>CIDLib is the product of decades of work by the author

Shame to see it spent on this instead of virtually anything else. After
skimming this a bit, I feel that realistically no company, organization, or
individual should rely on this codebase due to its license and contribution by
only one individual. I'd rather use Boost or well-established and popular
third-party libraries to solve the problems this repo attempts to solve.

What if you're delivering software to a client and they find an issue with the
JSON parser? HA! Time to switch libraries, because you legally can't fix the
issue for them. What a horrible idea.

~~~
ktpsns
While that is a quite negative comment, it was also my first though. Even
worse, I've seen another codebase veeery similar to this one, implementing all
kind of stuff which is part of the standard library in "sane", I e. more
higher level programming languages (thinking of "batteries included" Python).

It looks like a trap where decades long C++ programmers go into: Programming
basic libraries which where done by other people so many times.

My assumption is that this happens because C++ libraries in general have a
steep learning curve (thinking of some templated boost libs) and the obvious
missing standard dependency management in CPP.

~~~
dleslie
In no small part it's because C++ has lacked a package manager. The barrier
for a library to become common and canonical is much larger as a result.

~~~
rienbdj
We also see remarkably shallow dependency graphs in the C++ world. Many
projects are only a few layers on top of Boost!

I made a few dot graphs if people are interested.

~~~
asveikau
How many layers atop boost would satisfy you? Boost seems pretty high level to
me, and not like it needs a lot of abstraction atop its ... abstractions.

This is where I see this weird disconnect between communities. A C person
doesn't want layers.

~~~
ktpsns
> A C person doesn't want layers.

Really? So why are C persons then using formatted output libraries (printf,
part of the standard library), libraries for regular expressions (PCRE), GUI
toolkits (Gtk+, sitting ontop of Glib)?

I absolutely second that in the C/C++ world, we see shallow layers of
abstraction, but nevertheless they are there. In my experience, the seperation
happens frequently because people seperate basics from their code, such as in
the given Glib/Gtk+ example.

~~~
asveikau
The sense I mean this in is "layers for no reason".

In GTK+ everything has a clear purpose:

* glib: Portable OO and data structures for C

* gdk: Interaction with the windowing system

* cairo: Drawing

* gtk+: widgets

An application touches each of these directly according to its needs.

Nobody in their right mind would say "we need a wrapper to abstract glib".
Which is a suggestion here for boost. Pretty senseless.

But I think the subtext of this discussion is that all the javascript kids
expect 20 layers deep and the top ones get rewritten every year or they're
considered obsolete, meanwhile the bottom 18 or so are "too close to the
metal" for a reasonable person to work with. A C and C++ person of a
particular mindset will seek to avoid such a thing. You want to be able to
have the whole picture in your head.

From this angle it's a very weird complaint to say "I counted how many layers
there were and it was too small!"

------
Edmond
I don't do C++ anymore but for folks interested in C++ and what the project is
describing, I'd urge dropping the knee-jerk prejudice against the license
terms and actually try to see what it is all about.

Unless they are crazy, someone doesn't spend a decade or more working on
something that isn't worth it. I think people also grossly under-estimate the
creative power of a singular vision (ie not done by committee with a million
employees involved.)

It is clear this is not vaporware, give it a chance.

~~~
vortico
Okay, here's my feedback ignoring license terms:

It reminds me of [https://templeos.org/](https://templeos.org/), which is also
decades of a single man's work. CIDLib doesn't really do anything that isn't
already done elsewhere, and its organization is very strange with odd,
antiquated names. Definitely reminds me of C++ you'd find in Windows 3.1
programs.

For example: what is "CIDMacroDbg.hpp"? Ah,

    
    
        This is the main public header for the facility. It is the single point
        of contact for the outside world. By including it, they get what we
        have to offer.
    

Uhh..

~~~
Edmond
I had read Terry's story and was sadden by it.

I see no conflict between the two approaches....As far as I am concerned,
progress is progress.

I have been watching the CIDLib videos (ie CQC) and it appears to be a
comprehensive IoT type platform covering almost every aspect of deploying an
IoT type solution, including a drag-n-drop IDE to create control applications
(think old DirectX filter programming but on steroid). I am sure there is room
for improvement.

[https://www.youtube.com/playlist?list=PLJojk5z5q10SRUTLqEGfJ...](https://www.youtube.com/playlist?list=PLJojk5z5q10SRUTLqEGfJwfm8gOuJR84l)

I think it is worth looking at, regardless of license term.

~~~
mattnewport
> it appears to be a comprehensive IoT type platform covering almost every
> aspect of deploying an IoT type solution, including a drag-n-drop IDE to
> create control applications (think old DirectX filter programming but on
> steroid).

This is more informative on what the project offers than the entire readme. I
think this is the point people are making. Great that you took the time to
watch some videos and summarize here but this sort of information would be
much more useful in the first paragraph of the readme.

~~~
DeanCIDLib
Sorry for the changed name, I closed the tab before before entering an e-mail
and had forgotten the password...

Anyway, that'a not what CIDLib is. That's what CQC is. CQC is something that's
BUILT on top of CIDLib.

If you need some sort of reference point for CIDLib, think Qt without the STL
plus build tools or something like that.

