I hereby claim:
- I am 4e6 on github.
- I am 4e6 (https://keybase.io/4e6) on keybase.
- I have a public key whose fingerprint is D79B E30D 645A 0771 2B89 BC85 87C1 6090 D691 0E91
To claim this, I am signing this object:
| {-# LANGUAGE FlexibleInstances #-} | |
| {-# LANGUAGE MultiParamTypeClasses #-} | |
| {-# LANGUAGE NumDecimals #-} | |
| {-# LANGUAGE TypeFamilies #-} | |
| {-# LANGUAGE ScopedTypeVariables #-} | |
| {-# LANGUAGE PartialTypeSignatures #-} | |
| module Main where |
| # Generated by stackage2nix 0.7.0 from "./stack.yaml" | |
| { _nixpkgs ? import <nixpkgs> {} }: | |
| let | |
| stackageOverlay = builtins.fetchGit { | |
| url = "https://github.com/typeable/nixpkgs-stackage.git"; | |
| rev = "0852a4b5097c576a4d42a6cd1fdb9e1746a85e3e"; | |
| }; | |
| nixpkgs = import <nixpkgs> { | |
| overlays = [ (import stackageOverlay) ]; |
| Dec 29 18:12:07 localhost systemd[1]: Starting Fetch host keys and authorized_keys for root user... | |
| Dec 29 18:12:07 localhost fetch-ssh-keys-start[891]: obtaining SSH key... | |
| Dec 29 18:12:07 localhost fetch-ssh-keys-start[891]: --2017-12-29 18:12:07-- http://metadata.google.internal/0.1/meta-data/authorized-keys | |
| Dec 29 18:12:07 localhost fetch-ssh-keys-start[891]: Resolving metadata.google.internal (metadata.google.internal)... 169.254.169.254 | |
| Dec 29 18:12:07 localhost fetch-ssh-keys-start[891]: Connecting to metadata.google.internal (metadata.google.internal)|169.254.169.254|:80... connected. | |
| Dec 29 18:12:07 localhost fetch-ssh-keys-start[891]: HTTP request sent, awaiting response... 200 OK | |
| Dec 29 18:12:07 localhost fetch-ssh-keys-start[891]: Length: 113 [application/text] | |
| Dec 29 18:12:07 localhost fetch-ssh-keys-start[891]: Saving to: ‘/run/tmp.OQwfTw2zGL’ | |
| Dec 29 18:12:07 localhost fetch-ssh-keys-start[891]: 0K 100% 53.0M=0s | |
| Dec 29 18:12:07 localhos |
| ==================== FloatOut stats: ==================== | |
| 2017-10-14 20:45:26.943053 UTC | |
| 4 Lets floated to top level; 0 Lets floated elsewhere; from 68 Lambda groups | |
| ==================== FloatOut stats: ==================== | |
| 2017-10-14 20:45:27.479678 UTC |
| {-# LANGUAGE BangPatterns #-} | |
| {-# LANGUAGE ExistentialQuantification #-} | |
| {-# LANGUAGE FlexibleContexts #-} | |
| {-# LANGUAGE ForeignFunctionInterface #-} | |
| {-# LANGUAGE MagicHash #-} | |
| {-# LANGUAGE TypeFamilies #-} | |
| module Main (main) where | |
| import Foreign | |
| import Foreign.C.Types |
| test tests::xor_black_box ... bench: 69 ns/iter (+/- 1) | |
| test tests::xor_closure_a ... bench: 70 ns/iter (+/- 1) | |
| test tests::xor_closure_b ... bench: 921 ns/iter (+/- 5) | |
| test tests::xor_pointer_a ... bench: 60 ns/iter (+/- 1) | |
| test tests::xor_pointer_b ... bench: 0 ns/iter (+/- 0) |
| scala> var c = 0 | |
| c: Int = 0 | |
| scala> inc(c) | |
| scala> c | |
| res1: Int = 1 |
| // JsValue remembers Adapter | |
| trait JsValue { | |
| type A | |
| } | |
| object JsValue { | |
| type Aux[A0] = JsValue { type A = A0} | |
| } | |
| // Adapter works with JsValue of type T | |
| class Adapter[T] { self => |
I hereby claim:
To claim this, I am signing this object:
| Функциональные программы с производительностью императивных. | |
| Функциональный подход уже достаточно давно является трендом в современном программировании. | |
| С его помощью можно создавать абстракции, с помощью которых можно легко рассуждать о программе. | |
| Функциональные абстракции легко компоновать и в последствии переиспользовать. | |
| И это настольно легко делать, что в итоге мы создаём всё новые и новые абстракции на основе уже имеющихся, особо не задумываясь о том, как программа будет работать в рантайме. | |
| Но на практике любая абстракция, в том числе и функциональная, создаёт значительный оверхед во время выполнения. | |
| В этом докладе, на примере языка Scala, мы поговорим о том, какие же подводные камни возникают при написании функционального кода, и что можно сделать, чтобы в итоге получить эффективную программу. | |
| В качествe примера, рассмотрим Scalan, фреймворк для создания производительных DSL. И выясним, какие же проблемы получается решать на практике. |