Highly extensible software like Emacs, Vim, and Neovim tend to grow their own package managers. A software developer, for example, might want to install editor plugins that hook into a particular programming language's linter or language server. The programmer's text editor is therefore extended to support managing additional software to extend the text editor. If this loop continues for too long, the programmer's editor becomes more delicate and complex. The remedy for this problem is to manage software using dedicated tools apart
Dynamic PGO (Profile-guided optimization) is a JIT-compiler optimization technique that allows JIT to collect additional information about surroundings (aka profile) in tier0 codegen in order to rely on it later during promotion from tier0 to tier1 for hot methods to make them even more efficient.
-
Profile-driving inlining - inliner relies on PGO data and can be very aggressive for hot paths and care less about cold ones, see dotnet/runtime#52708 and dotnet/runtime#55478. A good example where it has visible effects is this StringBuilder benchmark:
-
Guarded devirtualization - most monomorphic virtual/interface calls can be devirtualized using PGO data, e.g.:
void DisposeMe(IDisposable d)
using System; | |
using System.Collections.Generic; | |
using System.Configuration; | |
using System.Diagnostics; | |
using System.IO; | |
using System.IO.Compression; | |
using System.IO.Pipes; | |
using System.Linq; | |
using System.Management; | |
using System.Net; |
These are some notes about settings I like to use when I code in Visual Studio. They are completely optional.
- Automatic brace completion = false
- Dark Theme
Tools -> Options -> Environment -> General
- Disable Semicolon Bullshit
Tools -> Options -> Text Editor -> C# -> IntelliSense
- Automatically complete statement on semicolon = false
- Control Click
Tools -> Options -> Text Editor -> General
- Enable mouse click to perform Go to Definition = false
- Shift Key Overrides
Tools -> Options -> Environment -> Keyboard
Hello!
For this article we take Tensor as a N-dimensional array whose last two axes might be interpreted as Matrix and/or the last axis might be interpreted as Vector. For TLDR the result is here.
- Tensors (N-dimensional storage)
- Implementation of methods and functions for working with tensors as with data storages
using System; | |
using System.Collections; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Linq.Expressions; | |
using System.Reflection; | |
using static Syntax; | |
static class Program | |
{ | |
static void Main() |
" Vim syntax file | |
" Language: Todo | |
" Maintainer: Huy Tran | |
" Latest Revision: 14 June 2020 | |
if exists("b:current_syntax") | |
finish | |
endif | |
" Custom conceal |
I suggest that you create one or more Api.fs
files to expose F# code in a C# friendly way.
In this file:
- Define functions with
PascalCase
names. They will appear to C# as static methods. - Functions should use tuple-style declarations (like C#) rather than F#-style params with spaces.
module Printf | |
%default total | |
-- Formatting AST. | |
data Format | |
= FInt Format | |
| FString Format | |
| FOther Char Format | |
| FEnd |
Contributed by Fabien Loudet, Linux SysAdmin at Rosetta Stone
Tired of always having to enter your SSH key passphrase when logging in to remote machines?
Here comes ssh-agent
. Enter the passphrase once and it will keep it in memory for you
Using ssh-agent in your shell session: