Skip to content

Instantly share code, notes, and snippets.

View JeffBezanson's full-sized avatar

Jeff Bezanson JeffBezanson

View GitHub Profile
function factor{T<:Integer}(n::T)
0 < n || error("number to be factored must be positive")
h = Dict{T,Int}()
n == 1 && return h
local s::T, p::T
s = isqrt(n)
p = 2
while p <= s
if n % p == 0
while n % p == 0
@JeffBezanson
JeffBezanson / gist:ea224aa45e2242ca3ee9
Last active August 29, 2015 14:14
simple Dict benchmarks
function stress1(keys::Array{Int,1})
x = Dict{Int,Float64}()
for i in keys
x[i] = 0.0
end
return x
end
function stress_strings(n::Int)
d = Dict{String,Int}()
function rd(f)
nr = countlines(f)::Int
fh = open(f)
nc = length(split(readline(fh),','))
seekstart(fh)
d = Array(Float64, nr, nc)
temp = [0.0]
for i = 1:nr
l = readline(fh)::ASCIIString
idx = 1
@JeffBezanson
JeffBezanson / inlining.md
Last active January 14, 2016 22:03
how to invoke julia inlining passes

Here is a description and demo of the relevant functions.

StaticVarInfo is the state object used to track local variable and other context information during inference and other passes.

inlining_pass

Runs inlining in-place on an expression.

Arguments:

Faster version:
julia> code_llvm(STDOUT, Base._unsafe_getindex, Tuple{typeof(Base.linearindexing(a)), typeof(a), typeof(r), typeof(1)}, false, true)
; ModuleID = '_unsafe_getindex'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"
%jl_value_t = type { %jl_value_t* }
%OneTo = type { i64 }

An array is a structure mapping indices to data values, where the indices have a particular structure.

An array can be thought of as a pair of an index set and a data set.

Two arrays are equal if they map the same indices to the same values.

The data

An array is iterable, and when iterated generates exactly the values of

import Base: endof, sizeof, pointer, next
using Base: UTF_ERR_INVALID_INDEX, is_valid_continuation, utf8_trailing, utf8_offset
type Str <: AbstractString
len::Int
function Str(p::Union{Ptr{Int8},Ptr{UInt8}}, n::Integer)
s = ccall(:jl_gc_allocobj, Any, (Csize_t,), n+sizeof(Int))
ps = pointer_from_objref(s)
unsafe_store!(convert(Ptr{Ptr{Void}}, ps), pointer_from_objref(Str), 0)
unsafe_store!(convert(Ptr{Int}, ps), n)
INFO: Installing Example v0.4.0
INFO: Package database updated
INFO: METADATA is out-of-date — you may not have the latest version of Example
INFO: Use `Pkg.update()` to get the latest versions of your packages
INFO: Initializing package repository /tmp/o8xgwvMS/v0.6
INFO: Cloning METADATA from https://github.com/JuliaLang/METADATA.jl
INFO: No packages to install, update or remove
INFO: Cloning cache of Example from https://github.com/JuliaLang/Example.jl.git
INFO: Installing Example v0.4.1
INFO: Package database updated
travis_fold:start:worker_info
Worker information
hostname: wjb-1.macstadium-us-se-1.travisci.net:fbee6be9-3545-4d4b-98ad-d0fb4f031325
version: v2.6.2 https://github.com/travis-ci/worker/tree/fdccca4efd347ebc889baae641ccbf55bb871d19
instance: a349cd59-a02e-46c9-8c28-ece0f707dfc7:travis-ci-osx10.11-xcode8-1479248015
startup: 1m54.291250744s
travis_fold:end:worker_info
travis_fold:start:system_info
Build system information
immutable Myo{C}
c::C
function (::Type{Myo{C}}){C}(c)
if 2 == 2 # expansion of @assert 2==2
nothing
else
throw(Base.AssertionError("2 == 2"))
end
return new{C}(c)
end