Giter VIP home page Giter VIP logo

vcperf's Introduction

vcperf

Overview

vcperf is a C++ build analysis tool for the MSVC toolchain. It is built on top of C++ Build Insights, MSVC's data collection and analysis platform. Use vcperf to collect build traces that you can view in Windows Performance Analyzer (WPA) to understand your build times. An example of a vcperf trace viewed in WPA is shown below.

Overview of what a vcperf trace looks like when viewed in WPA.

vcperf can also generate flame graphs viewable in Microsoft Edge's trace viewer, as shown below:

Overview of what a vcperf trace looks like when viewed in Microsoft Edge.

How vcperf works

vcperf makes use of the Event Tracing for Windows (ETW) relogging interface available in the C++ Build Insights SDK. This interface allows vcperf to translate an MSVC build trace into a new, customized ETW event format that is suitable for viewing in WPA. The translation process involves determining the context of each event, and emiting new events that include this information. For example, when vcperf emits an event for the code generation time of a function, it also includes the compiler or linker invocation in which the code generation took place. Having this context available allows gaining more insight from the data, such as determining the functions that took longest to generate for one particular invocation.

Customizing vcperf to your needs

We made vcperf available as an open-source project to allow you to customize it for your own scenarios. Here are some ideas to consider when extending vcperf:

  • Writing the events in a format that works with a different viewer.
  • Modifying and filtering the events shown in WPA.

An example vcperf extension is shown in the following Git commit: ba2dd59fa1ec43542be3cca3641156cd18dc98df. It detects linkers that were restarted during your build due to error conditions, and highlights them in the Build Explorer view.

Contributing

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, visit https://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 the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Note that currently, all tests for vcperf are done internally by Microsoft. All requests for contributions will need to pass these tests prior to integrating the code in the vcperf repo. Please feel free to start a pull request and we will follow up to ask for more information.

Build and run

Following the instructions below to build and run the product.

Requirements:

  • Visual Studio 2019 or later.
  • Windows 8 and above.

Build steps:

  1. Clone the repository on your machine.
  2. Open the Visual Studio solution file.
  3. vcperf relies on the C++ Build Insights SDK NuGet package. Restore NuGet packages and accept the license for the SDK.
  4. Build the desired configuration. Available platforms are x86, x64, and ARM64 and available configurations are Debug and Release.

Running vcperf:

  1. vcperf requires CppBuildInsights.dll and KernelTraceControl.dll to run. These files are available in the C++ Build Insights NuGet package. When building vcperf, they are automatically copied next to it in the output directory. If you are going to move vcperf around on your machine, please be sure to move these DLL's along with it.
  2. Launch a command prompt. (Must be elevated command prompt to collect CPU sampling)
  3. Use vcperf according to the Command-line reference below.
  4. Before viewing traces in WPA, follow the instructions in Installing the C++ Build Insights WPA add-in.

Installing the C++ Build Insights WPA add-in

Viewing vcperf traces in WPA requires the C++ Build Insights WPA add-in. Install it by following these steps:

  1. Have WPA installed on your machine, or install the latest version available here: https://docs.microsoft.com/windows-hardware/get-started/adk-install. Make sure your WPA version has perf_msvcbuildinsights.dll located at C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit.
  2. Make sure you have restored the NuGet packages for the vcperf solution.

Command-line reference

Commands to start and stop traces

IMPORTANT: Unless /noadmin is used, the following commands require administrative privileges.

Option Arguments and description
/start [/noadmin] [/nocpusampling] [/level1 | /level2 | /level3] <sessionName>
Tells vcperf.exe to start a trace under the given session name. When running vcperf without admin privileges, there can be more than one active session on a given machine.

If the /noadmin option is specified, vcperf.exe doesn't require admin privileges. "If the /noadmin option is specified, vcperf.exe doesn't require admin privileges, and the /nocpusampling flag is ignored."

If the /nocpusampling option is specified, vcperf.exe doesn't collect CPU samples. It prevents the use of the CPU Usage (Sampled) view in Windows Performance Analyzer, but makes the collected traces smaller.

The /level1, /level2, or /level3 option is used to specify which MSVC events to collect, in increasing level of information. Level 3 includes all events. Level 2 includes all events except template instantiation events. Level 1 includes all events except template instantiation, function, and file events. If unspecified, /level2 is selected by default.

Once tracing is started, vcperf.exe returns immediately. Events are collected system-wide for all processes running on the machine. That means that you don't need to build your project from the same command prompt as the one you used to run vcperf.exe. For example, you can build your project from Visual Studio.
/stop (1) [/templates] <sessionName> <outputFile.etl>
(2) [/templates] <sessionName> /timetrace <outputFile.json>
Stops the trace identified by the given session name. Runs a post-processing step on the trace to generate a file specified by the <outputFile> parameter.

