{"slug": "msvc", "name": "MSVC", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 5, "commenters": 26, "warners": 6, "score": 2.066, "rising": -1.64, "first": "2025-11-05", "latest": "2026-10-16", "why": "I chose VC++ on purpose, because it is what I know better", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 4, "neutral": 16, "compare": 4, "warn": 10}, "spark": [1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "I chose VC++ on purpose, because it is what I know better", "kind": "", "icon": true, "domain": null, "github_repo": null, "official_url": "https://learn.microsoft.com/en-us/cpp/", "pricing": "", "aliases": ["MSVC"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 784943344, "item_id": 49058959, "url": "https://news.ycombinator.com/item?id=49058959", "by": "pjmlp", "date": "2026-07-26", "version": null, "stance": "recommend", "quote": "I chose VC++ on purpose, because it is what I know better", "excerpt": "That is standardese, you get them all bounds checked by using specific compiler flags. Here is for VC++ https://github.com/microsoft/STL/blob/2a62bf7b4079f0a3e33ec80d7daf9ea968805b12/stl/inc/span You just have to define the proper iterator level for enabling bounds checking. Other compilers have similar approaches. I chose VC++ on purpose, because it is what I know better, and is famously trailing behind C++26 featur", "context": "", "use_case": "", "switched_from": "", "story": "Memory Safety Absolutists"}, {"id": 767914434, "item_id": 47994652, "url": "https://news.ycombinator.com/item?id=47994652", "by": "forrestthewoods", "date": "2026-05-03", "version": null, "stance": "recommend", "quote": "Portable toolchain install for MSVC + WinSDK took about 30 seconds to download. Very easy.", "excerpt": "It's funny you mention that. You know which platform is super duper mega easy to cross-compile to? And you know what platfrom is (almost) FUCKING IMPOSSIBLE to compile against an arbitrarily old version of glibc? The answer (in order) is Windows and Linux. But in anycase you still have it wrong. Compiling and running for your machine isn't the problem. The question is can you give me a binary that runs on my machine.", "context": "", "use_case": "C++ compiler toolchain", "switched_from": "", "story": "Windows API Is Successful Cross-Platform API"}, {"id": 742168416, "item_id": 46385526, "url": "https://news.ycombinator.com/item?id=46385526", "by": "Calavar", "date": "2025-12-25", "version": null, "stance": "recommend", "quote": "MSVC's support for musttail is hot off the press", "excerpt": "Quite to the contrary, I'd say this update is evidence of the inner loop being hyperoptimized! MSVC's support for musttail is hot off the press: > The [[msvc::musttail]] attribute, introduced in MSVC Build Tools version 14.50, is an experimental x64-only Microsoft-specific attribute that enforces tail-call optimization. [1] MSVC Build Tools version 14.50 was released last month, and it only took a few weeks for the C", "context": "", "use_case": "", "switched_from": "", "story": "Python 3.15's interpreter for Windows should be 15% faster"}, {"id": 738202048, "item_id": 46137628, "url": "https://news.ycombinator.com/item?id=46137628", "by": "abbeyj", "date": "2025-12-03", "version": null, "stance": "recommend", "quote": "MSVC will optimize this into a constant 5", "excerpt": "> We all know that strlen will return 5, but some compilers don't: https://godbolt.org/z/M7x5qraE6 I feel like it is unfair to blame the compiler when you've explicitly asked for `/O1`. If you change this to `/O2` or `/Ox` then MSVC will optimize this into a constant 5, proving that it does \"know\" that strlen will return 5 in this case.", "context": "", "use_case": "", "switched_from": "", "story": "You can't fool the optimizer"}, {"id": 734000754, "item_id": 45875047, "url": "https://news.ycombinator.com/item?id=45875047", "by": "netbsdusers", "date": "2025-11-10", "version": null, "stance": "recommend", "quote": "they trust MSVC to do the right thing", "excerpt": "If it's about \"prettier code\" then I think a number one candidate would be making bitfields more viable for use. It could make driver code much cleaner and safer. Windows is only targeting little-endian systems which makes life easier (and in any case they trust MSVC to do the right thing) so Windows drivers make much use of them (just look at the driver samples on Microsoft's GitHub page.) Linux is a little afraid t", "context": "", "use_case": "", "switched_from": "", "story": "The Linux Kernel Looks to \u201cBite the Bullet\u201d in Enabling Microsoft C Extensions"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 789746386, "item_id": 49359149, "url": "https://news.ycombinator.com/item?id=49359149", "by": "Rochus", "date": "2026-08-19", "version": null, "stance": "warn", "quote": "not to use on MSVC because it didn't work or behaved differently", "excerpt": "For all of my projects it is good enough. C++11 onwards has a few advantages, but I don't need them. Moving ownership between containers to avoid allocations was possible with the standard library even before C++11, and Qt offered \"implicit sharing\" which has a similar effect without syntax changes and incompatibilities. Even with my C++11 projects (e.g. https://github.com/rochus-keller/eigen/) I had to take care sti", "context": "", "use_case": "", "switched_from": "", "story": "The Two Factions of C++"}, {"id": 787901472, "item_id": 49243842, "url": "https://news.ycombinator.com/item?id=49243842", "by": "pjmlp", "date": "2026-08-10", "version": null, "stance": "warn", "quote": "They officially saw no need for C support going forward.", "excerpt": "They officially saw no need for C support going forward. https://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99 Note, \"If you really need either of the following.....then we recommend that you consider using a different compiler such as Intel or gcc (short-term) and/or pressure your standards committee representatives to have ISO C++ include more of the C standard (longer-term).\" Which is kind of why nowad", "context": "", "use_case": "C compilation", "switched_from": "", "story": "Tail-call optimization in C is relatively recent"}, {"id": 773570112, "item_id": 48348132, "url": "https://news.ycombinator.com/item?id=48348132", "by": "mananaysiempre", "date": "2026-05-31", "version": null, "stance": "warn", "quote": "MSVC is quite a bad benchmark as far as C (not C++) standards conformance goes", "excerpt": "Pedantically, yes VLAs are a mandatory part of C99 (only). Practically, there has been some resistance so they were reverted to optional in later standards (in C11/17, the whole thing is optional; in C23, variably modified array types are mandatory but the ability to allocate arrays of such types on the stack is not). In any case, MSVC is quite a bad benchmark as far as C (not C++) standards conformance goes\u2014it\u2019s bee", "context": "", "use_case": "C compiler", "switched_from": "", "story": "wolfSSL releases a new product; wolfCOSE a zero alloc C embbedded COSE stack"}, {"id": 772235937, "item_id": 48264746, "url": "https://news.ycombinator.com/item?id=48264746", "by": "flohofwoe", "date": "2026-05-25", "version": null, "stance": "warn", "quote": "it looks like MSVC development has stalled again.", "excerpt": "> I wrote this after repeatedly seeing experienced C programmers hit the same sharp edges while moving into modern C++ codebases. ...and I've seen this when moving into the opposite direction. Since C++ is stuck with a ca 1995 non-standard subset of C, they usually have no clue what features were added to C in C99. > I\u2019d also be curious which C constructs people still genuinely miss in modern C++. Not implementing th", "context": "", "use_case": "C compiler", "switched_from": "", "story": null}]}], "who": [], "tags": [], "use_cases": ["c/c++ compiler", "c++ compilation", "c compiler", "c compilation", "company compiler", "c++ compiler"], "compared": [{"slug": "clang", "name": "Clang", "co": 15, "switched_from": 0, "switched_to": 0}, {"slug": "gcc", "name": "GCC", "co": 14, "switched_from": 0, "switched_to": 0}, {"slug": "cmake", "name": "CMake", "co": 4, "switched_from": 0, "switched_to": 0}, {"slug": "microsoft-windows", "name": "Microsoft Windows", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "qt", "name": "Qt", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "opengl", "name": "OpenGL", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "cuda", "name": "CUDA", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "visual-studio", "name": "Visual Studio", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [{"id": 800477536, "item_id": 50029846, "url": "https://news.ycombinator.com/item?id=50029846", "by": "neerajsi", "date": "2026-10-10", "version": null, "stance": "recommend", "quote": "It has been doing lto (aka ltcg) for a very long time at reasonably good throughput.", "excerpt": "Fwiw on the compiler front, I used to work on the msvc tool chain. It has been doing lto (aka ltcg) for a very long time at reasonably good throughput. That tool chain also has done incremental compilation on a per function basis for about 7 years. Sharing header parsing across translation units has been possible through PCH for decades. Even without PCH, inline header functions only get codegened once in ltcg mode (", "context": "former MSVC toolchain engineer", "use_case": "C++ compilation and LTO", "switched_from": "", "story": "Communication Between the Compiler, the Build System, and Beyond"}], "threads": [{"url": "https://news.ycombinator.com/item?id=46133622", "title": "You can't fool the optimizer", "mentions": 5}, {"url": "https://news.ycombinator.com/item?id=46384167", "title": "Python 3.15's interpreter for Windows should be 15% faster", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=50103164", "title": "C++26 Contracts: Introduction to Preconditions and Postconditions", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=50069499", "title": "11 year old unsoundness bugs found in Rust borrow checker", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49980208", "title": "Communication Between the Compiler, the Build System, and Beyond", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49643546", "title": "Rust is tier-1 language at Microsoft", "mentions": 1}], "sentiment_by_month": {"2025-11": {"warn": 2, "recommend": 1, "neutral": 1}, "2025-12": {"neutral": 3, "warn": 2, "recommend": 2, "compare": 2}, "2026-01": {"neutral": 1}, "2026-02": {"warn": 1, "compare": 1, "neutral": 1}, "2026-03": {"warn": 1, "neutral": 1, "compare": 1}, "2026-04": {"neutral": 1}, "2026-05": {"recommend": 1, "warn": 2, "neutral": 1}, "2026-06": {"neutral": 1}, "2026-07": {"neutral": 1}, "2026-08": {"neutral": 1, "warn": 2}, "2026-09": {"neutral": 2}, "2026-10": {"neutral": 2}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 801841344, "item_id": 50115084, "url": "https://news.ycombinator.com/item?id=50115084", "by": "pjmlp", "date": "2026-10-16", "version": null, "stance": "neutral", "quote": "MSVC and clang-tidy have struggled to achieve the Core Guidelines ideas for lifetimes", "excerpt": "Yeah, the problem with the lifetimes profile vision, is the lack of acknowledgement of how MSVC and clang-tidy have struggled to achieve the Core Guidelines ideas for lifetimes (since 2015), without additional annotations. MSVC requires SAL and clang has equally added extensions for type annotations. The WG21 politics killed the Safe C++ proposal with the P3466 paper, \"(Re)affirm design principles for future C++ evol", "context": "", "use_case": "", "switched_from": "", "story": "C++26 Contracts: Introduction to Preconditions and Postconditions"}, {"id": 801743040, "item_id": 50108940, "url": "https://news.ycombinator.com/item?id=50108940", "by": "MaxBarraclough", "date": "2026-10-15", "version": null, "stance": "neutral", "quote": "The long-entrenched MSVC compiler is still a major player despite that", "excerpt": "> I've experienced a huge amount of friction trying to enable features that cost something resembling 0.5% of fleet performance, even when they provide massive benefits. 12% loss would be laughed out of the room. A 12% difference in performance between two compilers, for some given application, is possible even between two of the best optimising compilers available. A 12% performance lag does not necessarily relegate", "context": "", "use_case": "C/C++ compiler", "switched_from": "", "story": "11 year old unsoundness bugs found in Rust borrow checker"}, {"id": 794489744, "item_id": 49655609, "url": "https://news.ycombinator.com/item?id=49655609", "by": "pjmlp", "date": "2026-09-11", "version": null, "stance": "neutral", "quote": "debug heap that MSCV was already having in 2000", "excerpt": "Also note that isn't much different from debug heap that MSCV was already having in 2000[0], assuming you didn't want to shell out some money to Insure++{1], BoundsChecker[2] and similar products. Or something like SoftBound, from 2009, https://llvm.org/pubs/2009-06-PLDI-SoftBound.pdf It hasn't been for lack of choice. [0] - https://learn.microsoft.com/en-us/cpp/c-runtime-library/debug-versions-of-heap-allocation-fun", "context": "", "use_case": "", "switched_from": "", "story": "Rust is tier-1 language at Microsoft"}, {"id": 792637152, "item_id": 49539822, "url": "https://news.ycombinator.com/item?id=49539822", "by": "quuxplusone", "date": "2026-09-02", "version": null, "stance": "neutral", "quote": "The Right Path Forward would be for MSVC, GCC, and Clang all to try implementing P2025's algorithm in their front ends.", "excerpt": "The problem is that \"predictable reliable NRVO\" is still a research problem. Real-world compilers do NRVO a lot but not in a way that is perfectly predictable \u2014 that is to say, not in a way that could be standardized across all compilers (or even between different releases of the same compiler). A \"perfectly predictable\" algorithm was proposed in Anton Zhilin's P2025, back in the year 2021: https://www.open-std.org/j", "context": "", "use_case": "C++ compilation", "switched_from": "", "story": "Move in C++ without a std:move"}, {"id": 789746386, "item_id": 49359149, "url": "https://news.ycombinator.com/item?id=49359149", "by": "Rochus", "date": "2026-08-19", "version": null, "stance": "warn", "quote": "not to use on MSVC because it didn't work or behaved differently", "excerpt": "For all of my projects it is good enough. C++11 onwards has a few advantages, but I don't need them. Moving ownership between containers to avoid allocations was possible with the standard library even before C++11, and Qt offered \"implicit sharing\" which has a similar effect without syntax changes and incompatibilities. Even with my C++11 projects (e.g. https://github.com/rochus-keller/eigen/) I had to take care sti", "context": "", "use_case": "", "switched_from": "", "story": "The Two Factions of C++"}, {"id": 787901472, "item_id": 49243842, "url": "https://news.ycombinator.com/item?id=49243842", "by": "pjmlp", "date": "2026-08-10", "version": null, "stance": "warn", "quote": "They officially saw no need for C support going forward.", "excerpt": "They officially saw no need for C support going forward. https://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99 Note, \"If you really need either of the following.....then we recommend that you consider using a different compiler such as Intel or gcc (short-term) and/or pressure your standards committee representatives to have ISO C++ include more of the C standard (longer-term).\" Which is kind of why nowad", "context": "", "use_case": "C compilation", "switched_from": "", "story": "Tail-call optimization in C is relatively recent"}, {"id": 786610570, "item_id": 49163160, "url": "https://news.ycombinator.com/item?id=49163160", "by": "StellarScience", "date": "2026-08-03", "version": null, "stance": "neutral", "quote": "Windows and Linux, msvc/gcc/clang/clangcl", "excerpt": "Stellar Science | Hybrid (USA) Albuquerque NM, Washington DC (Tysons VA), Dayton OH | Full time, interns/co-ops | U.S. citizenship required | https://www.stellarscience.com Company: We're a small scientific software development company that develops custom scientific and engineering analysis applications in domains including: space situational awareness (monitoring the locations, health and status of on-orbit satelli", "context": "", "use_case": "Company compiler", "switched_from": "", "story": "Ask HN: Who is hiring? (August 2026)"}, {"id": 784943344, "item_id": 49058959, "url": "https://news.ycombinator.com/item?id=49058959", "by": "pjmlp", "date": "2026-07-26", "version": null, "stance": "recommend", "quote": "I chose VC++ on purpose, because it is what I know better", "excerpt": "That is standardese, you get them all bounds checked by using specific compiler flags. Here is for VC++ https://github.com/microsoft/STL/blob/2a62bf7b4079f0a3e33ec80d7daf9ea968805b12/stl/inc/span You just have to define the proper iterator level for enabling bounds checking. Other compilers have similar approaches. I chose VC++ on purpose, because it is what I know better, and is famously trailing behind C++26 featur", "context": "", "use_case": "", "switched_from": "", "story": "Memory Safety Absolutists"}, {"id": 779896050, "item_id": 48743503, "url": "https://news.ycombinator.com/item?id=48743503", "by": "pjmlp", "date": "2026-07-01", "version": null, "stance": "neutral", "quote": "minus some bugs or code completion misbehaving (but bearable)", "excerpt": "Depends on where you are. VC++ and clang latest with MSBuild or CMake/ninja are there, minus some bugs or code completion misbehaving (but bearable). GCC 16 is mostly ok now, also with CMake/ninja. All my hobby coding in C++ makes use of modules, at work it is a different matter, where libraries to be consumed by Java/.NET/nodejs, are still using C++17 as baseline. You can easily check, https://github.com/pjmlp/Raytr", "context": "", "use_case": "C++ compiler", "switched_from": "", "story": "Pystd, similar-ish functionality with a fraction of the compile time"}, {"id": 777802608, "item_id": 48612663, "url": "https://news.ycombinator.com/item?id=48612663", "by": "ack_complete", "date": "2026-06-20", "version": null, "stance": "neutral", "quote": "MSVC can do this for x86", "excerpt": "MSVC can do this for x86 if the cases are densely packed and the default is blocked: https://gcc.godbolt.org/z/GPo9fMx8G However, this optimization is less effective on modern CPUs with more powerful indirect predictors using global history.", "context": "", "use_case": "C/C++ compiler", "switched_from": "", "story": "Computed goto for efficient dispatch tables"}, {"id": 773570112, "item_id": 48348132, "url": "https://news.ycombinator.com/item?id=48348132", "by": "mananaysiempre", "date": "2026-05-31", "version": null, "stance": "warn", "quote": "MSVC is quite a bad benchmark as far as C (not C++) standards conformance goes", "excerpt": "Pedantically, yes VLAs are a mandatory part of C99 (only). Practically, there has been some resistance so they were reverted to optional in later standards (in C11/17, the whole thing is optional; in C23, variably modified array types are mandatory but the ability to allocate arrays of such types on the stack is not). In any case, MSVC is quite a bad benchmark as far as C (not C++) standards conformance goes\u2014it\u2019s bee", "context": "", "use_case": "C compiler", "switched_from": "", "story": "wolfSSL releases a new product; wolfCOSE a zero alloc C embbedded COSE stack"}, {"id": 772409936, "item_id": 48275621, "url": "https://news.ycombinator.com/item?id=48275621", "by": "david2ndaccount", "date": "2026-05-25", "version": null, "stance": "neutral", "quote": "Use the new standards-conformant preprocessor with `/Zc:preprocessor`", "excerpt": "Use the new standards-conformant preprocessor with `/Zc:preprocessor` https://learn.microsoft.com/en-us/cpp/build/reference/zc-preprocessor?view=msvc-170", "context": "", "use_case": "", "switched_from": "", "story": "C extensions, portability, and alternative compilers"}, {"id": 772235937, "item_id": 48264746, "url": "https://news.ycombinator.com/item?id=48264746", "by": "flohofwoe", "date": "2026-05-25", "version": null, "stance": "warn", "quote": "it looks like MSVC development has stalled again.", "excerpt": "> I wrote this after repeatedly seeing experienced C programmers hit the same sharp edges while moving into modern C++ codebases. ...and I've seen this when moving into the opposite direction. Since C++ is stuck with a ca 1995 non-standard subset of C, they usually have no clue what features were added to C in C99. > I\u2019d also be curious which C constructs people still genuinely miss in modern C++. Not implementing th", "context": "", "use_case": "C compiler", "switched_from": "", "story": null}, {"id": 767914434, "item_id": 47994652, "url": "https://news.ycombinator.com/item?id=47994652", "by": "forrestthewoods", "date": "2026-05-03", "version": null, "stance": "recommend", "quote": "Portable toolchain install for MSVC + WinSDK took about 30 seconds to download. Very easy.", "excerpt": "It's funny you mention that. You know which platform is super duper mega easy to cross-compile to? And you know what platfrom is (almost) FUCKING IMPOSSIBLE to compile against an arbitrarily old version of glibc? The answer (in order) is Windows and Linux. But in anycase you still have it wrong. Compiling and running for your machine isn't the problem. The question is can you give me a binary that runs on my machine.", "context": "", "use_case": "C++ compiler toolchain", "switched_from": "", "story": "Windows API Is Successful Cross-Platform API"}, {"id": 761757592, "item_id": 47609849, "url": "https://news.ycombinator.com/item?id=47609849", "by": "StellarScience", "date": "2026-04-01", "version": null, "stance": "neutral", "quote": "Windows and Linux, msvc/gcc/clang/clangcl.", "excerpt": "Stellar Science | Hybrid (USA) Albuquerque NM, Washington DC (Tysons VA), Dayton OH | Full time, interns/co-ops | U.S. citizenship required | https://www.stellarscience.com Company: We're a small scientific software development company that develops custom scientific and engineering analysis applications in domains including: space situational awareness (monitoring the locations, health and status of on-orbit satelli", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: Who is hiring? (April 2026)"}, {"id": 761157953, "item_id": 47572372, "url": "https://news.ycombinator.com/item?id=47572372", "by": "cemdervis", "date": "2026-03-30", "version": null, "stance": "compare", "quote": "GCC and MSVC are pretty close.", "excerpt": "GCC and MSVC are pretty close. fyi, the tables on cppreference are rather outdated at this point. I made a more up-to-date, community-maintained site: https://cppstat.dev/?conformance=cpp20", "context": "", "use_case": "", "switched_from": "", "story": "C++26 is done ISO C++ standards meeting, Trip Report"}, {"id": 758650721, "item_id": 47415670, "url": "https://news.ycombinator.com/item?id=47415670", "by": "Negitivefrags", "date": "2026-03-17", "version": null, "stance": "neutral", "quote": "a windows client compiled with MSVC in windows", "excerpt": "We use floating point operations with deterministic lockstep with a server compiled on GCC in Linux a windows client compiled with MSVC in windows, and an iOS client running on ARM which I believe is compiled with clang. Works fine. This is a not a small code base, and no particular care has been taken with the floating point operations used.", "context": "", "use_case": "", "switched_from": "", "story": "The unlikely story of Teardown Multiplayer"}, {"id": 755679744, "item_id": 47229984, "url": "https://news.ycombinator.com/item?id=47229984", "by": "flohofwoe", "date": "2026-03-03", "version": null, "stance": "warn", "quote": "MSVC has a strict separation between the C++ and C frontend", "excerpt": "Any language feature added in C99 and later. In GCC and Clang it's quite relaxed since their C++ frontends pull in a couple of modern C features as non-standard C++ extensions, but MSVC has a strict separation between the C++ and C frontend and doesn't allow this sort of 'cross-pollution'. As a quick example, this C99 code block has at least 4 features that don't work in C++: https://github.com/floooh/sokol-samples/b", "context": "", "use_case": "", "switched_from": "", "story": "Why Objective-C"}, {"id": 754051954, "item_id": 47128247, "url": "https://news.ycombinator.com/item?id=47128247", "by": "Trung0246", "date": "2026-02-23", "version": null, "stance": "neutral", "quote": "It works for gcc/clang/msvc with -O0, -O1, -O2, and even -O3", "excerpt": "Here's my very funny implementation of delimited continuation in plain C with zero ASM usage (with help from a specific compiler built-in) https://gist.github.com/Trung0246/8f801058212d3bbbef82690a3155c4ea Demo (old version with outdated compile flag but still works): https://godbolt.org/z/n9ch4TM3s It works for gcc/clang/msvc with -O0, -O1, -O2, and even -O3", "context": "", "use_case": "", "switched_from": "", "story": "Emulating Goto in Scheme with Continuations"}, {"id": 752451603, "item_id": 47028225, "url": "https://news.ycombinator.com/item?id=47028225", "by": "okanat", "date": "2026-02-15", "version": null, "stance": "compare", "quote": "If Microsoft made a better, free of charge C compiler in early 2000s", "excerpt": "I do appreciate it as a daily user of MSYS2. However the bigger thing that enabled them is indeed Cygwin project since it unlocked the path to build things that are using strict Unix tooling. autoconf, Make, bash etc cannot run under a pure Windows environment. They are too dependent to the underlying system being a Unix. To use pacman, bash and make in MSYS2, you need msys-2.0.dll. Even they cite Cygwin's URL in the", "context": "", "use_case": "", "switched_from": "", "story": "I Fixed Windows Native Development"}, {"id": 750637248, "item_id": 46914828, "url": "https://news.ycombinator.com/item?id=46914828", "by": "usefulcat", "date": "2026-02-06", "version": null, "stance": "warn", "quote": "it absolutely had bugs", "excerpt": "I've been using c++ for over 30 years. 20-30 years ago I was mostly using MSVC (including version 6), and it absolutely had bugs, sometimes in handling the language spec correctly and sometimes regarding code generation. Today, I use gcc and clang. I would say that compiler bugs are not common in released versions of those (i.e. not alpha or beta), but they do still occur. Although I will say I don't recall the last ", "context": "", "use_case": "", "switched_from": "", "story": "My AI Adoption Journey"}, {"id": 749104224, "item_id": 46819014, "url": "https://news.ycombinator.com/item?id=46819014", "by": "starfreakclone", "date": "2026-01-29", "version": null, "stance": "neutral", "quote": "The actual blocker for named modules is not MSVC", "excerpt": "There's nothing non-standard happening there. The compiler is allowed to translate #include -> import. Here's the standardese expressing that: https://eel.is/c%2B%2Bdraft/cpp.include#10. I do agree, it's not _exactly_ the same as using _named modules_, but header units share an almost identical piece of machinery in the compiler as named modules. This makes the (future planned) transition to named modules a lot easie", "context": "", "use_case": "", "switched_from": "", "story": "C++ Modules Are Here to Stay"}, {"id": 742168416, "item_id": 46385526, "url": "https://news.ycombinator.com/item?id=46385526", "by": "Calavar", "date": "2025-12-25", "version": null, "stance": "recommend", "quote": "MSVC's support for musttail is hot off the press", "excerpt": "Quite to the contrary, I'd say this update is evidence of the inner loop being hyperoptimized! MSVC's support for musttail is hot off the press: > The [[msvc::musttail]] attribute, introduced in MSVC Build Tools version 14.50, is an experimental x64-only Microsoft-specific attribute that enforces tail-call optimization. [1] MSVC Build Tools version 14.50 was released last month, and it only took a few weeks for the C", "context": "", "use_case": "", "switched_from": "", "story": "Python 3.15's interpreter for Windows should be 15% faster"}, {"id": 742165232, "item_id": 46385327, "url": "https://news.ycombinator.com/item?id=46385327", "by": "kenjin4096", "date": "2025-12-25", "version": null, "stance": "compare", "quote": "MSVC can actually convert switch-case interpreters to threaded code automatically if some conditions are met", "excerpt": "Thanks :), that was indeed my intention. I think the previous 3.14 mistake was actually a good one on hindsight, because if I didn't publicize our work early, I wouldn't have caught the attention of Nelson. Nelson also probably wouldn't have spent one month digging into the Clang 19 bug. This also meant the bug wouldn't have been caught in the betas, and might've been out with the actual release, which would have bee", "context": "", "use_case": "", "switched_from": "", "story": "Python 3.15's interpreter for Windows should be 15% faster"}, {"id": 739457489, "item_id": 46216093, "url": "https://news.ycombinator.com/item?id=46216093", "by": "flohofwoe", "date": "2025-12-10", "version": null, "stance": "compare", "quote": "better than MSVC actually", "excerpt": "> For example, it can be compiled on basically any platform that contains a CPU. It will be pretty hard to find a platform which doesn't have at least a C99 compiler. For instance even SDCC has uptodate C standard support (better than MSVC actually), and that covers most 8-bit CPUs all the way back to the 70's: https://sdcc.sourceforge.net/ Also let's not forget that C99 is a quarter century old by now. That's about ", "context": "", "use_case": "", "switched_from": "", "story": "Dependable C"}, {"id": 739026304, "item_id": 46189144, "url": "https://news.ycombinator.com/item?id=46189144", "by": "usefulcat", "date": "2025-12-07", "version": null, "stance": "warn", "quote": "that's an MSVC problem", "excerpt": "I've heard that MSVC does (did?) that, but if so that's an MSVC problem. gcc and clang don't do that. https://godbolt.org/z/nasoWeq5M", "context": "", "use_case": "", "switched_from": "", "story": "The C++ standard for the F-35 Fighter Jet [video]"}, {"id": 738342720, "item_id": 46146420, "url": "https://news.ycombinator.com/item?id=46146420", "by": "delta_p_delta_x", "date": "2025-12-04", "version": null, "stance": "neutral", "quote": "Turn up the optimiser to `/O2` and MSVC returns 5 directly, too.", "excerpt": "> but some compilers don't: https://godbolt.org/z/M7x5qraE6 You've misrepresented the situation. Turn up the optimiser to `/O2` and MSVC returns 5 directly, too. > This function returns 1 if s is \"hello\". 0 otherwise. I've added a pointless strlen(). It seems like no compiler is clever enough to remove it. It's funny how sometimes operating at a higher level of abstraction allows the compiler to optimise the code bet", "context": "", "use_case": "", "switched_from": "", "story": "You can't fool the optimizer"}, {"id": 738202048, "item_id": 46137628, "url": "https://news.ycombinator.com/item?id=46137628", "by": "abbeyj", "date": "2025-12-03", "version": null, "stance": "recommend", "quote": "MSVC will optimize this into a constant 5", "excerpt": "> We all know that strlen will return 5, but some compilers don't: https://godbolt.org/z/M7x5qraE6 I feel like it is unfair to blame the compiler when you've explicitly asked for `/O1`. If you change this to `/O2` or `/Ox` then MSVC will optimize this into a constant 5, proving that it does \"know\" that strlen will return 5 in this case.", "context": "", "use_case": "", "switched_from": "", "story": "You can't fool the optimizer"}, {"id": 738189969, "item_id": 46136873, "url": "https://news.ycombinator.com/item?id=46136873", "by": "abainbridge", "date": "2025-12-03", "version": null, "stance": "neutral", "quote": "the case of it not optimizing was MSVC targetting Windows", "excerpt": "Hmmm, really? Switching compiler seems sufficient: https://godbolt.org/z/xnevov5d7 BTW, the case of it not optimizing was MSVC targetting Windows (which doesn't support LD_PRELOAD, but maybe has something similar?).", "context": "", "use_case": "", "switched_from": "", "story": "You can't fool the optimizer"}, {"id": 738151344, "item_id": 46134459, "url": "https://news.ycombinator.com/item?id=46134459", "by": "sumtechguy", "date": "2025-12-03", "version": null, "stance": "warn", "quote": "I see the msvc arm compiler has not improved much in 20 years.", "excerpt": "I see the msvc arm compiler has not improved much in 20 years. The msvc arm was pretty odd when we used it in ~2003. We did not trust it at all. Think we had to get 4 or so compiler fixes out of MS for that project plus 3 or 4 library fixes. The x86 one was pretty solid. We were targeting 4 different CPU platforms at the same time so we could find things like that decently quickly. Most of the the time it was somethi", "context": "", "use_case": "", "switched_from": "", "story": "You can't fool the optimizer"}, {"id": 738145136, "item_id": 46134071, "url": "https://news.ycombinator.com/item?id=46134071", "by": "apple1417", "date": "2025-12-03", "version": null, "stance": "neutral", "quote": "The MSVC linker has a feature where it will merge byte-for-byte identical functions.", "excerpt": "The MSVC linker has a feature where it will merge byte-for-byte identical functions. It's most noticeable for default constructors, you might get hundreds of functions which all boil down to \"zero the first 32 bytes of this type\". A quick google suggests it's called \"identical comdat folding\" https://devblogs.microsoft.com/oldnewthing/20161024-00/?p=94575", "context": "", "use_case": "", "switched_from": "", "story": "You can't fool the optimizer"}, {"id": 735337600, "item_id": 45958600, "url": "https://news.ycombinator.com/item?id=45958600", "by": "Maxatar", "date": "2025-11-17", "version": null, "stance": "neutral", "quote": "make use of a non-standard MSVC feature", "excerpt": "You learned nothing because the extent of your knowledge tends to be rather superficial when it comes to C++. Office does not use C++ modules, what Office did was make use of a non-standard MSVC feature [1] which reinterprets #include preprocessor directives as header units. Absolutely no changes to source code is needed to make use of this compiler feature. This is not the same as using C++20 modules which would req", "context": "", "use_case": "C++ compilation", "switched_from": "", "story": "GCC 16 considering changing default to C++20"}, {"id": 735251744, "item_id": 45953234, "url": "https://news.ycombinator.com/item?id=45953234", "by": "pjmlp", "date": "2025-11-17", "version": null, "stance": "warn", "quote": "I wouldn't bet waiting that it will ever happen", "excerpt": "Given how C was seen in the past, before there was a change of heart to add C11/C17, minus atomics and aligned memory allocators (still between experimental or not going to happen), https://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99 https://devblogs.microsoft.com/cppblog/c11-atomics-in-visual-studio-2022-version-17-5-preview-2/ https://learn.microsoft.com/en-us/cpp/c-runtime-library/compatibility?view=", "context": "", "use_case": "", "switched_from": "", "story": "Giving C a superpower: custom header file (safe_c.h)"}, {"id": 734000754, "item_id": 45875047, "url": "https://news.ycombinator.com/item?id=45875047", "by": "netbsdusers", "date": "2025-11-10", "version": null, "stance": "recommend", "quote": "they trust MSVC to do the right thing", "excerpt": "If it's about \"prettier code\" then I think a number one candidate would be making bitfields more viable for use. It could make driver code much cleaner and safer. Windows is only targeting little-endian systems which makes life easier (and in any case they trust MSVC to do the right thing) so Windows drivers make much use of them (just look at the driver samples on Microsoft's GitHub page.) Linux is a little afraid t", "context": "", "use_case": "", "switched_from": "", "story": "The Linux Kernel Looks to \u201cBite the Bullet\u201d in Enabling Microsoft C Extensions"}, {"id": 733295553, "item_id": 45830972, "url": "https://news.ycombinator.com/item?id=45830972", "by": "lifthrasiir", "date": "2025-11-05", "version": null, "stance": "warn", "quote": "It seems that MSVC doesn't like those macros, though.", "excerpt": "Ask and you'll get: https://c.godbolt.org/z/rKsWT5E9T It seems that MSVC doesn't like those macros, though.", "context": "", "use_case": "", "switched_from": "", "story": "Recursive macros in C, demystified (once the ugly crying stops)"}]}