in

microsoft / STL, Hacker News

microsoft / STL, Hacker News


    

  

          @CaseyCarter

    

             

CaseyCarter            >Update” old “range types                                 

* `array`,` basic_string`, `basic_string_view`,` valarray`, and `vector` (` span` is not yet implemented) model `contiguous_range` by defining the nested type` iterator_concept` to `contiguous_iterator_tag` in` iterator` and `const_iterator`, and specializing` pointer_traits` for those types (to fulfill `contiguous_iterator`'s` std :: to_address` requirement)  * `basic_string_view` (Ditto, no` span` yet) models the exposition-only * `forwarding-range` * concept (which indicates that the validity of iterators is not bound to the lifetime of the range) by defining hidden-friend overloads of `begin` and` end` that accept rvalues  * Drive-by:   * mark the `_Unfancy` internal helper function` [[nodiscard]] `   * Remove redundant `_Can_begin` requirement from` std :: ranges :: _ Begin :: _ Cpo :: _ Choose`  * Add test coverage to `devcrt / P 0896 R4_ranges_range_machinery` :   * tighten up `test_std_container`:     * `data` and` cdata` reject rvalue arguments since the returned pointer could potentially dangle (`contiguous_range` codepaths were lacking coverage)     * the `size_type` of a standard container can be other than` std :: size_t` when using fancy pointers     * we should enforce that each container's iterator type models the expected concept   * Add test coverage to ensure that contiguous standard library containers model `contiguous_range` even when using an" old "fancy pointer type that does not model` contiguous_iterator`

    

    

Latest commit              92508 be             Sep 14, 2019    

  

                    

        

This is the official repository for Microsoft’s implementation of the C Standard Library (also known as the STL), which ships as part of the MSVC toolset and the Visual Studio IDE.

If you’re a programmer who just wants to use the STL, youdon’tneed this repo. Simply install the Visual Studio IDE and select the “Desktop development with C ” workload.

If you want to participate in the STL’s development, welcome! You can report issues, comment on pull requests, and learn about what we’re working on. Soon, you’ll be able to submit pull requests to fix bugs or add features (see below).

Finally, you can take our code and use it in other apps and libraries (according to the terms of our license, like everything else).

We’re in the process of moving all of our work on the STL to GitHub. Current status:

  • Code:Done.Our source code is available under the Apache License v2.0 with LLVM Exception. (SeeLICENSE.txtandNOTICE.txtfor more information.)

  • Build System:In progress.We’re working on a CMake build system, which is currently capable of building one flavor of the STL (native desktop). We need to extend this to build all of the flavors required for the MSVC toolset (e.g. / clr, / clr: pure, OneCore, Specter). Until that’s done, we’re keeping our legacy build system around in theSTL / MSBuildsubdirectory. (We’re keeping those files in this repo, even though they’re unusable outside of Microsoft, because they need to be updated whenever source files are added / renamed / deleted. We’ll delete the legacy machinery as soon as possible.)

  • Tests:Coming soon.We rely on three test suites: devcrt, tr1, andlibcxx. We need to replace our current test harness, which extensively uses Microsoft-internal machinery.

  • Continuous Integration:Coming soon.We need tests first.

  • Contribution Guidelines:Coming soon.Working on the STL’s code involves following many rules. We have codebase conventions, Standard requirements, Microsoft-specific requirements, binary compatibility (ABI) requirements, and more. We’re eager to begin accepting features and fixes from the community, but in addition to setting up a CI system, we need to write down all of the rules that are currently stored in our brains. (The ABI rules may be useful to other C libraries.) Until that’s in place, pull request reviews will be delayed.

  • Issues:In progress.We’re going to use GitHub issues to track all of the things that we need to work on. This includes C 20 features,LWG issues, conformance bugs, performance improvements, and other todos. There are approximately 200 active bugs in the STL’s Microsoft-internal database; we need to manually replicate all of them to GitHub issues. Currently, thecxx 20 tagandLWG tagare done; every remaining work item is tracked by a GitHub issue. Thebug tagandenhancement tagremain to be populated.

  • Plans:In progress.We’re writing up ourRoadmapandIteration Plans.

We’re implementing the latest C Working Draft, currentlyN 4830, which will eventually become the next C International Standard (which is sometimes referred to as C 2a, but we optimistically refer to it as C 20). The terms Working Draft (WD) and Working Paper (WP) are interchangeable; we often informally refer to these drafts as “the Standard “while being aware of the difference. (There are other relevant Standards; for example, supporting/ STD: C 14and/ std: c 17involves understanding how the C 14 and C 17 Standards differ from the Working Paper, and we often need to refer to the C Standard Library and ECMAScript regular expression specifications.)

Our primary goals are conformance, performance, usability, and compatibility.

  • Conformance: The Working Paper is a moving target; as features and LWG issue resolutions are added, we need to implement them. That can involve a lot of work, because the STL is required to behave in very specific ways and to handle users doing very unusual things.

  • Performance: The STL needs to be extremely fast at runtime; speed is one of C ‘s core strengths, and most C programs use the STL extensively. As a result, we spend more time on optimization than most general-purpose libraries. (However, we’re wary of changes that improve some scenarios at the expense of others, or changes that make code significantly more complicated and fragile. That is, there’s a “complexity budget” that must be spent carefully.)

  • Usability: This includes parts of the programming experience like compiler throughput, diagnostic messages, and debugging checks. For example, we’ve extensively marked the STL with[[nodiscard]]attributes because this helps programmers avoid bugs.

  • Compatibility: This includes binary compatibility and source compatibility. We’re keeping VS 2019 binary-compatible with VS 2017 and VS 2015, which restricts what we can change in VS 2019 updates. (We’ve found that significant changes are possible even though other changes are impossible, which we’ll be documenting in our Contribution Guidelines soon.) While there are a few exceptions to this rule (e.g. if a feature is added to the Working Paper, we implement it, and then the feature is significantly changed before the International Standard is finalized, we reserve the right to break binary compatibility because/ std: c latestoffers an experimental preview of such features), binary compatibility generally overrides all other considerations, even conformance. Source compatibility refers to being able to successfully recompile user code without changes. We consider source compatibility to be important, but not all-important; breaking source compatibility can be an acceptable cost, if done for the right reasons in the right way (e.g. in a controlled manner with escape hatches).

There are things that we aren’t interested in doing with this project, for various reasons (most importantly, we need to focus development effort on our goals). Some examples:

  • Non-goal: Porting to other platforms.

  • Non-goal: Adding non-Standard extensions.

  • Non-goal: Implementing Technical Specifications. (We’re prioritizing features in the Working Paper. Occasionally, we might implement some or all of a TS, often when we’re working on the specification itself.)

If you ‘re proposing a feature to WG 21 (the C Standardization Committee), you’re welcome (and encouraged!) to use our code as a base for a proof-of-concept implementation. These non-goals simply mean that we’re unable to consider pull requests for a proposed feature until it has been voted into a Working Paper. After that happens, we’ll be delighted to review a production-ready pull request.

You can report STL bugs here, where they’ll be directly reviewed by maintainers. You can also report STL bugs throughDeveloper Community, or the VS IDE (Help>Send Feedback>Report a Problem …).

Please help usefficiently process bug reports by following these rules:

  • Only STL bugs should be reported here. If it’s a bug in the compiler, CRT, or IDE, please report it through Developer Community or Report A Problem. If it’s a bug in the Windows SDK, please report it through theFeedback Hubapp. If you aren’t sure, try to reduce your test case and see if you can eliminate the STL’s involvement while still reproducing the bug.

  • You should be reasonably confident that you’re looking at an actual implementation bug, instead of undefined behavior or surprising-yet-Standard behavior. Comparing against other implementations can help (but remember that implementations can differ while conforming to the Standard); try Godbolt’sCompiler ExplorerandWandbox. If you still aren’t sure, ask the nearest C expert.

  • You should prepare a self-contained command-line test case, ideally as small as possible. We need a source file, a command line, what happened (e.g. a compiler error, runtime misbehavior), and what you expected to happen. By “self-contained”, we mean that your source file has to avoid including code that we don’t have. Ideally, only CRT and STL headers should be included. If you have to include other MSVC libraries, or the Windows SDK, to trigger an STL bug, that’s okay. But if you need parts of your own source code to trigger the STL bug, you need to extract that for us. (On Developer Community, we’ll accept zipped IDE projects if you have no other way to reproduce a bug, but this is very time-consuming for us to reduce.)

  • A good title is helpful. We prefer “: Short description of your issue “. You don’t usually need to mentionstd ::or C . For example, “: (is_cute) should be true forenum class FluffyKittens“.

It’s okay if you report an apparent STL bug that turns out to be a compiler bug, or surprising-yet-Standard behavior. Just try to follow these rules, so we can spend more time fixing bugs and implementing features.

The STL uses boost-math headers to provide P 0226 R1 Mathematical Special Functions. We recommend usingVCPGPto acquire this dependency.

  • Install Visual Studio 2019 16 3 or later.
  • Invokegit clone https://github.com/Microsoft/vcpkg
  • InvokeCD VCPGP
  • Invoke. bootstrap-vcpkg.bat
  • Assuming you are targeting x 86 and x 64, invoke. vcpkg.exe install boost-math: x 86 - windows boost-math: x (- windows) to install the boost-math dependency. Addboost-math: arm-windows boost-math: arm 64 -windowsto this to target ARM and ARM 64.
  • Run. vcpkg.exe integrate installwhich tells Visual Studio which vcpkg instance you wish to use. If you have never done this before, you may be prompted to elevate.
  • Open Visual Studio 2019 16 .3 or later, and choose the ” Clone or check out code “option. Enter the URI to this repository, typicallyhttps://github.com/Microsoft/STL
  • Choose the architecture you wish to build in the IDE, and build as you would any other project. All necessary CMake settings are set byCMakeSettings.jsonandVCPGP integrate
  • These instructions assume you’re targetingx 64 -windows; you can change this constant below to target other architectures.

    () ************************** (Install) *************************************************** (CMake) ******** (3.) or later, (Ninja1.8.2 or later, and Visual Studio 2019 16 .3 or later.

  • Invokegit clone https://github.com/Microsoft/vcpkg
  • InvokeCD VCPGP
  • Invoke. bootstrap-vcpkg.bat
  • Invoke. vcpkg.exe install boost-math: x 64 - windowsto install the boost-math dependency.
  • Open an “x 64 Native Tools Command Prompt for VS 2019 “.
  • Change directories to a location where you’d like a clone of this STL repository.
  • Invokegit clone https://github.com/Microsoft/STL
  • InvokeCD STL
  • Invokecmake -G Ninja -DCMAKE_TOOLCHAIN_FILE={where your vcpkg clone is located} scripts buildsystems vcpkg.cmake -S. -B {wherever you want binaries}to configure the project. For example,cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=C: Dev vcpkg scripts buildsystems -c vcpkg.cmake. -B build.x 64
  • Invokeninja -C {wherever you want binaries}to build the project. For example,ninja -C build.x 64
  • Consumption of the built library is largely based on the build system you’re using. There are at least 2 directories you need to hook up. Assuming you built the x 64 target with the Visual Studio IDE, with the STL repository cloned toC: Dev STL, build outputs will end up atC: Dev STL out build x 64 out. Ensure that theincdirectory is searched for headers, and thatlib {architecture}is searched for link libraries, before any defaults supplied by MSVC. The names of the import and static libraries are the same as those that ship with MSVC. As a result, the compiler/ MD,/ MDd,/ MT, or/ MTdswitches will work without modification of your build scripts or command-line muscle memory.

    Should you choose to use the DLL flavors, the DLLs to deploy are built tobin {architecture}. Note that the DLLs generated by the CMake build system here have a suffix, defaulting to_ oss, which distinguishes them from the binaries that ship with MSVC. That avoids any conflict with the DLLs installed by theredistributablesinto System 32, and ensures that other components wanting to be a “guest in your process”, like print drivers and shell extensions, see the export surface of the STL they were built with. Otherwise, the “msvcp 140 .dll“you deployed in the same directory as your .exe would “win” over the versions in System 32.

    Complete example using x 64 DLL flavor

    The compiler looks for include directories according to theINCLUDEenvironment variable, and the linker looks for import library directories according to theLIBenvironment variable, and the Windows loader will (eventually) look for DLL dependencies according to directories in thePATHenvironment variable. From an “x 64 Native Tools Command Prompt for VS 2019 ” :

    C :  Users  bion  Desktop>set INCLUDE=C:  Dev  STL  out  build  x 64  out  inc;% INCLUDE%  C:  Users  bion  Desktop>set LIB=C:  Dev  STL  out  build  x 64  out  lib  amd 64;% LIB%  C:  Users  bion  Desktop>set PATH=C:  Dev  STL  out  build  x 64  out  bin  amd 64;% PATH%  C:  Users  bion  Desktop>type example.cpp #includeint main () {     std :: coutcl / nologo / EHsc / W4 / WX / MDd / std: c    latest.  example.cpp example.cpp  C:  Users  bion  Desktop>.  Example.exe Hello STL OSS world!  C:  Users  bion  Desktop>dumpbin / IMPORTS.  Example.exe | findstr msvcp     MSVCP 140 d_oss.dll

    The STL is built atop other compiler support libraries that ship with Windows and Visual Studio, like the UCRT, VCRuntime, and VCStartup. The following diagram describes the dependencies between those components and their ship vehicles.

    This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visithttps://cla.opensource.microsoft.com.

    When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

    This project has adopted theMicrosoft Open Source Code of Conduct. For more information see theCode of Conduct FAQor contact[email protected]with any additional questions or comments.

    Copyright (c) Microsoft Corporation.

    SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

      

    Brave Browser
    Read More
    Payeer

    What do you think?

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    GIPHY App Key not set. Please check settings

    Netflix Will Start Streaming “Seinfeld” Around the Time That Nobody Cares, Crypto Coins News

    Netflix Will Start Streaming “Seinfeld” Around the Time That Nobody Cares, Crypto Coins News

    Julien Chaumond on Twitter, Hacker News

    Julien Chaumond on Twitter, Hacker News