If the /templates option is specified, also analyze template instantiation events.

(1) Generates a file viewable in Windows Performance Analyzer (WPA). The output file requires a .etl extension.
(2) Generates a file viewable in Microsoft Edge's trace viewer (edge://tracing). The output file requires a .json extension.
/stopnoanalyze <sessionName> <rawOutputFile.etl>
Stops the trace identified by the given session name and writes the raw, unprocessed data in the specified output file. The resulting file isn't meant to be viewed in WPA.

The post-processing step involved in the /stop command can sometimes be lengthy. You can use the /stopnoanalyze command to delay this post-processing step. Use the /analyze command when you're ready to produce a file viewable in Windows Performance Analyzer.

Miscellaneous commands

Option Arguments and description
/analyze (1) [/templates] <rawInputFile.etl> <outputFile.etl>
(2) [/templates] <rawInputFile.etl> /timetrace <outputFile.json>
Accepts a raw trace file produced by the /stopnoanalyze command. Runs a post-processing step on this trace to generate a file specified by the <outputFile> parameter.

If the /templates option is specified, also analyze template instantiation events.

(1) Generates a file viewable in Windows Performance Analyzer (WPA). The output file requires a .etl extension.
(2) Generates a file viewable in Microsoft Edge's trace viewer (edge://tracing). The output file requires a .json extension.

Overview of the code

This section briefly describes the source files found in the src directory.

Item name Description
WPA\Analyzers\ContextBuilder.cpp/.h Analyzer that determines important information about every event, such as which cl or link invocation it comes from. This data is used by all View components when writing their events in the relogged trace.
WPA\Analyzers\ExpensiveTemplateInstantiationCache.cpp/.h Analyzer that pre-computes the templates with the longest instantiation times. This data is later consumed by TemplateInstantiationsView.
WPA\Analyzers\MiscellaneousCache.h Analyzer that can be used to cache miscellaneous data about a trace.
WPA\Views\BuildExplorerView.cpp/.h Component that builds the view responsible for showing overall build times in WPA.
WPA\Views\FilesView.cpp/.h Component that builds the view responsible for showing file parsing times in WPA.
WPA\Views\FunctionsView.cpp/.h Component that builds the view responsible for showing function code generation times in WPA.
WPA\Views\TemplateInstantiationsView.cpp/.h Component that builds the view responsible for showing template instantiation times in WPA.
TimeTrace\ExecutionHierarchy.cpp/.h Analyzer that creates a number of hierarchies out of a trace. Its data is later consumed by TimeTraceGenerator.
TimeTrace\TimeTraceGenerator.cpp/.h Component that creates and outputs a .json trace viewable in Microsoft Edge's trace viewer.
TimeTrace\PackedProcessThreadRemapping.cpp/.h Component that attempts to keep entries on each hierarchy as close as possible by giving a more logical distribution of processes and threads.
Commands.cpp/.h Implements all commands available in vcperf.
GenericFields.cpp/.h Implements the generic field support, used to add custom columns to the views.
main.cpp The program's starting point. This file parses the command line and redirects control to a command in the Commands.cpp/.h file.
PayloadBuilder.h A helper library used to build ETW event payloads prior to injecting them in the relogged trace.
Utility.h Contains common types used everywhere.
VcperfBuildInsights.h A wrapper around CppBuildInsights.hpp, used mainly to set up namespace aliases.

vcperf's People

Contributors

cardinot avatar helena-gregg avatar johanseland avatar kevcadieux avatar laurenprinn avatar metanokid avatar microsoft-github-operations[bot] avatar microsoftopensource avatar nelsondaniel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vcperf's Issues

/Analyze timetrace fails with error code 57005.

We are running a build in CI on this image: https://github.com/actions/runner-images/blob/win22/20230730.1/images/win/Windows2022-Readme.md

And get the following error.
vcperf /analyze raw_primary_build.etl /timetrace primary_build.json
Microsoft (R) Visual C++ (R) Performance Analyzer 2.2.22080401
Analyzing...
##[error]Cmd.exe exited with code '57005'.

'57005' Is hex for dead, maybe pointer related?

The unprocessed etl artifact was able to downloaded and analyzed locally on using vcperf at f5c2a0c. The unprocessed etl was able to be /analyzed with the etl output succesfully in CI.

I do not see a github tag for 2.2.22080401 to try and reproduce locally.

