diff --git a/NEWS.md b/NEWS.md
index ade5947627d89..ef02a08200dfb 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -175,6 +175,8 @@ Deprecated or removed
   * The forms of `read`, `readstring`, and `eachline` that accepted both a `Cmd` object and an
     input stream are deprecated. Use e.g. `read(pipeline(stdin, cmd))` instead ([#22762]).
 
+  * The unexported type `AbstractIOBuffer` has been renamed to `GenericIOBuffer` ([#17360] [#22796]).
+
 
 Julia v0.6.0 Release Notes
 ==========================
diff --git a/base/deprecated.jl b/base/deprecated.jl
index 4c9a438dce919..c42d669a8fcde 100644
--- a/base/deprecated.jl
+++ b/base/deprecated.jl
@@ -1587,6 +1587,8 @@ end
 @deprecate readstring(cmd::AbstractCmd, stdin::Redirectable) readstring(pipeline(stdin, cmd))
 @deprecate eachline(cmd::AbstractCmd, stdin; chomp::Bool=true) eachline(pipeline(stdin, cmd), chomp=chomp)
 
+@deprecate_binding AbstractIOBuffer GenericIOBuffer false
+
 # END 0.7 deprecations
 
 # BEGIN 1.0 deprecations
diff --git a/base/iobuffer.jl b/base/iobuffer.jl
index 854e39cbc4f17..23b1de0281fb6 100644
--- a/base/iobuffer.jl
+++ b/base/iobuffer.jl
@@ -3,7 +3,7 @@
 ## work with AbstractVector{UInt8} via I/O primitives ##
 
 # Stateful string
-mutable struct AbstractIOBuffer{T<:AbstractVector{UInt8}} <: IO
+mutable struct GenericIOBuffer{T<:AbstractVector{UInt8}} <: IO
     data::T # T should support: getindex, setindex!, length, copy!, and resize!
     readable::Bool
     writable::Bool
@@ -14,16 +14,16 @@ mutable struct AbstractIOBuffer{T<:AbstractVector{UInt8}} <: IO
     ptr::Int # read (and maybe write) pointer
     mark::Int # reset mark location for ptr (or <0 for no mark)
 
-    function AbstractIOBuffer{T}(data::T, readable::Bool, writable::Bool, seekable::Bool, append::Bool,
+    function GenericIOBuffer{T}(data::T, readable::Bool, writable::Bool, seekable::Bool, append::Bool,
                                  maxsize::Int) where T<:AbstractVector{UInt8}
         new(data,readable,writable,seekable,append,length(data),maxsize,1,-1)
     end
 end
-const IOBuffer = AbstractIOBuffer{Vector{UInt8}}
+const IOBuffer = GenericIOBuffer{Vector{UInt8}}
 
-function AbstractIOBuffer(data::T, readable::Bool, writable::Bool, seekable::Bool, append::Bool,
+function GenericIOBuffer(data::T, readable::Bool, writable::Bool, seekable::Bool, append::Bool,
                           maxsize::Int) where T<:AbstractVector{UInt8}
-    AbstractIOBuffer{T}(data, readable, writable, seekable, append, maxsize)
+    GenericIOBuffer{T}(data, readable, writable, seekable, append, maxsize)
 end
 
 # allocate Vector{UInt8}s for IOBuffer storage that can efficiently become Strings
@@ -40,7 +40,7 @@ from or written to respectively. By default the buffer is readable but not writa
 last argument optionally specifies a size beyond which the buffer may not be grown.
 """
 IOBuffer(data::AbstractVector{UInt8}, readable::Bool=true, writable::Bool=false, maxsize::Int=typemax(Int)) =
-    AbstractIOBuffer(data, readable, writable, true, false, maxsize)
+    GenericIOBuffer(data, readable, writable, true, false, maxsize)
 function IOBuffer(readable::Bool, writable::Bool)
     b = IOBuffer(StringVector(32), readable, writable)
     b.data[:] = 0
@@ -74,10 +74,10 @@ If `data` is given, creates a `PipeBuffer` to operate on a data vector,
 optionally specifying a size beyond which the underlying `Array` may not be grown.
 """
 PipeBuffer(data::Vector{UInt8}=UInt8[], maxsize::Int=typemax(Int)) =
-    AbstractIOBuffer(data,true,true,false,true,maxsize)
+    GenericIOBuffer(data,true,true,false,true,maxsize)
 PipeBuffer(maxsize::Int) = (x = PipeBuffer(StringVector(maxsize),maxsize); x.size=0; x)
 
-function copy(b::AbstractIOBuffer)
+function copy(b::GenericIOBuffer)
     ret = typeof(b)(b.writable ? copy(b.data) : b.data,
                     b.readable, b.writable, b.seekable, b.append, b.maxsize)
     ret.size = b.size
@@ -85,7 +85,7 @@ function copy(b::AbstractIOBuffer)
     return ret
 end
 
-show(io::IO, b::AbstractIOBuffer) = print(io, "IOBuffer(data=UInt8[...], ",
+show(io::IO, b::GenericIOBuffer) = print(io, "IOBuffer(data=UInt8[...], ",
                                       "readable=", b.readable, ", ",
                                       "writable=", b.writable, ", ",
                                       "seekable=", b.seekable, ", ",
@@ -95,7 +95,7 @@ show(io::IO, b::AbstractIOBuffer) = print(io, "IOBuffer(data=UInt8[...], ",
                                       "ptr=",      b.ptr, ", ",
                                       "mark=",     b.mark, ")")
 
-function unsafe_read(from::AbstractIOBuffer, p::Ptr{UInt8}, nb::UInt)
+function unsafe_read(from::GenericIOBuffer, p::Ptr{UInt8}, nb::UInt)
     from.readable || throw(ArgumentError("read failed, IOBuffer is not readable"))
     avail = nb_available(from)
     adv = min(avail, nb)
@@ -107,7 +107,7 @@ function unsafe_read(from::AbstractIOBuffer, p::Ptr{UInt8}, nb::UInt)
     nothing
 end
 
-function read_sub(from::AbstractIOBuffer, a::AbstractArray{T}, offs, nel) where T
+function read_sub(from::GenericIOBuffer, a::AbstractArray{T}, offs, nel) where T
     from.readable || throw(ArgumentError("read failed, IOBuffer is not readable"))
     if offs+nel-1 > length(a) || offs < 1 || nel < 0
         throw(BoundsError())
@@ -123,7 +123,7 @@ function read_sub(from::AbstractIOBuffer, a::AbstractArray{T}, offs, nel) where
     return a
 end
 
-@inline function read(from::AbstractIOBuffer, ::Type{UInt8})
+@inline function read(from::GenericIOBuffer, ::Type{UInt8})
     from.readable || throw(ArgumentError("read failed, IOBuffer is not readable"))
     ptr = from.ptr
     size = from.size
@@ -135,7 +135,7 @@ end
     return byte
 end
 
-function peek(from::AbstractIOBuffer)
+function peek(from::GenericIOBuffer)
     from.readable || throw(ArgumentError("read failed, IOBuffer is not readable"))
     if from.ptr > from.size
         throw(EOFError())
@@ -143,43 +143,43 @@ function peek(from::AbstractIOBuffer)
     return from.data[from.ptr]
 end
 
-read(from::AbstractIOBuffer, ::Type{Ptr{T}}) where {T} = convert(Ptr{T}, read(from, UInt))
+read(from::GenericIOBuffer, ::Type{Ptr{T}}) where {T} = convert(Ptr{T}, read(from, UInt))
 
-isreadable(io::AbstractIOBuffer) = io.readable
-iswritable(io::AbstractIOBuffer) = io.writable
+isreadable(io::GenericIOBuffer) = io.readable
+iswritable(io::GenericIOBuffer) = io.writable
 
-# TODO: AbstractIOBuffer is not iterable, so doesn't really have a length.
+# TODO: GenericIOBuffer is not iterable, so doesn't really have a length.
 # This should maybe be sizeof() instead.
-#length(io::AbstractIOBuffer) = (io.seekable ? io.size : nb_available(io))
-nb_available(io::AbstractIOBuffer) = io.size - io.ptr + 1
-position(io::AbstractIOBuffer) = io.ptr-1
+#length(io::GenericIOBuffer) = (io.seekable ? io.size : nb_available(io))
+nb_available(io::GenericIOBuffer) = io.size - io.ptr + 1
+position(io::GenericIOBuffer) = io.ptr-1
 
-function skip(io::AbstractIOBuffer, n::Integer)
+function skip(io::GenericIOBuffer, n::Integer)
     seekto = io.ptr + n
     n < 0 && return seek(io, seekto-1) # Does error checking
     io.ptr = min(seekto, io.size+1)
     return io
 end
 
-function seek(io::AbstractIOBuffer, n::Integer)
+function seek(io::GenericIOBuffer, n::Integer)
     if !io.seekable
         ismarked(io) || throw(ArgumentError("seek failed, IOBuffer is not seekable and is not marked"))
         n == io.mark || throw(ArgumentError("seek failed, IOBuffer is not seekable and n != mark"))
     end
     # TODO: REPL.jl relies on the fact that this does not throw (by seeking past the beginning or end
-    #       of an AbstractIOBuffer), so that would need to be fixed in order to throw an error here
+    #       of an GenericIOBuffer), so that would need to be fixed in order to throw an error here
     #(n < 0 || n > io.size) && throw(ArgumentError("Attempted to seek outside IOBuffer boundaries."))
     #io.ptr = n+1
     io.ptr = max(min(n+1, io.size+1), 1)
     return io
 end
 
-function seekend(io::AbstractIOBuffer)
+function seekend(io::GenericIOBuffer)
     io.ptr = io.size+1
     return io
 end
 
-function truncate(io::AbstractIOBuffer, n::Integer)
+function truncate(io::GenericIOBuffer, n::Integer)
     io.writable || throw(ArgumentError("truncate failed, IOBuffer is not writeable"))
     io.seekable || throw(ArgumentError("truncate failed, IOBuffer is not seekable"))
     n < 0 && throw(ArgumentError("truncate failed, n bytes must be ≥ 0, got $n"))
@@ -194,7 +194,7 @@ function truncate(io::AbstractIOBuffer, n::Integer)
     return io
 end
 
-function compact(io::AbstractIOBuffer)
+function compact(io::GenericIOBuffer)
     io.writable || throw(ArgumentError("compact failed, IOBuffer is not writeable"))
     io.seekable && throw(ArgumentError("compact failed, IOBuffer is seekable"))
     local ptr::Int, bytes_to_move::Int
@@ -213,8 +213,8 @@ function compact(io::AbstractIOBuffer)
     return io
 end
 
-@inline ensureroom(io::AbstractIOBuffer, nshort::Int) = ensureroom(io, UInt(nshort))
-@inline function ensureroom(io::AbstractIOBuffer, nshort::UInt)
+@inline ensureroom(io::GenericIOBuffer, nshort::Int) = ensureroom(io, UInt(nshort))
+@inline function ensureroom(io::GenericIOBuffer, nshort::UInt)
     io.writable || throw(ArgumentError("ensureroom failed, IOBuffer is not writeable"))
     if !io.seekable
         nshort >= 0 || throw(ArgumentError("ensureroom failed, requested number of bytes must be ≥ 0, got $nshort"))
@@ -239,9 +239,9 @@ end
     return io
 end
 
-eof(io::AbstractIOBuffer) = (io.ptr-1 == io.size)
+eof(io::GenericIOBuffer) = (io.ptr-1 == io.size)
 
-@noinline function close(io::AbstractIOBuffer{T}) where T
+@noinline function close(io::GenericIOBuffer{T}) where T
     io.readable = false
     io.writable = false
     io.seekable = false
@@ -255,9 +255,9 @@ eof(io::AbstractIOBuffer) = (io.ptr-1 == io.size)
     nothing
 end
 
-isopen(io::AbstractIOBuffer) = io.readable || io.writable || io.seekable || nb_available(io) > 0
+isopen(io::GenericIOBuffer) = io.readable || io.writable || io.seekable || nb_available(io) > 0
 
-function String(io::AbstractIOBuffer)
+function String(io::GenericIOBuffer)
     io.readable || throw(ArgumentError("IOBuffer is not readable"))
     io.seekable || throw(ArgumentError("IOBuffer is not seekable"))
     return unsafe_string(pointer(io.data), io.size)
@@ -269,7 +269,7 @@ end
 Obtain the contents of an `IOBuffer` as an array, without copying. Afterwards, the
 `IOBuffer` is reset to its initial state.
 """
-function take!(io::AbstractIOBuffer)
+function take!(io::GenericIOBuffer)
     ismarked(io) && unmark(io)
     if io.seekable
         nbytes = io.size
@@ -307,7 +307,7 @@ function take!(io::IOBuffer)
     return data
 end
 
-function write(to::AbstractIOBuffer, from::AbstractIOBuffer)
+function write(to::GenericIOBuffer, from::GenericIOBuffer)
     if to === from
         from.ptr = from.size + 1
         return 0
@@ -317,7 +317,7 @@ function write(to::AbstractIOBuffer, from::AbstractIOBuffer)
     return written
 end
 
-function unsafe_write(to::AbstractIOBuffer, p::Ptr{UInt8}, nb::UInt)
+function unsafe_write(to::GenericIOBuffer, p::Ptr{UInt8}, nb::UInt)
     ensureroom(to, nb)
     ptr = (to.append ? to.size+1 : to.ptr)
     written = Int(min(nb, length(to.data) - ptr + 1))
@@ -336,14 +336,14 @@ function unsafe_write(to::AbstractIOBuffer, p::Ptr{UInt8}, nb::UInt)
     return written
 end
 
-function write_sub(to::AbstractIOBuffer, a::AbstractArray{UInt8}, offs, nel)
+function write_sub(to::GenericIOBuffer, a::AbstractArray{UInt8}, offs, nel)
     if offs+nel-1 > length(a) || offs < 1 || nel < 0
         throw(BoundsError())
     end
     unsafe_write(to, pointer(a, offs), UInt(nel))
 end
 
-@inline function write(to::AbstractIOBuffer, a::UInt8)
+@inline function write(to::GenericIOBuffer, a::UInt8)
     ensureroom(to, UInt(1))
     ptr = (to.append ? to.size+1 : to.ptr)
     if ptr > to.maxsize
@@ -358,8 +358,8 @@ end
     return sizeof(UInt8)
 end
 
-readbytes!(io::AbstractIOBuffer, b::Array{UInt8}, nb=length(b)) = readbytes!(io, b, Int(nb))
-function readbytes!(io::AbstractIOBuffer, b::Array{UInt8}, nb::Int)
+readbytes!(io::GenericIOBuffer, b::Array{UInt8}, nb=length(b)) = readbytes!(io, b, Int(nb))
+function readbytes!(io::GenericIOBuffer, b::Array{UInt8}, nb::Int)
     nr = min(nb, nb_available(io))
     if length(b) < nr
         resize!(b, nr)
@@ -367,9 +367,9 @@ function readbytes!(io::AbstractIOBuffer, b::Array{UInt8}, nb::Int)
     read_sub(io, b, 1, nr)
     return nr
 end
-read(io::AbstractIOBuffer) = read!(io,StringVector(nb_available(io)))
-readavailable(io::AbstractIOBuffer) = read(io)
-read(io::AbstractIOBuffer, nb::Integer) = read!(io,StringVector(min(nb, nb_available(io))))
+read(io::GenericIOBuffer) = read!(io,StringVector(nb_available(io)))
+readavailable(io::GenericIOBuffer) = read(io)
+read(io::GenericIOBuffer, nb::Integer) = read!(io,StringVector(min(nb, nb_available(io))))
 
 function search(buf::IOBuffer, delim::UInt8)
     p = pointer(buf.data, buf.ptr)
@@ -378,7 +378,7 @@ function search(buf::IOBuffer, delim::UInt8)
     return nb
 end
 
-function search(buf::AbstractIOBuffer, delim::UInt8)
+function search(buf::GenericIOBuffer, delim::UInt8)
     data = buf.data
     for i = buf.ptr : buf.size
         @inbounds b = data[i]
@@ -389,7 +389,7 @@ function search(buf::AbstractIOBuffer, delim::UInt8)
     return 0
 end
 
-function readuntil(io::AbstractIOBuffer, delim::UInt8)
+function readuntil(io::GenericIOBuffer, delim::UInt8)
     lb = 70
     A = StringVector(lb)
     n = 0
diff --git a/base/precompile.jl b/base/precompile.jl
index dc456608c4255..338baddbe63f5 100644
--- a/base/precompile.jl
+++ b/base/precompile.jl
@@ -21,12 +21,12 @@ precompile(Tuple{typeof(Core.Inference.isbits), Base.Distributed.DefaultClusterM
 precompile(Tuple{typeof(Base.Distributed.init_worker), String, Base.Distributed.DefaultClusterManager})
 precompile(Tuple{typeof(Base.finalizer), Base.TCPServer, typeof(Base.uvfinalize)})
 precompile(Tuple{Type{Base.TCPServer}, Ptr{Void}, Int64})
-precompile(Tuple{typeof(Base.show), Base.IOContext{Base.AbstractIOBuffer{Array{UInt8, 1}}}, Int32})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Libc.RawFD})
+precompile(Tuple{typeof(Base.show), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, Int32})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Libc.RawFD})
 precompile(Tuple{typeof(Base.uv_status_string), Base.TCPServer})
 precompile(Tuple{typeof(Base._fd), Base.TCPServer})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Type{Base.TCPServer}, String, Base.Libc.RawFD, String, String, String})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.TCPServer})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Type{Base.TCPServer}, String, Base.Libc.RawFD, String, String, String})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.TCPServer})
 precompile(Tuple{typeof(Base.isopen), Base.TCPServer})
 precompile(Tuple{typeof(Base.check_open), Base.TCPServer})
 precompile(Tuple{typeof(Base.unpreserve_handle), Base.TCPServer})
@@ -111,7 +111,7 @@ precompile(Tuple{typeof(Core.Inference.isbits), Tuple{Base.DevNullStream, Bool}}
 precompile(Tuple{Type{Ref{Base.Cstring}}, Array{String, 1}})
 precompile(Tuple{typeof(Core.Inference.eltype), Type{Array{String, 1}}})
 precompile(Tuple{typeof(Base.string), Void, String, DataType})
-precompile(Tuple{typeof(Base.print), Base.IOContext{Base.AbstractIOBuffer{Array{UInt8, 1}}}, String, Char})
+precompile(Tuple{typeof(Base.print), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, String, Char})
 precompile(Tuple{typeof(Base.throw_boundserror), Base.UnitRange{Int64}, Tuple{Base.UnitRange{Int64}}})
 precompile(Tuple{typeof(Core.Inference.convert), Type{DataType}, Type{Bool}})
 precompile(Tuple{typeof(Core.Inference.convert), Type{DataType}, Type{Base.OneTo{Int64}}})
@@ -185,8 +185,8 @@ precompile(Tuple{typeof(Base.banner), Base.Terminals.TTYTerminal})
 precompile(Tuple{typeof(Core.Inference.isbits), Base.Dict{Any, Any}})
 precompile(Tuple{typeof(Base.answer_color)})
 precompile(Tuple{typeof(Base.input_color)})
-precompile(Tuple{typeof(Base.show_circular), Base.IOContext{Base.AbstractIOBuffer{Array{UInt8, 1}}}, Tuple{}})
-precompile(Tuple{typeof(Base.show_delim_array), Base.IOContext{Base.AbstractIOBuffer{Array{UInt8, 1}}}, Tuple{}, Char, Char, Char, Bool, Int64, Int64})
+precompile(Tuple{typeof(Base.show_circular), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, Tuple{}})
+precompile(Tuple{typeof(Base.show_delim_array), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, Tuple{}, Char, Char, Char, Bool, Int64, Int64})
 precompile(Tuple{typeof(Base.throw_boundserror), Array{Base.StackTraces.StackFrame, 1}, Tuple{Base.UnitRange{Int64}}})
 precompile(Tuple{typeof(Base.splice!), Array{Base.StackTraces.StackFrame, 1}, Base.UnitRange{Int64}, Array{Any, 1}})
 precompile(Tuple{typeof(Base.REPL.ip_matches_func), Ptr{Void}, Symbol})
@@ -229,7 +229,7 @@ precompile(Tuple{typeof(Core.Inference.done), Tuple{Void}, Int64})
 precompile(Tuple{typeof(Core.Inference.next), Core.Inference.Generator{Tuple{Void}, Type{Core.Inference.Const}}, Int64})
 precompile(Tuple{typeof(Core.Inference.next), Tuple{Void}, Int64})
 precompile(Tuple{typeof(Core.Inference.getindex), Tuple{Void}, Int64})
-precompile(Tuple{typeof(Base.join), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{String, 1}, Char})
+precompile(Tuple{typeof(Base.join), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{String, 1}, Char})
 precompile(Tuple{Type{Core.Inference.Generator{I, F} where F where I}, Type{Core.Inference.Const}, Tuple{String, typeof(Base.info)}})
 precompile(Tuple{Type{Core.Inference.Generator{Tuple{String, typeof(Base.info)}, Type{Core.Inference.Const}}}, Type{Core.Inference.Const}, Tuple{String, typeof(Base.info)}})
 precompile(Tuple{typeof(Core.Inference.convert), Type{Tuple{String, typeof(Base.info)}}, Tuple{String, typeof(Base.info)}})
@@ -252,7 +252,7 @@ precompile(Tuple{typeof(Core.Inference.start), Tuple{String, Int64}})
 precompile(Tuple{typeof(Core.Inference.start), Tuple{typeof(Base.info), Int64}})
 precompile(Tuple{typeof(Core.Inference.indexed_next), Tuple{typeof(Base.info), Int64}, Int64, Int64})
 precompile(Tuple{typeof(Core.Inference.getindex), Tuple{typeof(Base.info), Int64}, Int64})
-precompile(Tuple{typeof(Base.print), Base.IOContext{Base.AbstractIOBuffer{Array{UInt8, 1}}}, Base.SubString{String}, Char})
+precompile(Tuple{typeof(Base.print), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, Base.SubString{String}, Char})
 precompile(Tuple{typeof(Base.sizehint!), Base.Dict{Any, Any}, Int64})
 precompile(Tuple{typeof(Base.LineEdit.getEntry), Base.Dict{Char, Any}, Char})
 precompile(Tuple{typeof(Base.LineEdit.getEntry), Base.Dict{Char, Any}, String})
@@ -270,15 +270,15 @@ precompile(Tuple{typeof(Base.setindex!), Array{Base.LineEdit.TextInterface, 1},
 precompile(Tuple{typeof(Base.setindex!), Array{Base.LineEdit.TextInterface, 1}, Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}, Int64})
 precompile(Tuple{typeof(Base.setindex!), Array{Base.LineEdit.TextInterface, 1}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}, Int64})
 precompile(Tuple{typeof(Base.copy!), Array{Base.LineEdit.TextInterface, 1}, Tuple{Base.LineEdit.Prompt, Base.LineEdit.Prompt, Base.LineEdit.Prompt, Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, String, Int64, String, Bool})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, Int64, String, Bool})
 precompile(Tuple{typeof(Base.uv_status_string), Base.UDPSocket})
 precompile(Tuple{typeof(Base.Terminals.cmove_up), Base.Terminals.TerminalBuffer, Int64})
 precompile(Tuple{typeof(Base.Terminals.cmove_down), Base.Terminals.TerminalBuffer, Int64})
-precompile(Tuple{typeof(Base.readuntil), Base.AbstractIOBuffer{Array{UInt8, 1}}, UInt8})
+precompile(Tuple{typeof(Base.readuntil), Base.GenericIOBuffer{Array{UInt8, 1}}, UInt8})
 precompile(Tuple{typeof(Base.Terminals.cmove_right), Base.Terminals.TerminalBuffer, Int64})
 precompile(Tuple{typeof(Base.LineEdit._clear_input_area), Base.Terminals.TerminalBuffer, Base.LineEdit.InputAreaState})
-precompile(Tuple{typeof(Base.seek), Base.AbstractIOBuffer{Array{UInt8, 1}}, Int64})
-precompile(Tuple{getfield(Base, Symbol("#kw##readline")), Array{Any, 1}, typeof(Base.readline), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.seek), Base.GenericIOBuffer{Array{UInt8, 1}}, Int64})
+precompile(Tuple{getfield(Base, Symbol("#kw##readline")), Array{Any, 1}, typeof(Base.readline), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.endswith), String, String})
 precompile(Tuple{getfield(Base, Symbol("#kw##readline")), Array{Any, 1}, typeof(Base.readline), Base.Terminals.TerminalBuffer})
 precompile(Tuple{typeof(Base.LineEdit.write_prompt), Base.Terminals.TerminalBuffer, Base.LineEdit.Prompt})
@@ -314,8 +314,8 @@ precompile(Tuple{typeof(Base.Distributed.check_master_connect)})
 precompile(Tuple{typeof(Base.load_machine_file), String})
 precompile(Tuple{typeof(Base.load_juliarc)})
 precompile(Tuple{typeof(Base.shift!), Array{String, 1}})
-precompile(Tuple{typeof(Base.print), Base.IOContext{Base.AbstractIOBuffer{Array{UInt8, 1}}}, String, String, Char})
-precompile(Tuple{typeof(Base.read), Base.AbstractIOBuffer{Array{UInt8, 1}}, Type{Char}})
+precompile(Tuple{typeof(Base.print), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, String, String, Char})
+precompile(Tuple{typeof(Base.read), Base.GenericIOBuffer{Array{UInt8, 1}}, Type{Char}})
 precompile(Tuple{typeof(Base.write), Base.Terminals.TerminalBuffer, Array{UInt8, 1}})
 precompile(Tuple{typeof(Base.LineEdit.keymap), Array{Base.Dict{Any, Any}, 1}})
 precompile(Tuple{typeof(Base.LineEdit.add_specialisations), Base.Dict{Char, Any}, Base.Dict{Char, Any}, Int64})
@@ -363,8 +363,8 @@ precompile(Tuple{typeof(Base.test_success), Base.Process})
 precompile(Tuple{typeof(Base._mapreduce), typeof(Base.success), typeof(Base.:(&)), Base.IndexLinear, Array{Base.Process, 1}})
 precompile(Tuple{typeof(Core.Inference.isbits), Tuple{String, String, String}})
 precompile(Tuple{getfield(Base, Symbol("#kw##shell_escape")), Array{Any, 1}, typeof(Base.shell_escape), Base.Cmd})
-precompile(Tuple{typeof(Base.show), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Cmd})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Cmd})
+precompile(Tuple{typeof(Base.show), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Cmd})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Cmd})
 precompile(Tuple{typeof(Core.Inference.isbits), Ptr{Void}})
 precompile(Tuple{typeof(Base.cconvert), Type{Ptr{Base.Cstring}}, Ptr{Void}})
 precompile(Tuple{typeof(Base.cconvert), Type{Ptr{Base.Cstring}}, Void})
@@ -395,7 +395,7 @@ precompile(Tuple{typeof(Base.Distributed.interrupt), Array{Int64, 1}})
 precompile(Tuple{typeof(Base.uvfinalize), Base.TTY})
 precompile(Tuple{typeof(Base.uv_status_string), Base.TTY})
 precompile(Tuple{typeof(Base._fd), Base.TTY})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.TTY})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.TTY})
 precompile(Tuple{typeof(Base.unpreserve_handle), Base.TTY})
 precompile(Tuple{typeof(Base.isopen), Base.TTY})
 precompile(Tuple{typeof(Base.stream_wait), Base.TTY, Base.Condition})
@@ -439,8 +439,8 @@ precompile(Tuple{typeof(Base.ht_keyindex2), Base.Dict{Any, Void}, String})
 precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Void}, Void, String, Int64})
 precompile(Tuple{typeof(Base.LineEdit.fixup_keymaps!), Base.Dict{Char, Any}, Int64, Char, Void})
 precompile(Tuple{typeof(Base.LineEdit.run_interface), Base.Terminals.TTYTerminal, Base.LineEdit.ModalInterface})
-precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.LineEdit.InputAreaState, Base.LineEdit.PromptState})
-precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.LineEdit.InputAreaState, Base.LineEdit.PrefixSearchState})
+precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.GenericIOBuffer{Array{UInt8, 1}}, Base.LineEdit.InputAreaState, Base.LineEdit.PromptState})
+precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.GenericIOBuffer{Array{UInt8, 1}}, Base.LineEdit.InputAreaState, Base.LineEdit.PrefixSearchState})
 precompile(Tuple{typeof(Base.write), Base.Terminals.TTYTerminal, Array{UInt8, 1}})
 precompile(Tuple{typeof(Base.LineEdit.init_state), Base.Terminals.TTYTerminal, Base.LineEdit.ModalInterface})
 precompile(Tuple{typeof(Base.LineEdit.prompt!), Base.Terminals.TTYTerminal, Base.LineEdit.ModalInterface, Base.LineEdit.MIState})
@@ -480,7 +480,7 @@ precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.Termin
 precompile(Tuple{typeof(Base.displaysize), Base.TTY})
 precompile(Tuple{typeof(Base.divrem), Int64, Int64})
 precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState})
-precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState, Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{Char, 1}, Base.Dict{Char, Any}})
+precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState, Base.GenericIOBuffer{Array{UInt8, 1}}, Array{Char, 1}, Base.Dict{Char, Any}})
 precompile(Tuple{typeof(Base.LineEdit.terminal), Base.LineEdit.PromptState})
 precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState, Base.Terminals.TTYTerminal, Array{Char, 1}, Base.Dict{Char, Any}})
 precompile(Tuple{typeof(Base.read), Base.Terminals.TTYTerminal, Type{Char}})
@@ -493,9 +493,9 @@ precompile(Tuple{typeof(Base.read), Base.TTY, Type{UInt8}})
 precompile(Tuple{typeof(Base.throw_boundserror), Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}})
 precompile(Tuple{typeof(Base.deleteat!), Array{UInt8, 1}, Base.UnitRange{Int64}})
 precompile(Tuple{typeof(Base.splice!), Array{UInt8, 1}, Base.UnitRange{Int64}, Array{UInt8, 1}})
-precompile(Tuple{typeof(Base.LineEdit.splice_buffer!), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.UnitRange{Int64}, String})
+precompile(Tuple{typeof(Base.LineEdit.splice_buffer!), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.UnitRange{Int64}, String})
 precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.LineEdit.PromptState})
-precompile(Tuple{typeof(Base.LineEdit.edit_insert), Base.AbstractIOBuffer{Array{UInt8, 1}}, String})
+precompile(Tuple{typeof(Base.LineEdit.edit_insert), Base.GenericIOBuffer{Array{UInt8, 1}}, String})
 precompile(Tuple{typeof(Base.LineEdit.edit_insert), Base.LineEdit.PromptState, String})
 precompile(Tuple{typeof(Base.Terminals.width), Base.Terminals.TTYTerminal})
 precompile(Tuple{Type{Base.Libc.TmStruct}, Float64})
@@ -605,12 +605,12 @@ precompile(Tuple{typeof(Base.unsafe_copy!), Array{Method, 1}, Int64, Array{Metho
 precompile(Tuple{typeof(Base.copy!), Array{Method, 1}, Int64, Array{Method, 1}, Int64, Int64})
 precompile(Tuple{typeof(Core.Inference.length), Tuple{Core.Inference.PartialTypeVar}})
 precompile(Tuple{typeof(Core.Inference.getindex), Tuple{Core.Inference.PartialTypeVar}, Int64})
-precompile(Tuple{typeof(Base.show_delim_array), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{Any, 1}, Char, Char, Char, Bool, Int64, Int64})
-precompile(Tuple{typeof(Base.join), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{Any, 1}, String, String})
-precompile(Tuple{typeof(Base.join), Base.AbstractIOBuffer{Array{UInt8, 1}}, Tuple{}, String, String})
-precompile(Tuple{typeof(Base.show_method_params), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{Any, 1}})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, String, Module})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, String, Symbol, String, Int32})
+precompile(Tuple{typeof(Base.show_delim_array), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{Any, 1}, Char, Char, Char, Bool, Int64, Int64})
+precompile(Tuple{typeof(Base.join), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{Any, 1}, String, String})
+precompile(Tuple{typeof(Base.join), Base.GenericIOBuffer{Array{UInt8, 1}}, Tuple{}, String, String})
+precompile(Tuple{typeof(Base.show_method_params), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{Any, 1}})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, Module})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, Symbol, String, Int32})
 precompile(Tuple{typeof(Base.reverseind), String, Int64})
 precompile(Tuple{typeof(Base.Pkg.Dir.path)})
 precompile(Tuple{typeof(Base.promote_type), Type{String}, Type{Union{}}})
@@ -643,7 +643,7 @@ precompile(Tuple{typeof(Base.to_tuple_type), Type{Tuple}})
 precompile(Tuple{typeof(Base.append!), Array{Any, 1}, Array{Any, 1}})
 precompile(Tuple{typeof(Core.Inference.isbits), Tuple{DataType, Bool}})
 precompile(Tuple{typeof(Base.is_default_method), Method})
-precompile(Tuple{getfield(Base, Symbol("#kw##show")), Array{Any, 1}, typeof(Base.show), Base.AbstractIOBuffer{Array{UInt8, 1}}, Method})
+precompile(Tuple{getfield(Base, Symbol("#kw##show")), Array{Any, 1}, typeof(Base.show), Base.GenericIOBuffer{Array{UInt8, 1}}, Method})
 precompile(Tuple{typeof(Base.sort!), Array{String, 1}})
 precompile(Tuple{typeof(Base.rehash!), Base.Dict{String, Void}, Int64})
 precompile(Tuple{typeof(Base.ht_keyindex2), Base.Dict{String, Void}, String})
@@ -660,7 +660,7 @@ precompile(Tuple{typeof(Base.REPLCompletions.complete_keyword), String})
 precompile(Tuple{typeof(Base.in), Char, Array{Any, 1}})
 precompile(Tuple{typeof(Base.string), Char, Char})
 precompile(Tuple{typeof(Base.unique), Array{String, 1}})
-precompile(Tuple{typeof(Base.REPL.beforecursor), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.REPL.beforecursor), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.REPLCompletions.completions), String, Int64})
 precompile(Tuple{typeof(Base.incomplete_tag), Symbol})
 precompile(Tuple{typeof(Base.rsearchindex), String, String, Int64})
@@ -685,24 +685,24 @@ precompile(Tuple{typeof(Base.Terminals.cmove_col), Base.Terminals.TTYTerminal, I
 precompile(Tuple{typeof(Base.Terminals.cmove_right), Base.Terminals.TTYTerminal, Int64})
 precompile(Tuple{typeof(Base.write), Base.TTY, Char})
 precompile(Tuple{typeof(Base.LineEdit.match_input), Base.LineEdit.KeyAlias, Base.LineEdit.MIState, Base.Terminals.TTYTerminal, Array{Char, 1}, Base.Dict{Char, Any}})
-precompile(Tuple{typeof(Base.peek), Base.AbstractIOBuffer{Array{UInt8, 1}}})
-precompile(Tuple{typeof(Base.LineEdit.char_move_left), Base.AbstractIOBuffer{Array{UInt8, 1}}})
-precompile(Tuple{typeof(Base.LineEdit.edit_backspace), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.peek), Base.GenericIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.char_move_left), Base.GenericIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.edit_backspace), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.LineEdit.edit_backspace), Base.LineEdit.PromptState})
 precompile(Tuple{typeof(Base.Terminals.beep), Base.Terminals.TTYTerminal})
-precompile(Tuple{typeof(Base.LineEdit.edit_move_down), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.edit_move_down), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Core.Inference.length), Tuple{Core.Inference.Const, Core.Inference.Const, Core.Inference.Const, DataType}})
 precompile(Tuple{typeof(Core.Inference.getindex), Tuple{Core.Inference.Const, Core.Inference.Const, Core.Inference.Const, DataType}, Int64})
 precompile(Tuple{typeof(Base.LineEdit.replace_line), Base.LineEdit.PrefixSearchState, String})
 precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.LineEdit.PrefixSearchState})
-precompile(Tuple{typeof(Base.copy), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.copy), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.REPL.history_move), Base.LineEdit.PrefixSearchState, Base.REPL.REPLHistoryProvider, Int64, Int64})
 precompile(Tuple{typeof(Base.LineEdit.edit_move_down), Base.LineEdit.MIState})
 precompile(Tuple{typeof(Base.LineEdit.enter_prefix_search), Base.LineEdit.MIState, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}, Bool})
 precompile(Tuple{typeof(Base.haskey), Base.Dict{Any, Any}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}})
 precompile(Tuple{typeof(Base.ht_keyindex), Base.Dict{Any, Any}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}})
 precompile(Tuple{typeof(Base.getindex), Base.Dict{Any, Any}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}})
-precompile(Tuple{typeof(Base.LineEdit.copybuf!), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.copybuf!), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.LineEdit.activate), Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}, Base.LineEdit.PrefixSearchState, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal})
 precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PrefixSearchState})
 precompile(Tuple{typeof(Base.LineEdit.history_next_prefix), Base.LineEdit.PrefixSearchState, Base.REPL.REPLHistoryProvider, String})
@@ -718,20 +718,20 @@ precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TTYTer
 precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PrefixSearchState})
 precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PrefixSearchState})
 precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PrefixSearchState})
-precompile(Tuple{typeof(Base.LineEdit.replace_line), Base.LineEdit.PrefixSearchState, Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.replace_line), Base.LineEdit.PrefixSearchState, Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.LineEdit.accept_result), Base.LineEdit.MIState, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}})
 precompile(Tuple{typeof(Core.Inference.length), Tuple{Core.Inference.Const, Core.Inference.Const, DataType}})
 precompile(Tuple{typeof(Core.Inference.getindex), Tuple{Core.Inference.Const, Core.Inference.Const, DataType}, Int64})
-precompile(Tuple{typeof(Base.LineEdit.replace_line), Base.LineEdit.PromptState, Base.AbstractIOBuffer{Array{UInt8, 1}}})
-precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState, Base.AbstractIOBuffer{Array{UInt8, 1}}})
-precompile(Tuple{typeof(Base.LineEdit.edit_move_left), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.replace_line), Base.LineEdit.PromptState, Base.GenericIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState, Base.GenericIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.edit_move_left), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.LineEdit.edit_move_left), Base.LineEdit.PromptState})
-precompile(Tuple{typeof(Base.LineEdit.edit_move_right), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.edit_move_right), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.LineEdit.edit_move_right), Base.LineEdit.PromptState})
 precompile(Tuple{typeof(Base.LineEdit.move_line_start), Base.LineEdit.MIState})
-precompile(Tuple{typeof(Base.LineEdit.move_line_end), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.move_line_end), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.LineEdit.move_line_end), Base.LineEdit.MIState})
-precompile(Tuple{typeof(Base.LineEdit.edit_move_up), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.edit_move_up), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.LineEdit.edit_move_up), Base.LineEdit.MIState})
 precompile(Tuple{typeof(Base.:(==)), Symbol, Base.LineEdit.Prompt})
 precompile(Tuple{typeof(Base.isempty), Base.LineEdit.PromptState})
@@ -747,7 +747,7 @@ precompile(Tuple{typeof(Base.Docs.docm), LineNumberNode, Module, Symbol})
 precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Base.Markdown.Config, Symbol, Int64})
 precompile(Tuple{Type{Base.Markdown.MD}})
 precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Base.Markdown.Config, Symbol})
-precompile(Tuple{typeof(Base.Markdown.skipblank), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.Markdown.skipblank), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.vcat), Array{Function, 1}, Array{Function, 1}})
 precompile(Tuple{typeof(Base.Docs.formatdoc), Base.Docs.DocStr})
 precompile(Tuple{typeof(Base.Docs.parsedoc), Base.Docs.DocStr})
@@ -851,7 +851,7 @@ precompile(Tuple{typeof(Base.endof), Tuple{Expr}})
 precompile(Tuple{typeof(Base.endof), Tuple{Symbol, Symbol, Symbol}})
 precompile(Tuple{typeof(Base.getindex), Tuple{Symbol, Symbol, Symbol}, Base.UnitRange{Int64}})
 precompile(Tuple{Type{Expr}, Symbol, Symbol, Symbol, Symbol, Symbol, Symbol})
-precompile(Tuple{typeof(Base.join), Base.AbstractIOBuffer{Array{UInt8, 1}}, Tuple{String, String}, Char})
+precompile(Tuple{typeof(Base.join), Base.GenericIOBuffer{Array{UInt8, 1}}, Tuple{String, String}, Char})
 precompile(Tuple{typeof(Base.dims2string), Tuple{Int64, Int64}})
 precompile(Tuple{typeof(Base.throw_setindex_mismatch), Base.UnitRange{Int64}, Tuple{Int64, Int64}})
 precompile(Tuple{typeof(Base.setindex_shape_check), Base.UnitRange{Int64}, Int64, Int64})
@@ -915,14 +915,14 @@ precompile(Tuple{getfield(Base.Docs, Symbol("#kw##printmatches")), Array{Any, 1}
 precompile(Tuple{typeof(Base.Docs.printmatch), Base.TTY, String, String})
 precompile(Tuple{typeof(Base.Markdown.with_output_format), typeof(Base.print), Array{Symbol, 1}, Base.TTY, Char})
 precompile(Tuple{typeof(Base.Docs.doc), Base.Docs.Binding})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, String, Base.Docs.Binding, String, String, String, Char})
-precompile(Tuple{typeof(Base.show_method_table), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.MethodList, Int64, Bool})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.MethodList})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, String, Base.MethodList, String, Char})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, String, String, DataType, String, DataType, Char})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, DataType, Char})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, typeof(Type), Char})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, String, Module, String, Char})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, Base.Docs.Binding, String, String, String, Char})
+precompile(Tuple{typeof(Base.show_method_table), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.MethodList, Int64, Bool})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.MethodList})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, Base.MethodList, String, Char})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, String, DataType, String, DataType, Char})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, DataType, Char})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, typeof(Type), Char})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, Module, String, Char})
 precompile(Tuple{typeof(Base.Pkg.dir), String, String})
 precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Array{Base.Docs.DocStr, 1}, Symbol, Int64})
 precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Base.Docs.Binding, Symbol, Int64})
@@ -946,8 +946,8 @@ precompile(Tuple{typeof(Base.done), Base.Iterators.Zip2{Array{Int64, 1}, SimpleV
 precompile(Tuple{typeof(Base.done), Base.Iterators.Zip2{Array{Symbol, 1}, SimpleVector}, Tuple{Int64, Int64}})
 precompile(Tuple{typeof(Base.next), Base.Iterators.Zip2{Array{Int64, 1}, SimpleVector}, Tuple{Int64, Int64}})
 precompile(Tuple{typeof(Base.next), Base.Iterators.Zip2{Array{Symbol, 1}, SimpleVector}, Tuple{Int64, Int64}})
-precompile(Tuple{typeof(Base.println), Base.AbstractIOBuffer{Array{UInt8, 1}}, DataType})
-precompile(Tuple{typeof(Base.println), Base.AbstractIOBuffer{Array{UInt8, 1}}, typeof(Type)})
+precompile(Tuple{typeof(Base.println), Base.GenericIOBuffer{Array{UInt8, 1}}, DataType})
+precompile(Tuple{typeof(Base.println), Base.GenericIOBuffer{Array{UInt8, 1}}, typeof(Type)})
 precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Array{Base.Docs.DocStr, 1}, Symbol})
 precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Base.Docs.Binding, Symbol})
 precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Type{Union{}}, Symbol})
@@ -962,45 +962,45 @@ precompile(Tuple{typeof(Base.done), Array{Type{T} where T, 1}, Int64})
 precompile(Tuple{typeof(Base.next), Array{Type{T} where T, 1}, Int64})
 precompile(Tuple{typeof(Base.getindex), Base.ObjectIdDict, Type{Tuple{Any}}})
 precompile(Tuple{typeof(Base.push!), Array{Base.Docs.DocStr, 1}, Base.Docs.DocStr})
-precompile(Tuple{typeof(Base.Docs.formatdoc), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Docs.DocStr, String})
-precompile(Tuple{typeof(Base.Markdown.hashheader), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
-precompile(Tuple{typeof(Base.Markdown.parseinline), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD, Array{Function, 1}})
+precompile(Tuple{typeof(Base.Docs.formatdoc), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Docs.DocStr, String})
+precompile(Tuple{typeof(Base.Markdown.hashheader), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.parseinline), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD, Array{Function, 1}})
 precompile(Tuple{typeof(Base.Markdown.config), Base.Markdown.MD})
-precompile(Tuple{typeof(Base.Markdown.parseinline), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD, Base.Markdown.Config})
-precompile(Tuple{typeof(Base.Markdown.list), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.parseinline), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD, Base.Markdown.Config})
+precompile(Tuple{typeof(Base.Markdown.list), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
 precompile(Tuple{typeof(Base.searchindex), String, String})
 precompile(Tuple{typeof(Base._searchindex), Base.SubString{String}, String, Int64})
-precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##skipwhitespace")), Array{Any, 1}, typeof(Base.Markdown.skipwhitespace), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##skipwhitespace")), Array{Any, 1}, typeof(Base.Markdown.skipwhitespace), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.ht_keyindex), Base.Dict{Symbol, Base.Markdown.Config}, Symbol})
-precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.Markdown.parse), Base.AbstractIOBuffer{Array{UInt8, 1}}})
-precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##startswith")), Array{Any, 1}, typeof(Base.Markdown.startswith), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Regex})
+precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.Markdown.parse), Base.GenericIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##startswith")), Array{Any, 1}, typeof(Base.Markdown.startswith), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Regex})
 precompile(Tuple{typeof(Core.Inference.isbits), Tuple{Int64, Base.Regex}})
 precompile(Tuple{typeof(Base.contains), String, String})
 precompile(Tuple{typeof(Base.contains), Base.SubString{String}, String})
-precompile(Tuple{typeof(Base.Markdown.pushitem!), Base.Markdown.List, Base.AbstractIOBuffer{Array{UInt8, 1}}})
-precompile(Tuple{typeof(Base.Markdown.fencedcode), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
-precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##startswith")), Array{Any, 1}, typeof(Base.Markdown.startswith), Base.AbstractIOBuffer{Array{UInt8, 1}}, String})
-precompile(Tuple{typeof(Base.skip), Base.AbstractIOBuffer{Array{UInt8, 1}}, Int64})
+precompile(Tuple{typeof(Base.Markdown.pushitem!), Base.Markdown.List, Base.GenericIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.Markdown.fencedcode), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##startswith")), Array{Any, 1}, typeof(Base.Markdown.startswith), Base.GenericIOBuffer{Array{UInt8, 1}}, String})
+precompile(Tuple{typeof(Base.skip), Base.GenericIOBuffer{Array{UInt8, 1}}, Int64})
 precompile(Tuple{typeof(Base.lstrip), String, Char})
-precompile(Tuple{typeof(Base.Markdown.blockquote), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.blockquote), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
 precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.Markdown.parse), String})
-precompile(Tuple{typeof(Base.Markdown.admonition), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.admonition), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
 precompile(Tuple{typeof(Base.UTF8proc.isupper), Char})
-precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##linecontains")), Array{Any, 1}, typeof(Base.Markdown.linecontains), Base.AbstractIOBuffer{Array{UInt8, 1}}, String})
+precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##linecontains")), Array{Any, 1}, typeof(Base.Markdown.linecontains), Base.GenericIOBuffer{Array{UInt8, 1}}, String})
 precompile(Tuple{typeof(Base.ucfirst), Base.SubString{String}})
-precompile(Tuple{typeof(Base.Markdown.blocktex), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.blocktex), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
 precompile(Tuple{typeof(Core.Inference.length), Tuple{DataType, Core.Inference.Const, DataType}})
 precompile(Tuple{typeof(Core.Inference.getindex), Tuple{DataType, Core.Inference.Const, DataType}, Int64})
-precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##parse_inline_wrapper")), Array{Any, 1}, typeof(Base.Markdown.parse_inline_wrapper), Base.AbstractIOBuffer{Array{UInt8, 1}}, String})
-precompile(Tuple{typeof(Base.Markdown.startswith), Base.AbstractIOBuffer{Array{UInt8, 1}}, String})
-precompile(Tuple{typeof(Base.Markdown.blockinterp), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
-precompile(Tuple{getfield(Base, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.parse), Base.AbstractIOBuffer{Array{UInt8, 1}}})
-precompile(Tuple{typeof(Base.Markdown.interpinner), Base.AbstractIOBuffer{Array{UInt8, 1}}, Bool})
-precompile(Tuple{typeof(Base.Markdown.indentcode), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
-precompile(Tuple{typeof(Base.Markdown.footnote), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##parse_inline_wrapper")), Array{Any, 1}, typeof(Base.Markdown.parse_inline_wrapper), Base.GenericIOBuffer{Array{UInt8, 1}}, String})
+precompile(Tuple{typeof(Base.Markdown.startswith), Base.GenericIOBuffer{Array{UInt8, 1}}, String})
+precompile(Tuple{typeof(Base.Markdown.blockinterp), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{getfield(Base, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.parse), Base.GenericIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.Markdown.interpinner), Base.GenericIOBuffer{Array{UInt8, 1}}, Bool})
+precompile(Tuple{typeof(Base.Markdown.indentcode), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.footnote), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
 precompile(Tuple{Type{Base.Markdown.Footnote}, Void, Array{Any, 1}})
 precompile(Tuple{Type{Base.Markdown.Footnote}, Base.SubString{String}, Array{Any, 1}})
-precompile(Tuple{typeof(Base.Markdown.github_table), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.github_table), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
 precompile(Tuple{typeof(Base.replace), String, String, String, Int64})
 precompile(Tuple{typeof(Base.pop!), Array{Base.SubString{String}, 1}})
 precompile(Tuple{typeof(Base.union!), Base.Set{Char}, String})
@@ -1009,10 +1009,10 @@ precompile(Tuple{typeof(Base.issubset), Base.SubString{String}, Base.Set{Char}})
 precompile(Tuple{typeof(Core.Inference.length), Tuple{Core.Inference.Const, Core.Inference.Const, Core.Inference.Const, Core.Inference.Const, Core.Inference.Const}})
 precompile(Tuple{typeof(Core.Inference.getindex), Tuple{Core.Inference.Const, Core.Inference.Const, Core.Inference.Const, Core.Inference.Const, Core.Inference.Const}, Int64})
 precompile(Tuple{typeof(Base.throw_boundserror), Base.SubArray{UInt8, 1, Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}, true}, Tuple{Int64}})
-precompile(Tuple{typeof(Base.peek), Base.AbstractIOBuffer{Base.SubArray{UInt8, 1, Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}, true}}})
-precompile(Tuple{typeof(Base.Markdown.parseinline), Base.AbstractIOBuffer{Base.SubArray{UInt8, 1, Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}, true}}, Base.Markdown.MD, Array{Function, 1}})
-precompile(Tuple{typeof(Base.read), Base.AbstractIOBuffer{Base.SubArray{UInt8, 1, Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}, true}}, Type{Char}})
-precompile(Tuple{typeof(Base.Markdown.parseinline), Base.AbstractIOBuffer{Base.SubArray{UInt8, 1, Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}, true}}, Base.Markdown.MD, Base.Markdown.Config})
+precompile(Tuple{typeof(Base.peek), Base.GenericIOBuffer{Base.SubArray{UInt8, 1, Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}, true}}})
+precompile(Tuple{typeof(Base.Markdown.parseinline), Base.GenericIOBuffer{Base.SubArray{UInt8, 1, Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}, true}}, Base.Markdown.MD, Array{Function, 1}})
+precompile(Tuple{typeof(Base.read), Base.GenericIOBuffer{Base.SubArray{UInt8, 1, Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}, true}}, Type{Char}})
+precompile(Tuple{typeof(Base.Markdown.parseinline), Base.GenericIOBuffer{Base.SubArray{UInt8, 1, Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}, true}}, Base.Markdown.MD, Base.Markdown.Config})
 precompile(Tuple{typeof(Base.copy!), Base.IndexLinear, Array{Array{Any, 1}, 1}, Base.IndexLinear, Array{Any, 1}})
 precompile(Tuple{typeof(Base.Markdown.parsealign), Void})
 precompile(Tuple{typeof(Base.Markdown.parsealign), Array{Base.SubString{String}, 1}})
@@ -1020,15 +1020,15 @@ precompile(Tuple{typeof(Base.Markdown.rowlength!), Void, Int64})
 precompile(Tuple{typeof(Base.Markdown.rowlength!), Array{Base.SubString{String}, 1}, Int64})
 precompile(Tuple{Type{Base.Markdown.Table}, Array{Any, 1}, Void})
 precompile(Tuple{Type{Base.Markdown.Table}, Array{Any, 1}, Array{Symbol, 1}})
-precompile(Tuple{typeof(Base.Markdown.horizontalrule), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.horizontalrule), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
 precompile(Tuple{typeof(Core.Inference.isbits), Base.Markdown.HorizontalRule})
-precompile(Tuple{typeof(Base.Markdown.setextheader), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
-precompile(Tuple{typeof(Base.Markdown.paragraph), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
-precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.Markdown.parse), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD, Base.Markdown.Config})
-precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.Markdown.parse), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
-precompile(Tuple{typeof(Base.Markdown.inline_code), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
-precompile(Tuple{typeof(Base.Markdown.readuntil), Base.AbstractIOBuffer{Array{UInt8, 1}}, String})
-precompile(Tuple{typeof(Base.Markdown.readuntil), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.SubString{String}})
+precompile(Tuple{typeof(Base.Markdown.setextheader), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.paragraph), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.Markdown.parse), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD, Base.Markdown.Config})
+precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.Markdown.parse), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.inline_code), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.MD})
+precompile(Tuple{typeof(Base.Markdown.readuntil), Base.GenericIOBuffer{Array{UInt8, 1}}, String})
+precompile(Tuple{typeof(Base.Markdown.readuntil), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.SubString{String}})
 precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Module, Symbol})
 precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Module, Symbol, Int64})
 precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, String, Symbol})
@@ -1060,9 +1060,9 @@ precompile(Tuple{typeof(Base.Markdown.term), Base.Terminals.TTYTerminal, Base.Ma
 precompile(Tuple{typeof(Core.Inference.eltype), Type{Array{T, 2} where T}})
 precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##wrapped_lines")), Array{Any, 1}, typeof(Base.Markdown.wrapped_lines), String})
 precompile(Tuple{typeof(Base.start), Tuple{Symbol, String}})
-precompile(Tuple{typeof(Base.Markdown.terminline), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{Any, 1}})
-precompile(Tuple{typeof(Base.Markdown.terminline), Base.AbstractIOBuffer{Array{UInt8, 1}}, String})
-precompile(Tuple{typeof(Base.Markdown.terminline), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.Markdown.Code})
+precompile(Tuple{typeof(Base.Markdown.terminline), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{Any, 1}})
+precompile(Tuple{typeof(Base.Markdown.terminline), Base.GenericIOBuffer{Array{UInt8, 1}}, String})
+precompile(Tuple{typeof(Base.Markdown.terminline), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Markdown.Code})
 precompile(Tuple{typeof(Base._search), Base.SubString{String}, String, Int64})
 precompile(Tuple{typeof(Base._split), Base.SubString{String}, String, Int64, Bool, Array{Base.SubString{String}, 1}})
 precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##wrapped_lines")), Array{Any, 1}, typeof(Base.Markdown.wrapped_lines), Base.SubString{String}})
@@ -1084,7 +1084,7 @@ precompile(Tuple{typeof(Core.Inference.mk_getfield), TypedSlot, Int64, Type{Stri
 precompile(Tuple{getfield(Core, Symbol("#kw#Type")), Array{Any, 1}, Type{Base.Cmd}, Base.Cmd})
 precompile(Tuple{typeof(Base.uv_status_string), Base.PipeEndpoint})
 precompile(Tuple{typeof(Base._fd), Base.PipeEndpoint})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.PipeEndpoint})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.PipeEndpoint})
 precompile(Tuple{typeof(Base.unpreserve_handle), Base.PipeEndpoint})
 precompile(Tuple{typeof(Base.isopen), Base.PipeEndpoint})
 precompile(Tuple{typeof(Base.stream_wait), Base.PipeEndpoint, Base.Condition})
@@ -1150,8 +1150,8 @@ precompile(Tuple{typeof(Core.Inference.isbits), Tuple{Int64, Int64, Int64, Int64
 precompile(Tuple{typeof(Base.getaddrinfo), String})
 precompile(Tuple{typeof(Base.uv_status_string), Base.PipeEndpoint})
 precompile(Tuple{typeof(Base._fd), Base.PipeEndpoint})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.PipeEndpoint})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, UInt16})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.PipeEndpoint})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, UInt16})
 precompile(Tuple{typeof(Base.isopen), Base.PipeEndpoint})
 precompile(Tuple{typeof(Base.unpreserve_handle), Task})
 precompile(Tuple{typeof(Base.check_open), Base.PipeEndpoint})
@@ -1165,27 +1165,27 @@ precompile(Tuple{typeof(Base._fd), Base.TCPSocket})
 precompile(Tuple{typeof(Base.print), Base.PipeEndpoint, String})
 precompile(Tuple{typeof(Base.print), Base.PipeEndpoint, Char})
 precompile(Tuple{typeof(Base.print), Base.PipeEndpoint, String, Char})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.TCPSocket})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.TCPSocket})
 precompile(Tuple{typeof(Base.write), Base.PipeEndpoint, Char})
 precompile(Tuple{typeof(Base.isopen), Base.TCPSocket})
 precompile(Tuple{typeof(Base.unpreserve_handle), Base.TCPSocket})
 precompile(Tuple{typeof(Base.check_open), Base.TCPSocket})
 precompile(Tuple{typeof(Base.stream_wait), Base.TCPSocket, Base.Condition})
 precompile(Tuple{typeof(Base.wait_connected), Base.TCPSocket})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, String, Base.IPv4, String})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, String, Base.IPv6, String})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, Base.IPv4, String})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, Base.IPv6, String})
 precompile(Tuple{typeof(Base.Distributed.socket_reuse_port)})
 precompile(Tuple{typeof(Base.promote_type), Type{Int64}, Type{Int16}})
 precompile(Tuple{typeof(Base.promote_rule), Type{Int16}, Type{Int64}})
 precompile(Tuple{typeof(Base.promote_result), Type{Int64}, Type{Int16}, Type{Int64}, Type{Union{}}})
 precompile(Tuple{typeof(Base.Distributed.flush_gc_msgs)})
-precompile(Tuple{typeof(Base.show), Base.AbstractIOBuffer{Array{UInt8, 1}}, Int16})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Int16})
+precompile(Tuple{typeof(Base.show), Base.GenericIOBuffer{Array{UInt8, 1}}, Int16})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Int16})
 precompile(Tuple{typeof(Base.uv_status_string), Base.PipeServer})
 precompile(Tuple{typeof(Base._fd), Base.PipeServer})
 precompile(Tuple{typeof(Base.convert), Type{Int16}, Int16})
 precompile(Tuple{typeof(Base.string), String, Int16, String, String, String, String})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.PipeServer})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.PipeServer})
 precompile(Tuple{typeof(Base.unpreserve_handle), Base.PipeServer})
 precompile(Tuple{typeof(Base.isopen), Base.PipeServer})
 precompile(Tuple{typeof(Base.accept_nonblock), Base.PipeServer, Base.PipeEndpoint})
@@ -1223,7 +1223,7 @@ precompile(Tuple{typeof(Base.Distributed.setup_launched_worker), Base.Distribute
 precompile(Tuple{typeof(Base.connect), Base.Distributed.LocalManager, Int64, Base.Distributed.WorkerConfig})
 precompile(Tuple{typeof(Base.Distributed.read_worker_host_port), Base.Pipe})
 precompile(Tuple{typeof(Base.isreadable), Base.PipeEndpoint})
-precompile(Tuple{typeof(Base.search), Base.AbstractIOBuffer{Array{UInt8, 1}}, UInt8})
+precompile(Tuple{typeof(Base.search), Base.GenericIOBuffer{Array{UInt8, 1}}, UInt8})
 precompile(Tuple{typeof(Base.start_reading), Base.PipeEndpoint})
 precompile(Tuple{typeof(Base.wait_readbyte), Base.PipeEndpoint, UInt8})
 precompile(Tuple{typeof(Base.readuntil), Base.PipeEndpoint, UInt8})
@@ -1246,20 +1246,20 @@ precompile(Tuple{typeof(Base.connect!), Base.TCPSocket, Base.IPv4, UInt16})
 precompile(Tuple{typeof(Base.Distributed.process_messages), Base.TCPSocket, Base.TCPSocket, Bool})
 precompile(Tuple{typeof(Base.uv_status_string), Base.TCPSocket})
 precompile(Tuple{typeof(Base._fd), Base.TCPSocket})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.TCPSocket})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.TCPSocket})
 precompile(Tuple{typeof(Base.isopen), Base.TCPSocket})
 precompile(Tuple{typeof(Base.convert), Type{Base.Nullable{AbstractString}}, String})
 precompile(Tuple{typeof(Base.unpreserve_handle), Base.TCPSocket})
 precompile(Tuple{typeof(Base.check_open), Base.TCPSocket})
 precompile(Tuple{typeof(Base.stream_wait), Base.TCPSocket, Base.Condition})
 precompile(Tuple{getfield(Core, Symbol("#kw#Type")), Array{Any, 1}, Type{Base.Distributed.Worker}, Int64, Base.TCPSocket, Base.TCPSocket, Base.Distributed.LocalManager})
-precompile(Tuple{typeof(Base.read_sub), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64, Int64})
+precompile(Tuple{typeof(Base.read_sub), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64, Int64})
 precompile(Tuple{typeof(Base.isreadable), Base.TCPSocket})
 precompile(Tuple{typeof(Base.start_reading), Base.TCPSocket})
-precompile(Tuple{typeof(Base.write_sub), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64, Int64})
-precompile(Tuple{typeof(Base.readbytes!), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64})
+precompile(Tuple{typeof(Base.write_sub), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64, Int64})
+precompile(Tuple{typeof(Base.readbytes!), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64})
 precompile(Tuple{typeof(Base.wait_readnb), Base.TCPSocket, Int64})
-precompile(Tuple{typeof(Base.write), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.write), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.readbytes!), Base.TCPSocket, Array{UInt8, 1}, Int64})
 precompile(Tuple{typeof(Base.read), Base.TCPSocket, Int64})
 precompile(Tuple{typeof(Base.Distributed.worker_id_from_socket), Base.TCPSocket})
@@ -1299,7 +1299,7 @@ precompile(Tuple{typeof(Base.convert), Type{Base.Distributed.ClusterSerializer{I
 precompile(Tuple{typeof(Base.convert), Type{Base.Distributed.ClusterManager}, Base.Distributed.LocalManager})
 precompile(Tuple{typeof(Base.convert), Type{Base.Distributed.WorkerConfig}, Base.Distributed.WorkerConfig})
 precompile(Tuple{typeof(Base.convert), Type{Base.Nullable{Base.VersionNumber}}, Base.Nullable{Base.VersionNumber}})
-precompile(Tuple{typeof(Base.join), Base.AbstractIOBuffer{Array{UInt8, 1}}, Tuple{Int64}, Char})
+precompile(Tuple{typeof(Base.join), Base.GenericIOBuffer{Array{UInt8, 1}}, Tuple{Int64}, Char})
 precompile(Tuple{typeof(Base.get), Base.Dict{Any, Any}, Base.Distributed.RRID, Bool})
 precompile(Tuple{typeof(Base.ht_keyindex), Base.Dict{Any, Any}, Base.Distributed.RRID})
 precompile(Tuple{typeof(Core.Inference.isbits), Tuple{Int64, typeof(Base.Distributed.rmprocs)}})
@@ -1405,13 +1405,13 @@ precompile(Tuple{typeof(Base.eof), Base.PipeEndpoint})
 precompile(Tuple{typeof(Base.unsafe_read), Base.TCPSocket, Base.RefValue{Int32}, Int64})
 precompile(Tuple{typeof(Base.unsafe_read), Base.TCPSocket, Base.RefValue{Int64}, Int64})
 precompile(Tuple{typeof(Base.read!), Base.TCPSocket, Array{UInt8, 1}})
-precompile(Tuple{typeof(Base.read_sub), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64, Int64})
+precompile(Tuple{typeof(Base.read_sub), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64, Int64})
 precompile(Tuple{typeof(Base.isreadable), Base.TCPSocket})
 precompile(Tuple{typeof(Base.start_reading), Base.TCPSocket})
-precompile(Tuple{typeof(Base.write_sub), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64, Int64})
-precompile(Tuple{typeof(Base.readbytes!), Base.AbstractIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64})
+precompile(Tuple{typeof(Base.write_sub), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64, Int64})
+precompile(Tuple{typeof(Base.readbytes!), Base.GenericIOBuffer{Array{UInt8, 1}}, Array{UInt8, 1}, Int64})
 precompile(Tuple{typeof(Base.wait_readnb), Base.TCPSocket, Int64})
-precompile(Tuple{typeof(Base.write), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.write), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.readbytes!), Base.TCPSocket, Array{UInt8, 1}, Int64})
 precompile(Tuple{typeof(Base.read), Base.TCPSocket, Int64})
 precompile(Tuple{typeof(Base.promote_type), Type{Int64}, Type{UInt8}})
@@ -1451,7 +1451,7 @@ precompile(Tuple{typeof(Base._array_for), Type{Union{}}, Base.UnitRange{Int64},
 precompile(Tuple{typeof(Base.Serializer.deserialize_array), Base.Distributed.ClusterSerializer{Base.TCPSocket}})
 precompile(Tuple{typeof(Base.Serializer.deserialize_datatype), Base.Distributed.ClusterSerializer{Base.TCPSocket}})
 precompile(Tuple{typeof(Base.Serializer.deserialize_expr), Base.Distributed.ClusterSerializer{Base.TCPSocket}, Int64})
-precompile(Tuple{typeof(Base.join), Base.AbstractIOBuffer{Array{UInt8, 1}}, Tuple{Int64}, Char})
+precompile(Tuple{typeof(Base.join), Base.GenericIOBuffer{Array{UInt8, 1}}, Tuple{Int64}, Char})
 precompile(Tuple{typeof(Core.Inference.isbits), Tuple{Int64, typeof(Base.Distributed.rmprocs)}})
 precompile(Tuple{Type{Core.Inference.Generator{I, F} where F where I}, Type{QuoteNode}, Tuple{Int64, typeof(Base.Distributed.rmprocs)}})
 precompile(Tuple{Type{Core.Inference.Generator{Tuple{Int64, typeof(Base.Distributed.rmprocs)}, Type{QuoteNode}}}, Type{QuoteNode}, Tuple{Int64, typeof(Base.Distributed.rmprocs)}})
@@ -1639,9 +1639,9 @@ precompile(Tuple{typeof(Base._sub2ind), Tuple{Int64}, Int64, Int64, Int64, Int64
 precompile(Tuple{typeof(Base._sub2ind), Tuple{}, Int64, Int64, Int64})
 precompile(Tuple{typeof(Base.first), Array{Int64, 1}})
 precompile(Tuple{typeof(Base.print_matrix_row), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Int64, 1}, Array{Tuple{Int64, Int64}, 1}, Int64, Array{Int64, 1}, String})
-precompile(Tuple{typeof(Base.print), Base.AbstractIOBuffer{Array{UInt8, 1}}, Base.OneTo{Int64}})
+precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.OneTo{Int64}})
 precompile(Tuple{typeof(Base.last), Array{Int64, 1}})
-precompile(Tuple{typeof(Base.LineEdit.edit_delete), Base.AbstractIOBuffer{Array{UInt8, 1}}})
+precompile(Tuple{typeof(Base.LineEdit.edit_delete), Base.GenericIOBuffer{Array{UInt8, 1}}})
 precompile(Tuple{typeof(Base.print), String})
 precompile(Tuple{typeof(Base.vcat), Array{Int64, 1}})
 precompile(Tuple{typeof(Base.Distributed._rmprocs), Array{Int64, 1}, Float64})
@@ -1736,7 +1736,7 @@ precompile(Tuple{typeof(Base.find_in_node_path), String, Void, Int64})
 precompile(Tuple{typeof(Base.find_in_path), String, Void})
 precompile(Tuple{typeof(Base.getindex), Base.ObjectIdDict, Symbol})
 precompile(Tuple{typeof(Base.getindex), Type{Tuple{String, Float64}}, Tuple{String, Float64}})
-precompile(Tuple{typeof(Base.Grisu._show), Base.IOContext{Base.AbstractIOBuffer{Array{UInt8, 1}}}, Float64, Int64, Int64, Bool, Bool})
+precompile(Tuple{typeof(Base.Grisu._show), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, Float64, Int64, Int64, Bool, Bool})
 precompile(Tuple{typeof(Base.hash), Base.Distributed.Future, UInt64})
 precompile(Tuple{typeof(Base.hash), Tuple{String, Float64}, UInt64})
 precompile(Tuple{typeof(Base.ht_keyindex2), Base.Dict{Symbol, Base.Condition}, Symbol})
@@ -1840,9 +1840,9 @@ precompile(Tuple{typeof(Base.setindex!), Base.Dict{Symbol, UInt64}, UInt64, Symb
 precompile(Tuple{typeof(Base._setindex!), Base.Dict{Symbol, UInt64}, UInt64, Symbol, Int64})
 precompile(Tuple{typeof(Base.setindex!), Base.Dict{Tuple{String, Float64}, Void}, Void, Tuple{String, Float64}})
 precompile(Tuple{typeof(Base._setindex!), Base.Dict{Tuple{String, Float64}, Void}, Void, Tuple{String, Float64}, Int64})
-precompile(Tuple{typeof(Base.show), Base.IOContext{Base.AbstractIOBuffer{Array{UInt8, 1}}}, Float64})
-precompile(Tuple{typeof(Base.show_delim_array), Base.AbstractIOBuffer{Array{UInt8, 1}}, Tuple{String, Float64}, Char, Char, Char, Bool, Int64, Int64})
-precompile(Tuple{typeof(Base.show_unquoted), Base.AbstractIOBuffer{Array{UInt8, 1}}, Expr})
+precompile(Tuple{typeof(Base.show), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, Float64})
+precompile(Tuple{typeof(Base.show_delim_array), Base.GenericIOBuffer{Array{UInt8, 1}}, Tuple{String, Float64}, Char, Char, Char, Bool, Int64, Int64})
+precompile(Tuple{typeof(Base.show_unquoted), Base.GenericIOBuffer{Array{UInt8, 1}}, Expr})
 precompile(Tuple{typeof(Base.skip_deleted), Base.Dict{Tuple{String, Float64}, Void}, Int64})
 precompile(Tuple{typeof(Base.spawn), Base.CmdRedirect, Tuple{Base.Pipe, Base.TTY, Base.IOStream}})
 precompile(Tuple{typeof(Base.stale_cachefile), String, String})
diff --git a/base/stream.jl b/base/stream.jl
index 5b5bdaa28fa48..0a1a565c11c77 100644
--- a/base/stream.jl
+++ b/base/stream.jl
@@ -11,7 +11,7 @@ abstract type LibuvServer <: IOServer end
 abstract type LibuvStream <: IO end
 
 # IO
-# +- AbstractIOBuffer{T<:AbstractArray{UInt8,1}} (not exported)
+# +- GenericIOBuffer{T<:AbstractArray{UInt8,1}} (not exported)
 # +- AbstractPipe (not exported)
 # .  +- Pipe
 # .  +- Process (not exported)
@@ -26,7 +26,7 @@ abstract type LibuvStream <: IO end
 # .  +- TCPSocket
 # .  +- TTY (not exported)
 # .  +- UDPSocket
-# +- IOBuffer = Base.AbstractIOBuffer{Array{UInt8,1}}
+# +- IOBuffer = Base.GenericIOBuffer{Array{UInt8,1}}
 # +- IOStream
 
 # IOServer
diff --git a/base/strings/io.jl b/base/strings/io.jl
index 89ae79301de14..cb4327215c1f1 100644
--- a/base/strings/io.jl
+++ b/base/strings/io.jl
@@ -123,7 +123,7 @@ print(io::IO, s::AbstractString) = (write(io, s); nothing)
 write(io::IO, s::AbstractString) = (len = 0; for c in s; len += write(io, c); end; len)
 show(io::IO, s::AbstractString) = print_quoted(io, s)
 
-write(to::AbstractIOBuffer, s::SubString{String}) =
+write(to::GenericIOBuffer, s::SubString{String}) =
     s.endof==0 ? 0 : unsafe_write(to, pointer(s.string, s.offset + 1), UInt(nextind(s, s.endof) - 1))
 
 ## printing literal quoted string data ##
diff --git a/doc/src/stdlib/io-network.md b/doc/src/stdlib/io-network.md
index 173261912b02e..7b4fd4ea9fd20 100644
--- a/doc/src/stdlib/io-network.md
+++ b/doc/src/stdlib/io-network.md
@@ -8,7 +8,7 @@ Base.STDERR
 Base.STDIN
 Base.open
 Base.IOBuffer
-Base.take!(::Base.AbstractIOBuffer)
+Base.take!(::Base.GenericIOBuffer)
 Base.fdio
 Base.flush
 Base.close