Let's say you have implemented a small data pipeline library to replace LINQ.
module TrivialStream =
type Receiver<'T> = 'T -> unit
type Stream<'T> = Receiver<'T> -> unit
module Details =
/* | |
The absence of the C# unsafe keyword and switch does not guarantee code | |
is type or memory safe. It merely prevents the use of pointer types and | |
fixed size buffers. | |
The only thing that can guarantee type and memory safety is | |
verification and CAS/transparency enforcement. | |
In particular, the absence of unsafe C# blocks does NOT: |
using BenchmarkDotNet.Attributes; | |
using BenchmarkDotNet.Attributes.Columns; | |
using BenchmarkDotNet.Configs; | |
using BenchmarkDotNet.Running; | |
using System; | |
using System.Collections; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Runtime.CompilerServices; |
/** | |
veh_hook Vectored Exception Handler hooking library | |
Version: 24-March-2008 | |
**/ | |
#define WINVER 0x0501 | |
#define _WIN32_WINNT 0x0501 | |
#include <windows.h> | |
#include "veh_hook.h" | |
static veh_list_t* list = NULL; |
/* | |
Q: At which size is it preferrable to use binary search over a simple linear search for a small ordered set? | |
R: Under 5 elements, linear search is slightly faster (from 200% to 10% faster) | |
But in practice, not sure a switch case to select the best method is really worth it | |
Unless main usecase is having most of the time only 1-2 elements (so it could be optimized manually without a loop and switch to binary otherwise) | |
At 3-4 elements, linear is only 10-5% faster | |
Relative performance between linear and binary search: | |
size x86 x64 |
[Config(typeof(Config))] | |
public class ContinueWithAllocations | |
{ | |
private class Config : ManualConfig | |
{ | |
public Config() | |
{ | |
Add(new MemoryDiagnoser()); | |
} | |
} |
using Microsoft.Diagnostics.Runtime; | |
using System; | |
using System.Collections.Generic; | |
using System.Diagnostics; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
namespace SDDTriage | |
{ |
public interface IObjectPool<T> | |
{ | |
T Rent(); | |
void Return(T obj); | |
} | |
public interface IResetable | |
{ | |
void Reset(); | |
} |
using System; | |
using System.Collections.Generic; | |
using System.Diagnostics; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
namespace StackAllocVsHeapAlloc | |
{ | |
public static class Sandbox |
using System; | |
using System.Reflection; | |
using System.Reflection.Emit; | |
namespace ConsoleApplication3.Test | |
{ | |
static class EntityPtr | |
{ | |
private static readonly IEntityPtr converter = CreateConverter(); |