This is a large build and had to take the advice from #15 (comment) about setting the temp directories to get this far. The unprocessed ETL was 5_270 mb, and when done locally the processed etl ~1000 mb and the timetrace ~300 mb.

ICE with vs2019 16.7.2

vcperf\src\timetrace\executionhierarchy.cpp : fatal error C1001: Internal compiler error.
1>(compiler file 'd:\agent\_work\8\s\src\vctools\Compiler\Utc\src\p2\main.c', line 195)
1> To work around this problem, try simplifying or changing the program near the locations listed above.
1>If possible please provide a repro here: https://developercommunity.visualstudio.com
1>Please choose the Technical Support command on the Visual C++
1> Help menu, or open the Technical Support help file for more information
1>  link!RaiseException()+0x62
1>  link!CxxThrowException()+0x66
1>  link!std::_Xout_of_range()+0x1f
1>  link!InvokeCompilerPass()+0x432b5
1>  link!InvokeCompilerPass()+0x3016a
1>  link!InvokeCompilerPass()+0x312b4
1>  link!InvokeCompilerPass()+0x412c6
1>  link!InvokeCompilerPassW()+0x100fd9

Open source perf_msvcbuildinsights.dll

I'd like to change the UI layout of the Files Explorer by adding a few columns that represent some domain specific information about my application. Then I'd like to change vcperf to emit those columns. As it stands, this appears impossible. There is no code in this repository that defines the layout of the views in WPA, and there's no way to influence the mapping of parameters in PayloadBuilder::Build() to columns in the UI. So I suspect all of this code lives in perf_msvcbuildinsights.dll.

Can this be open sourced?

"Unknown Invocation" in timeline when using CL-Server mode

Tracing a build with CL-Server mode enabled:

    <UseMultiToolTask>true</UseMultiToolTask>
    <EnforceProcessCountAcrossBuilds>true</EnforceProcessCountAcrossBuilds>
    <EnableCLServerMode>true</EnableCLServerMode>
    <BuildPassReferences>true</BuildPassReferences>
    <AllowParallelCompileInReferencedProjects>true</AllowParallelCompileInReferencedProjects>

results in many unknown invocations:

image

Each blue bar in the timeline is unknown. Curiously some invocations are displayed properly (other colors). Setting EnableCLServerMode to false works fine. Not sure if this is an issue with how vcperf analyzes the trace or how the compiler emits events.

Using-directives in headers

Many of the headers have using-directives in them. If people would like to integrate vcperf into another codebase, or reuse components of it, this will force namespace pollution on them. Recommend fully qualifying names in headers and removing the using-directives.

Able to start traces with `/noadmin` but can't stop them

I'm using the latest version of VS and WPT and for some reason I cannot stop traces started with /noadmin. I am able to start traces with /noadmin I just can't stop them. I get the error message:

You are using a version of the MSVC toolset that does not support the `/noadmin` option. Please try updating your MSVC toolset to at least 16.11.

Microsoft (R) Visual C++ (R) Performance Analyzer 2.2.22080401
Microsoft Visual Studio Professional 2022 (64-bit) Version 17.5.1

I'm using the perf_msvcbuildinsights.dll from C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.29.30133. I copied it to C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit because the dll that came with the kit didn't work. When opening a trace I could see file names but no timing information.

vcperf miss some templates

Hello

I am trying to optimize the compile time of a home made library.
Until now, I was using clang -ftime-trace option that gives us a nice json to read, with the time of each template instantiation.

I saw that we can do the same with vcperf. However, when we compile simple code, vc perf does not output anything useful.... We get the time to parse includes, but nothing relevant about template instantiation.
However, on "heavy" templates, we do obtain information on the heavy one, and sometimes about the little also. (It is funny because vcperf does not catch them when there is only small ones)

Here a code sample :

template <int... is> struct seq {};

template <int Size, int... Is>
struct make_seqImpl : make_seqImpl<Size - 1, Size - 1, Is...> {};

template <int... Is> struct make_seqImpl<0, Is...> { using type = seq<Is...>; };

template <int generate> using make_seq = typename make_seqImpl<generate>::type;

int main() {
  constexpr auto seq = make_seq<5>{};
  return 0;
}

Here the command lines

vcperf.exe /start /level3 a
compilation from QtCreator or visual studio using MSVC
vcperf.exe /stop /templates a output.etl

What can I do?

Thanks :)

Cannot use perf_msvcbuildinsights.dll

Hi,
vcperf show following log after start. perf_msvcbuildinsights.dll cannot be loaded:

