Skip to content

Instantly share code, notes, and snippets.

@dduan
dduan / nativeRemoveAllPerformance.swift
Last active December 14, 2015 07:34
A simple program to benchmark performance of removeAll() method for Set
import Foundation
var before = NSDate()
var after = NSDate()
var duration: NSTimeInterval = 0
var a = Set(Array(1..<9999).sort {_, _ in arc4random() % 2 == 0})
(1...10000).forEach { _ in
var b = a
before = NSDate()
@dduan
dduan / experimental-slice.swift
Last active February 21, 2016 00:00
An rudimentary experiment on Swift slice syntax.
// Experimental:
// '%' replaces the more ideal '$'
// where a open ended range is in the design, `nil` is used its place
// force casting between Index.Distance and 'Int'
// only on CollectionType, but a version for string is not hard to do
public struct Offset { let value: Int }
prefix operator %+ {}
prefix operator %- {}
@dduan
dduan / d-slicing-syntax.swift
Last active February 28, 2016 04:13
D-like slicing syntax tailored for Swift.
// this is almost good, if only Swift allows specifying precedence for pre/postfix operators.
struct Dollar {}
let $ = Dollar()
struct BInt: IntegerLiteralConvertible {
let bool: Bool
let int: UInt
func relativeTo(total: Int) -> Int {
return bool ? total - Int(int) : Int(int)
}
@dduan
dduan / radar.sh
Created March 23, 2016 07:42
A command to find radars referenced in Swift's code base that aren't public.
# run this in the swift source code folder to get a list of radars
for i in $(grep -hor -E 'rdar://problem/[0-9]+' stdlib lib | sed 's/rdar:\/\/problem\///'); do if [[ ! -z $(curl -s "http://www.openradar.me/$i" | grep 'Tell us more!') ]]; then echo rdar://problem/$i; fi; done
func f<T, U>(x: T.Type, _ y: U) -> Bool {
return y is T
}
func g<T, U>(x: T, _ y: U) -> Bool {
return y is T
}
protocol P {}
class B: P {}
@dduan
dduan / DefaultDictionary.swift
Last active May 16, 2016 22:06
A handy Swift dictionary that returns a specified default value for non-existing keys.
public struct DefaultDictionary<Key : Hashable, Value>: CollectionType {
private var _storage: [Key: Value]
private var _defaultValue: () -> Value
public typealias Element = (Key, Value)
public typealias Index = DictionaryIndex<Key, Value>
public var startIndex: Index {
return _storage.startIndex
@dduan
dduan / simple-made-easy.sh
Last active March 22, 2018 19:19
Downloading "Simple Made Easy" slides.
#!/bin/sh
mkdir simple-made-easy
cd simple-made-easy
for i in `seq 1 39`
do
wget "https://res.infoq.com/presentations/Simple-Made-Easy/en/slides/sl$i.jpg"
done
for i in `seq 1 9`
do mv sl$i.jpg sl0$i.jpg
done
@dduan
dduan / blah.py
Last active January 14, 2017 01:02
A script that generate staged file change summaries to be used as temporary commit messages.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''Print cached git diff stats in less than 50 characters.
This script takes output from `git diff --cached --stat` and generates a single
line summary with less than 50 characters. This output may be used as a
(hopefully) temporary commit message like so
git commit -m "`blah.py`"
@dduan
dduan / not-compiling-swift2.swift
Created June 23, 2016 18:15
Will this compile?
protocol X {
var value: Int { get }
init(value: Int)
}
func foo<T, U: X>(a: T) -> U {
return U(value: a.value)
}
@dduan
dduan / OneArray.swift
Created August 12, 2016 20:19
An array that's never empty.
enum OneArray<T> {
case one(T)
case many([T])
// Want empty value? Fuck you.
init?<S: Sequence where S.Iterator.Element == T>(_ s: S) {
switch s.underestimatedCount {
case 0:
return nil
case 1: