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. И выясним, какие же проблемы получается решать на практике. |