Windows Performance Analyzer 10.0.19041.1 (WinBuild.160101.0800)
Loaded preferences from C:\Users\roebst2\AppData\Local\Windows Performance Analyzer\WindowPreferences.xml
Using default color table
Loaded Local Preferences from C:\Users\roebst2\AppData\Local\Windows Performance Analyzer\FileHistory.xml
Loaded Local Preferences from C:\Users\roebst2\AppData\Local\Windows Performance Analyzer\Preferences.xml
Loaded Local Preferences from C:\Users\roebst2\AppData\Local\Windows Performance Analyzer\Preferences.xml
Error: Could not load add-in: C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\perf_msvcbuildinsights.dll. Exception: System.Runtime.InteropServices.COMException (0x80004005): Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zur??ckgegeben.
bei Microsoft.Performance.PerfCore4.IAddInManager.LoadAddIn(String fileName)
bei Microsoft.Performance.Shell.AddIns.WpaAddInManager.TryLoadNativeAddIn(String nativeAddInDll)

Formatting Issues

There are some formatting issues, such as here. Recommend picking a Clang Format style.

Build fails if project is built from a path containing spaces

Just to let you know that the build fails if the project is built from a path which contains spaces.

1>mc : error : errno 13 trying to open file <C:\Users\anna\OneDrive>.
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(150,5): error MSB3073: The command "mc C:\Users\anna\OneDrive - CompanyName\Projects\Tools\vcperf\\src\CppBuildInsightsEtw.xml -h C:\Users\anna\OneDrive - CompanyName\Projects\Tools\vcperf\src\x64\Release\ -r C:\Users\anna\OneDrive - CompanyName\Projects\Tools\vcperf\src\x64\Release\
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(150,5): error MSB3073: :VCEnd" exited with code 1.
1>Done building project "vcperf.vcxproj" -- FAILED.

timetrace outputs with incorrect timing?

I think the timings the .json output from /timetrace might be incorrect As an example, I used this program:

#include <vector>
int main()
{
   return 0;
}

I ran vcperf and created both .etl and .json outputs. The json, when viewed in chrome, looks like this:

grafik

That's already a bit odd. the main.cpp file has seemingly two entries. One under the proper CL invocation, FrontEndPass etc - and one to the side. This looks much different in WPA:

grafik

In larger projects, this doesn't always happen. I couldn't quite nail the problem down but I think it has to do with the different "ph" properties of the entries. Sometimes there are double "B" entries where it almost seems as if the second should be an "E". But I'm not too familiar with the trace format.

Evaluate total impact of template library

First of all, thank you very much for C++ Build Insights!
I had to analyze build times in the past, but usually had to estimate template issues using object files (with SymbolSort).

I have a project, where Eigen template library was added recently. I'm trying to understand how much build time its template code takes. The same question can be asked for std::* code, boost::* or any other template library.


Parsing library headers is easy to take into account: open "Files" view, filter table data by "Included Path" containing "Eigen" as substring, then look at "Exclusive Duration" of root node "Parsing". Unfortunately, it is not easy to do the same for template instantiations.

First of all, vcperf removes some template instantiations, as noticed in #16. As far as I understand, the raw trace contains all template instantiations, but the analysis removes small ones to make analyzed trace smaller and more responsive when opened in WPA. I worked around this problem by hacking ExpensiveTemplateInstantiationCache::DetermineTopPrimaryTemplates.

Second, only "Duration" is displayed for template instantiations in WPA. It is inclusive, so it cannot be aggregated. I can workaround it by replacing td.WallClockTimeResponsibility with td.ExclusiveDuration in TemplateInstantiationsView::OnTemplateInstantiationStart. Perhaps ExclusiveCPUTime makes even more sense here.

The last inconvenience is that I don't know how to compute sum of column value over all selected/filtered entries in WPA table (except for copying everything to csv and writing simple script). The "Files" view allows summation by having "Activity Name" = "Parsing" key column, but there is no such column in "Template Instantiations" view. Perhaps the most useful additional key column would be "root namespace" (prefix of "Primary Template Name" before ::) like "Eigen", "std" or "boost".


Is it possible to configure the columns displayed in WPA views?
I see that I can add more fields in vcperf code, but WPA does not display them. I tried editing CppBuildInsightsEtw.xml, but it did not help.

P.S. I guess the best approach would be to write a custom analyzer which will aggregate data on-the-fly, without creating massive traces with all template instantiations.

vcperf changes toolset

It seems that calling vcperf /start overrides usage of older toolset. Project has been generated through CMake with
-G"Visual Studio 16 2019" -Tv142,version=14.26,host=x64
Generated vcxproj has <Import Project="C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Auxiliary/Build/14.26/Microsoft.VCToolsVersion.14.26.props" />

