Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Дмитрий Нестерук «Пролетая над уровнем абстракции»

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for DotNetRu DotNetRu
October 17, 2019

Дмитрий Нестерук «Пролетая над уровнем абстракции»

Любой язык программирования дизайнеры стараются делать наиболее гибким и покрывающим все текущие потребности. Но если бы у нас был «one language to rule them all», другие языки были бы не нужны. В этом докладе Дмитрий пройдётся по спектру подходов, который позволяет залатать «дыры» в стандартной инфраструктуре .NET, включая кодогенерацию, метапрограммирование, REPL-ability, взаимодействие с unmanaged кодом, и другие подходы.

Avatar for DotNetRu

DotNetRu

October 17, 2019
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. let solveQuadratic a b c = let disc = b

    * b - 4.0 * a * c let calc op = (op (-b) (sqrt disc)) / (2.0*a) (calc (+), calc(-)) “There Are No Zero-cost Abstractions” Chandler Carruth, CppCon 2019 https://www.youtube.com/watch?v=rHIkrotSwcc
  2. public enum Color { Red = 0xff0000, Green = 0x00ff00,

    Blue = 0x00ff00, DarkBrown = 0x654321 }
  3. public static class ColorExtensions { public static string GetName(this Color

    c) { switch (c) { case Color.Red: return "red"; case Color.Green: return "green"; case Color.DarkBrown: return "dark brown"; } return "unknown;" } }
  4. type Color = Red | Green | Blue | RGB

    of r: byte * g: byte * b: byte | CMYK of c: byte * m: byte * y: byte * k: byte
  5. public struct GameObjects { public Point Positions[]; public Vector Locations[];

    public Pixels(int size) { Positions = new Point[size]; // etc. } } GameObjects objs = new GameObjects(100); objs[0].Positions.X = 0; // how?