This repo is for experimentation and exploring new ideas that may or may not make it into the main corefx repo.
Перейти к файлу
Krzysztof Cwalina 1fecfe7350
Removed Old BufferReader (#2025)
* Unified Readers
* Removed PositionOf from reader
* Added tests for CopyTo
* reacted to changes to ReadOnlyBuffer
* Renamed CopyTo to Peek
2018-01-09 08:55:50 -08:00
docs Some small updates to the Span<T> design document (#1955) 2017-11-27 09:54:07 -08:00
external Enable Brotli tests (#1656) 2017-07-06 15:06:10 -07:00
samples Another set of API review changes (#2022) 2018-01-08 08:49:46 -08:00
scripts ROB now hides items past its length (#1913) 2017-11-08 11:10:06 -08:00
src Removed Old BufferReader (#2025) 2018-01-09 08:55:50 -08:00
tests Removed Old BufferReader (#2025) 2018-01-09 08:55:50 -08:00
tools Update CoreSetup, CoreSetup to preview1-26108-01, preview1-26108-01, respectively (#2034) 2018-01-08 14:58:33 -08:00
.editorconfig Updated to the new engineering system 2015-06-08 09:52:08 -07:00
.gitattributes Initial commit of the non-allocating formatting library 2015-01-19 16:32:30 -08:00
.gitignore Rename dotnet folder to dotnet cli to workaround corefx #24402 (#1826) 2017-10-06 18:19:38 -07:00
Cloud.sln Removing System.Binary (and tests) from solution (#1919) 2017-11-08 19:07:33 -08:00
DotnetCLIVersion.txt Update Cli, CoreFx, CoreFx, CoreFx, CoreSetup, CoreSetup to preview1-007877, preview1-26108-02, preview1-26108-02, preview1-26108-02, preview1-26107-01, preview1-26107-01, respectively 2018-01-08 06:23:58 -08:00
LICENSE Initial commit 2015-01-19 16:08:25 -08:00
NuGet.Config Referencing and using custom C# compiler from roslyn myget feed (#1443) 2017-04-07 11:12:23 -07:00
README.md Update readme 2017-11-13 09:40:45 -08:00
SharedRuntimeVersion.txt Update CoreSetup, CoreSetup to preview1-26108-01, preview1-26108-01, respectively (#2034) 2018-01-08 14:58:33 -08:00
build.cmd Move VS dev command prompt call to re_write_il.cmd 2016-04-27 15:33:24 -07:00
build.sh Remove Base64 APIs and OperationStatus and update uses (#1896) 2017-11-01 18:13:41 -07:00
corefx.vssettings Updated to the new engineering system 2015-06-08 09:52:08 -07:00
corefxlab.sln More Pipelines API review changes (#1989) 2017-12-21 15:49:46 -08:00
json.playlist Enabled object and array support in JsonLazyDynamicObject 2016-10-07 10:35:21 -07:00
netci.groovy Adding Linux and Mac CI runs. (#1535) 2017-05-10 17:34:39 -07:00
package.cmd Move VS dev command prompt call to re_write_il.cmd 2016-04-27 15:33:24 -07:00

README.md

.NET Core Lab

This repo is for experimentation and exploring new ideas that may or may not make it into the main corefx repo.

Build & Test Status

x64 Debug x64 Release
Windows NT x64-debug x64-release
Ubuntu 16.04 x64-debug x64-release
OSX 10.12 x64-debug x64-release

Roadmap

While this repo is meant for experimentation, we still want to focus our efforts in a particular direction, specifically to work on areas aligned with our roadmap.

The general idea is that we mature our thinking in this repo and either decide not to pursue it or that we want to productize in which case we'll eventually migrate the code to the appropriate location, usually the dotnet/corefx repository.

Of course, this doesn't mean we're not willing to explore areas that aren't part of our roadmap, but we'd prefer if these would start with a document, and not with code. This allows us to collaborate on how we want to approach specific holes or issues with our platform without being drowned in large PRs.

Components

Currently, this repo contains the following experimental components:

  • System.Slices These APIs moved to System.Memory (a component in the CoreFx repo) and to System.Buffers.Primitives (a component in this repo)

  • System.Buffers.Primitives A set of features for representing and manipulating managed, native buffers. The package complements Span<T> and ReadOnlySpan<T> primitives of System.Memory package. See more information about the features at span.md and memory.md.

  • System.Text.Formatting. System.Text.Formatting APIs are similar to the existing StringBuilder and TextWriter APIs. They are designed to format values into text streams and to build complex strings. But these APIs are optimized for creating text for the Web. They do formatting with minimum GC heap allocations (1/6 of allocations in some scenarios) and can format directly to UTF8 streams. This can result in significant performance wins for software that does a lot of text formatting for the Web, e.g. generating HTML, JSON, XML. See more information on this component and code samples at the Wiki.

  • System.Text.Primitives The System.Text.Primitives library contains fast, non-allocating integral parsing APIs. They are designed for scenarios in which a byte buffer and an index are accepted as input and a parsed value is desired as output (e.g. in a web server). These APIs present significant performance gains over converting the buffer to a string, indexing into the string, and then parsing.

  • System.IO.FileSystem.Watcher.Polling. .NET's FileSystemWatcher has low overhead, but it can miss some changes. This is acceptable in many scenarios, but in some, it might be not. This component, PollingWatcher, allows to monitory directory changes by polling, and so will never miss a change. It is optimized to minimize allocations, when no changes are detected. In fact, it does not allocate anything on the GC heap when there are no changes detected.

  • System.Time. This project augments the date and time APIs in .NET. It adds two new core types: Date and Time. These types will ultimately be submited for inclusion in System.Runtime.

  • System.Collections.Generic.MultiValueDictionary. The MultiValueDictionary is a generic collection that functions similarly to a Dictionary<TKey, ICollection<TValue>> with some added validation and ease of use functions. It can also be compared to a Lookup with the exception that the MultiValueDictionary is mutable. It allows custom setting of the internal collections so that uniqueness of values can be chosen by specifying either a HashSet<TValue> or List<TValue>. Some of the design decisions as well as introductions to usage can be found in the old blog posts introducing it here and here.

  • System.CommandLine. The purpose of this library is to make command line tools first class by providing a command line parser. Here are the goals: designed for cross-platform usage, lightweight with minimal configuration, optional but built-in support for help, validation, and response files, support for multiple commands, like version control tools. See the README.md for more information.

  • System.IO.Compression.Brotli Brotli is a generic-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling, with a compression ratio comparable to the best currently available general-purpose compression methods. It is similar in speed with deflate but offers more dense compression. This library provides Brotli Compress/Decompress methods and BrotliStream class for compress/decompress data in stream. See the README.md for details.

More libraries are coming soon. Stay tuned!

For an overview of all the .NET related projects, have a look at the .NET home repository.

How to Use

You can get the .NET Core Lab packages from dotnet-corefxlab MyGet feed:

https://dotnet.myget.org/F/dotnet-corefxlab/

or

https://dotnet.myget.org/F/dotnet-corefxlab/api/v3/index.json (preview support)

Symbols:

https://dotnet.myget.org/F/dotnet-corefxlab/symbols/

You can add this feed among your NuGet sources and install the packages (keep in mind that packages are pre-release packages).

License

This project is licensed under the MIT license.

.NET Foundation

This project is a part of the .NET Foundation.

There are many .NET related projects on GitHub.

  • .NET home repo - links to 100s of .NET projects, from Microsoft and the community.
  • ASP.NET Core home - the best place to start learning about ASP.NET Core.

Building and Testing

To build the projects in this repo, you have a few options:

  • Download or install a new version of the .NET CLI for your operating system. Then, simply invoke the tool to build individual projects (dotnet restore and then dotnet build).
  • (On Windows) Invoke build.cmd. This will download an acceptable version of the .NET CLI automatically and use it to build the entire repository. NOTE: Don't invoke scripts/build.ps1 directly. It requires that some environment be set in order for it to work correctly. build.cmd does this.
  • (On Windows) Open the solution file in Visual Studio 2015. NOTE: This requires unreleased plugins to work at this point in time. Using VS Code, see https://aka.ms/vscclrdogfood.
  • If using Visual Studio, install the following VSIX to have IDE support for C#7.2 features that this project uses. - https://dotnet.myget.org/F/roslyn/vsix/0b48e25b-9903-4d8b-ad39-d4cca196e3c7-2.6.0.6221102.vsix

Measuring Performance

For details, please refer to the PerfHarness documentation.