There was no problem until I've updated VS2019 from 16.6.* to 16.8.3. Normal build works as usual but if I call "vcperf /start mysessionname" build starts using 14.28 instead. I've noticed it because project tries to link with static libraries (with /GL) that are built with 14.26
"LINK : fatal error C1047: The object or library file 'C:\3d\Boost-1.74.0-msvc16u6-x64\lib\Release\libboost_filesystem.lib' was created by a different version of the compiler than other objects like '....obj'; rebuild all objects and libraries with the same compiler"

I can try reproducing on simple project if description isn't enough and it's not intended behavior.

Readme.md does not say how to provide a session name

The command line interface says that /start "Tells vcperf.exe to start a trace under the given session name.", but it does not say how to provide a session name.

Please add at least one or two examples of a complete command line.

Also, I think the solution will not build using VS 2017, so the instructions should say to open it in VS 2019.

Thanks

Declarations are not namespaced

The declarations in the vcperf headers are not namespaced. If people would like to integrate vcperf into another codebase, or reuse components of it, this will force namespace pollution on them.

cant stop vperf

hi,

how to force stop session?

e:\test>D:\prod\structures\MSBuild..\Packages\vcperf.1.0.0\build\vcperf.exe /stop VPERFMSBUILDTASK asasda.etl
Microsoft (R) Visual C++ (R) Performance Analyzer DEVELOPER VERSION
Stopping tracing session VPERFMSBUILDTASK...
Dropped MSVC events: 0
Dropped MSVC buffers: 0
Dropped system events: 0
Dropped system buffers: 0
Failed to stop trace.
ERROR CODE: FAILURE_SESSION_DIRECTORY_RESOLUTION

tried /stop /stopnoanalyse

Logger Name: MSVC_BUILD_INSIGHTS_SESSION_VPERFMSBUILDTASK
Logger Id: 0x1d
Logger Thread Id: 0000B070
Guid: f6918e25-9dae-11ea-af58-54bf6479e167
Session Security: D:(A;;0x1800;;;WD)(A;;0x120fff;;;SY)(A;;0x120fff;;;LS)(A;;0x120fff;;;NS)(A;;0x120fff;;;BA)(A;;0xee5;;;LU)(A;;LC;;;MU)(A;;0x1800;;;AC)(A;;0x1800;;;S-1-15-3-1024-3153509613-960666767-3724611135-2725662640-12138253-543910227-1950414635-4190290187)
Buffer Size: 256 Kb
Maximum Buffers: 320
Minimum Buffers: 64
Number of Buffers: 64
Free Buffers: 48
Buffers Written: 37
Events Lost: 0
Log Buffers Lost: 0
Real Time Buffers Lost: 0
Real Time Consumers: 0
ClockType: PerfCounter
Log Mode: Sequential
Hybrid Shutdown: Stop
Maximum File Size: not set
Buffer Flush Timer: not set
Log Filename: C:\Users\jocs\AppData\Local\Temp\CppBuildInsights{104BA2FC-DF47-4DCF-BDF1-EC440C8B0565}\msvc.etl

.NET/C# build insights support

I am trying to diagnose very slow build times in a large C# project (VBCSCompiler.exe pegging the CPU for ~90s after a one-liner change, every time). I would love to use WPA to diagnose what can cause this extreme CPU usage on every build when so little code has changed. Is there an equivalent of this but for C# projects instead of C++?

C-style casts used

There are a few places where C-style casts are used instead of named casts (e.g. here), which are preferable for both comprehensibility and safety, see Core Guideline ES.49.

Tracing with /level3 results in FAILURE_MERGE_TRACES

When trying to analyze a project of our solution with vcperf /level3 it's not possible to successfully stop the tracing session. I've also tried to use /nocpusampling together with /stopnoanalyze but the error still occurs. The Sprout example from the blog works fine.

vcperf /start /level3 MySessionName

Microsoft (R) Visual C++ (R) Performance Analyzer 1.3.20031402
Starting tracing session MySessionName...
Tracing session started successfully!

vcperf /stop /templates MySessionName outputFile.etl

Microsoft (R) Visual C++ (R) Performance Analyzer 1.3.20031402
Stopping and analyzing tracing session MySessionName...
Dropped MSVC events: 0
Dropped MSVC buffers: 0
Dropped system events: 0
Dropped system buffers: 0
Failed to stop trace.
ERROR CODE: FAILURE_MERGE_TRACES

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.