|
Hmmmm,
honey the codewitch wrote: I even contacted people involved in the Windows OS team I am pretty sure that the mangling is controlled by the interface definition language[^] so you probably should have asked someone on the compiler team instead.
There use to be some non-public MIDL reserved keywords on our internal build tools. I'm not sure if that's still a thing.
|
|
|
|
|
The IDL facilities use the typelib facilities i'm talking about. The compiler team did not create oleaut32.dll
Real programmers use butterflies
|
|
|
|
|
honey the codewitch wrote: The IDL facilities use the typelib facilities i'm talking about. The compiler team did not create oleaut32.dll No, we are in a grey area here... oleaut32 has it's origins in VB5. I believe it was distributed with the VB5/VB6 runtime prior to Windows XP SP1.
What time frame are you referring to? Was this back when you worked at the company?
|
|
|
|
|
It was old by the time I was working on the Windows team in about 2001.
oleaut32 is a system DLL - i could have sworn it predated VB5 because of OLE automation which predates it, but my memory isn't so reliable these days.
oleaut32.dll provides system implementations of things like IDispatch and ITypeLib. It's basically the guts that make Automation work inside of what is now known as ActiveX** but prior to that was simply called OLE (object linking and embedding)
** I'm simplifying a little bit. OLE and ActiveX both exist, and ActiveX was sort of intended as OLE pared down for web downloads at first but then it became the de facto way to develop new components.
Real programmers use butterflies
|
|
|
|
|
|
Mircea Neacsu wrote: someone like Raymond Chen
I remember some Microsoft blog video some years ago, and cant remember if was talking to him, that essential majority of the .net documentation (at least 2005 - 2015 maybe) was passed through this one person, hence provided great consistency across the documentation.
As to Frostbite, I wonder how much gaming industry project to project rehire cycle has an impact, and the get it out the door.
If you have somthing like World of Warcraft, where new players coming in over the years, then fixing "old" parts are relevant to user support.
Also go read Object-oriented programming is dead. Wait, really? posted in articles the other day, might be relevant to how people thought they needed to program the system over the years vs reality of programming it.
|
|
|
|
|
|
Working on several generations of the same project for 25 years almost I see that there is no straightforward solution for this.
Setting up code standard does not help, code review does not help...
There is no way to 'clean' an old and complex code but to rewrite it from ground up - it will probably cost more in time than the original investment combined over years and will left you with a buggy code to test from zero...
"The only place where Success comes before Work is in the dictionary." Vidal Sassoon, 1928 - 2012
|
|
|
|
|
Yes.. I suspect it is unavoidable...
|
|
|
|
|
Super Lloyd wrote: How does one push back against the growing complexity?
In your situation, I don't think you can push back. I don't think you want to push back. The code base is mature, and tested many, many times. You can't change it from the ground up, if that is what you are thinking; not for Frostbite, I would think.
I think your best bet is to maintain existing code without refactoring too much, and adding new code in a proper, well organized and scalable fashion, the best you can.
Remember, any code you maintain, that has been tested and is working in Production, and you refactor or change it, you have now added potential bugs to it. The less you refactor or change of existing code, the better.
|
|
|
|
|
This is very wise and I second all of it.
|
|
|
|
|
Super Lloyd wrote: the parts I am working on are very messy...
Free tip : If I were you, I'd be very careful with such statements on the internet about your current job, especially since you mentioned your employer's name and even the projects you are working on.
Be unspecific, Loungers know where you work
|
|
|
|
|
Excellent point.
But in reality, I don't think details (like the actual company name) have to be known. If something's been evolving for 20 years and being worked on by a large team...yeah, us developers will all automatically assume it's grown to become downright nasty.
|
|
|
|
|
Large codebases inevitably get convoluted, over decades, especially if requirements evolve a lot, as they might do in a game editor. I would discuss the complexity within the team. Maybe you can identify a module that is suitable for refactoring, and suggest something. If your team responds with a shrug then that is an answer too.
And, I wouldnt worry too much about your boss givning you a hard time for mentioning names. Who wants to work in a place where paranoia is necessary anyway?
"If we don't change direction, we'll end up where we're going"
|
|
|
|
|
I would join with my esteemed colleague, Rage, in cautioning you about public disclosure of opinions and information about an identified company where you work;
1) this could be perceived as unauthorized disclosure of privileged private information.
2) because you are a newcomer to a large company, and to working on a complex code-base developed over years, the things you say could be interpreted by others at the company as grandstanding, as presumptuous, as carping.
3) given you acknowledge you are at a beginner/journeyman level understanding of the code-base, have you earned the credibility to make such comments ?
Speaking as a friend, I strongly encourage you to consider the risks of such disclosure.
If you were laid-off for cause ... unauthorized disclosure ... imagine how that might damage your future employability.
«The mind is not a vessel to be filled but a fire to be kindled» Plutarch
|
|
|
|
|
Best resolved as follows:
1 - Ctl-A
2 - DEL
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
It sounds like no one had a good idea how to structure this code cleanly, so it has gotten out of hand. There is undoubtedly a fair bit of inherent complexity in it, made much worse by artificial complexity.
As a newcomer to the team, you probably lack the influence to change things, especially the culture that produced this. Focus on gaining the respect of your colleagues and understanding as much of the existing code as possible. Not so much on how it works, but what it does. Think about how you would refactor or even rewrite some or all of it. If a crisis eventually occurs, you will then be ready to propose a path forward. Hardly any of your colleagues--quite possibly none--will have thought about this. If you present a cogent redesign, it will likely get adopted, and you will have the opportunity to clean up the mess if that's the kind of thing that appeals to you.
In the meantime, there's the question of how long you're willing to work on convoluted code, waiting for a crisis, before it becomes so painful that you need to transfer to another group. In a large company, it is often possible to find an internal transfer, and you may be able to look at other groups' code to determine if their grass is greener.
|
|
|
|
|
Super Lloyd wrote: Now.. it might seems inevitable on large project with large team... But, at the risk of being blind folded by fanboyism, I think Microsoft.NET API code looks quite neat and simple. And this is a large project API too, 20 years in the making! By a large corporation!
First thing that came to mind is "[EA Game Name] [Year++]".
That's how it works, right? They keep going back to the same codebase, someone adds something to make it bigger/uglier, and they release a new version in the established franchise...
|
|
|
|
|
The only time I've ever had much success with that sort of thing (and I'm guessing this isn't an option here) is by sitting everybody down, writing a detailed specification for what it's *supposed* to do, then redesigning the whole thing from scratch - properly - and rewriting it. In the long term, this will actually save time, in that from that moment on, half the development effort won't be spent refactoring old code... but it's a tough job to sell something like that - tough in proportion to the size of the existing codebase, that is.
|
|
|
|
|
The only thing I can suggest (aside from manual review) is static analysis/linters.
I use clang-tidy (which is mostly a linter, with lots of useful checks) and clang static analysis.
Depending on what buildsystem you use, these can be really easy to setup. I use CMake, and have a ‘static analysis’ build that takes longer to compile, but I only build that when I’m ready to make a commit, building a debug without analysis build normally. I know that modern Visual Studio (2019, I think?) makes it simple to use clang-tidy too, as do other IDEs (QtCreator, Clion).
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Why maintain complexity Super Lloyd?
While all the answers seem to dissolve over time like plaque the best questions persist?
There is a huge problem with the prosthetics we are wearing. They are infected with malignant complexity. All the machines we are becoming dependent on are infected with a sort of cancer that has them needing to grow constantly... the code has to grow to cover the complexity in hardware and thus the hardware has to grow to cover the code overhead and on and on... and the curve is not supportable?
Reduce and streamline?
I challenge code and hardware manufacturers to build it and they will buy it. It being a system made in the country where it will be used. In factories that are secure... not kind of secure but absolutely secure. Build a dedicated user platform coupled with a separate and dedicated security interface with the outside. Put in one box a processor dedicated to one job, to serve the user that is protected by an optically coupled and dedicated security processor. The vast majority of the overhead in code is due to two things. One is the need to interface with a universe of devices that are full of vulnerabilities, including those made in a competing and or adversarial country? The second is integrated security stemming from all the compatibility needs, complexity of code and constant changes in all of the above. Why, oh why, not remove the negative feedback loop completely? At least do so in the most important infrastructure?
... The current state of United States computer infrastructure is an abortion! That is not my opinion it is Word!
thank you for reading my rant on how we are dependent on unnecessary complexity and prosthetic devices that are a huge threat to Humanity.
blessings
chuck
|
|
|
|
|
Super Lloyd wrote: I think Microsoft.NET API code looks quite neat and simple.
It is easier to keep separation of concerns separate for libraries. Especially when they started both as a product and a library.
Super Lloyd wrote: and simple.
Unless you want to mock some of the functionality. But when originally developed that wasn't as significant.
Super Lloyd wrote: against the growing complexity?
Work for a startup that hasn't written any code yet.
|
|
|
|
|
|
Quote: Choose the projects you want to load by right clicking and selecting Reload Project or load the project and its entire dependency tree by clicking Reload Project with Dependencies.
woooa.. I have to give it a try!
|
|
|
|
|