Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "msvc"
-
So here I am sitting on my dusty laptop gaming laptop (because supposedly it would offer me better performance in compiling code and working with CUDA according to the people above me) at a research institute where I just started working at. I am told that there are some issues with the code and that it fails to build on Windows with MSVC that ships with Visual Studio 2017 and later.
I poor some hot tea from my insulated bottle I brought from home and start reading.
I look in this header file and what do I see - a custom uint24_t struct. Interesting...
I keep sifting through the code base. I find some functions that check and change Endianess. Ok, but the software is developed, built on and runs only on Win7 and later desktop systems. Never mind...
Further I find a custom "allocator" that is used throughout the whole code base. It has three inline static class member functions: allocate, copy and deallocate plus some private constructors. And these just wrap around the standard new and free calls. Some flavours of this class actually only deallocate (with a comment above them: "This allocator does not allocate. HANDLE WITH CARE!!!", which is btw the only "code documentation" I have managed to find).
But wait! What is this? A custom thread and mutex. Oh, and string, and vector.
Further down the rabbit hole I find a custom math library with a matrix class that does not support multiplication between a matrix and a vector. Perhaps not a use case I guess...
I continue and come across some UI-related calls. Interesting, I wonder what they are using as a framework. Oh, my...We have an extensive GUI custom framework written from scratch (drawing buttons and all).
All of this is to load an OBJ file and render it on the screen on a standard Windows PC in some way.
Very nice... ;_;1 -
Why the hell does it take twice as long to compile my software project under MSVC and Windows 10 compared to a GCC on a Linux *virtual machine* running inside the same Windows 10?!?6
-
MSVC will sometimes compile our code. Sometimes it throws an error.
No changes. Just a shitty compiler.2 -
"Reflective" programming...
In almost every other language:
1. obj.GetType().GetProperties()
or
for k, v in pairs(obj) do something end
or
fieldnames(typeof(obj))
or
Object.entries(obj)
2. Enjoy.
In C++: 💀
1. Use the extern keyword to trick compilers into believing some fake objects of your chosen type actually exist.
2. Use the famous C++ type loophole or structured binding to extract fields from your fake objects.
3. Figure out a way to suppress those annoying compiler warnings that were generated because of your how much of a bad practice your code is.
4. Extract type and field names from strings generated by compiler magic (__PRETTY_FUNCTION__, __FUNCSIG__) or from the extremely new feature std::source_location (people hate you because their Windows XP compilers can't handle your code)
5. Realize your code still does not work for classes that have private or protected fields.
6. Decide it's time to become a language lawyer and make OOPers angry by breaking encapsulation and stealing private fields from their classes using explicit template instantiation
7. Realize your code will never work outside of MSVC, GCC or CLANG and will always be reliant on undefined behaviors.
8. Live forever in doubt and fear that new changes to the compiler magic you abused will one day break your code.
9. SUFFER IN HELL as you start getting 5000 lines worth of template errors after switching to a new compiler.13 -
Note to self:
Variadic C++ templates combined with obfuscated combinations of stl containers put you on the right path to be a "compiler message decryption" archmage.
Especially when you use MSCV... -
Trying to...
- Visual Studio 2017 released in 2016 with internal version number 15.9.38 with MSVC v14.0
- CUDA 8.0 with NVidia Nsight VS integration 5.3
- GTX 1080 GPU with compute capability 6.1
- Windows 10 SDK with 10.0.17763.0
Will it work? I don't fucking know because your versioning and documentation SUCKS!
For some time now it has become a number one mission for basically every tech company to rebrand, reversion and what not their products. It's obviously done with the purpose of confusing the customers, leading them on to buy/work with the wrong item, which of course leads to another purchase and hours of frustration and wasted time. This is not how business should be conducted, you dumbasses! -
So I'm target multiple platforms with one of my c++ projects and on one of the platforms I the window manager is quite different, and one of the libraries can't be used. Thats fine for my needs, I'm just wondering what the typical way to allow for these differences is. Basically currently I've created 2 "main" files that have preprocessor code to only use he one that's right for the platform by having ifdefs at the beginning of each, I've kinda followed that methodology for the other files that are totally platform specific also. Is there a better way to go about this? Currently using msvc for windows compilation and a gcc-esqu compiler for one of the other platforms, where the compile command is built by a home made build tool.