Russ Cox [Fri, 16 Dec 2011 22:58:53 +0000 (17:58 -0500)]
runtime: fix build
I am looking forward to not supporting two build
systems simultaneously. Make complains about
a circular dependency still, but I don't understand it
and it's probably not worth the time to figure out.
Russ Cox [Fri, 16 Dec 2011 20:33:58 +0000 (15:33 -0500)]
runtime: make more build-friendly
Collapse the arch,os-specific directories into the main directory
by renaming xxx/foo.c to foo_xxx.c, and so on.
There are no substantial edits here, except to the Makefile.
The assumption is that the Go tool will #define GOOS_darwin
and GOARCH_amd64 and will make any file named something
like signals_darwin.h available as signals_GOOS.h during the
build. This replaces what used to be done with -I$(GOOS).
There is still work to be done to make runtime build with
standard tools, but this is a big step. After this we will have
to write a script to generate all the generated files so they
can be checked in (instead of generated during the build).
Russ Cox [Fri, 16 Dec 2011 04:51:04 +0000 (23:51 -0500)]
go: implement test command
Gotest tries to build things, for which it invokes make,
and it was too hard to coordinate go invoking gotest
invoking go to build the test binary, so put all the code
here instead. Gotest will be deleted once we switch.
The only code that really made sense to copy verbatim
was the flag parsing.
This remains a work in progress. There are still plenty
of things to clean up and make better, but this is a good
checkpoint. It can run all the tests in the tree (except
runtime, which it can't build yet).
$ go test all -short
ok archive/tar
ok archive/zip
ok bufio
? builtin [no test files]
ok bytes
ok compress/bzip2
ok compress/flate
ok compress/gzip
ok compress/lzw
ok compress/zlib
ok container/heap
ok container/list
ok container/ring
? crypto [no test files]
ok crypto/aes
ok crypto/bcrypt
ok crypto/blowfish
ok crypto/cast5
ok crypto/cipher
ok crypto/des
ok crypto/dsa
ok crypto/ecdsa
ok crypto/elliptic
ok crypto/hmac
ok crypto/md4
ok crypto/md5
ok crypto/ocsp
ok crypto/openpgp
ok crypto/openpgp/armor
ok crypto/openpgp/elgamal
? crypto/openpgp/error [no test files]
ok crypto/openpgp/packet
ok crypto/openpgp/s2k
ok crypto/rand
ok crypto/rc4
ok crypto/ripemd160
ok crypto/rsa
ok crypto/sha1
ok crypto/sha256
ok crypto/sha512
ok crypto/subtle
ok crypto/tls
ok crypto/twofish
ok crypto/x509
? crypto/x509/pkix [no test files]
ok crypto/xtea
ok debug/dwarf
ok debug/elf
ok debug/gosym
ok debug/macho
ok debug/pe
ok encoding/ascii85
ok encoding/asn1
ok encoding/base32
ok encoding/base64
ok encoding/binary
ok encoding/csv
ok encoding/git85
ok encoding/gob
ok encoding/hex
ok encoding/json
ok encoding/pem
ok encoding/xml
ok errors
ok exp/ebnf
? exp/ebnflint [no test files]
ok exp/gotype
ok exp/norm
ok exp/spdy
ok exp/sql
ok exp/sql/driver
ok exp/ssh
ok exp/types
ok expvar
ok flag
ok fmt
ok go/ast
ok go/build
ok go/doc
ok go/parser
ok go/printer
ok go/scanner
ok go/token
? hash [no test files]
ok hash/adler32
ok hash/crc32
ok hash/crc64
ok hash/fnv
ok html
ok html/template
ok image
? image/bmp [no test files]
? image/color [no test files]
ok image/draw
? image/gif [no test files]
ok image/jpeg
ok image/png
ok image/tiff
ok image/ycbcr
ok index/suffixarray
ok io
ok io/ioutil
ok log
ok log/syslog
ok math
ok math/big
ok math/cmplx
ok math/rand
ok mime
ok mime/multipart
ok net
? net/dict [no test files]
ok net/http
ok net/http/cgi
ok net/http/fcgi
? net/http/httptest [no test files]
ok net/http/httputil
? net/http/pprof [no test files]
ok net/mail
ok net/rpc
ok net/rpc/jsonrpc
ok net/smtp
ok net/textproto
ok net/url
ok old/netchan
ok old/regexp
ok old/template
ok os
ok os/exec
ok os/signal
ok os/user
ok patch
ok path
ok path/filepath
ok reflect
ok regexp
ok regexp/syntax
# cd /Users/rsc/g/go/src/pkg/runtime; 6g -o /var/folders/mw/qfnx8hhd1_s9mm9wtbng0hw80000gn/T/go-build874847916/runtime_test/_obj/_go_.6 -p runtime_test -I /var/folders/mw/qfnx8hhd1_s9mm9wtbng0hw80000gn/T/go-build874847916 append_test.go chan_test.go closure_test.go gc_test.go mfinal_test.go proc_test.go sema_test.go softfloat64_test.go symtab_test.go
proc_test.go:87: undefined: runtime.Entersyscall
proc_test.go:88: undefined: runtime.Exitsyscall
proc_test.go:111: undefined: runtime.Entersyscall
proc_test.go:116: undefined: runtime.Exitsyscall
softfloat64_test.go:79: undefined: Fadd64
softfloat64_test.go:80: undefined: Fsub64
softfloat64_test.go:82: undefined: Fmul64
softfloat64_test.go:83: undefined: Fdiv64
softfloat64_test.go:94: undefined: F64to32
softfloat64_test.go:99: undefined: F32to64
softfloat64_test.go:99: too many errors
exit status 1
FAIL runtime [build failed]
? runtime/cgo [no test files]
ok runtime/debug
ok runtime/pprof
ok sort
ok strconv
ok strings
ok sync
ok sync/atomic
? syscall [no test files]
? testing [no test files]
? testing/iotest [no test files]
ok testing/quick
ok testing/script
ok text/scanner
ok text/tabwriter
ok text/template
ok text/template/parse
ok time
ok unicode
ok unicode/utf16
ok unicode/utf8
? unsafe [no test files]
ok websocket
$
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5495055
Russ Cox [Thu, 15 Dec 2011 23:21:38 +0000 (18:21 -0500)]
os/exec: fix -test.run argument for new 'go test'
In 'go test' I deleted the leading package. prefix
from all the test names, since it contained no actual
information. Adjust the -test.run argument accordingly.
This will still work with the current gotest too, since
the argument is an unanchored pattern.
Volker Dobler [Thu, 15 Dec 2011 23:01:54 +0000 (10:01 +1100)]
godoc: Allow examples for methods.
An example for a method M() of type T can be written as
func ExampleT_M() { ... }.
To differentiate between multiple examples for one function, type or
method a suffix with a lowercase start may be appended to the name
of the example function, e.g. ExampleFoo_basicUsage.
Fixes #2465.
R=golang-dev, adg, r, rsc, duperray.olivier, r
CC=golang-dev
https://golang.org/cl/5440100
Rob Pike [Thu, 15 Dec 2011 21:44:35 +0000 (13:44 -0800)]
govet: divide the program into one file per vetting suite
Just a rearrangement except for a couple of new functions
and names so govet.go can have all the generic walk routines.
Brad Fitzpatrick [Thu, 15 Dec 2011 19:21:21 +0000 (11:21 -0800)]
json: use strconv.Append variants to avoid allocations in encoding
Before/after, best of 3:
json.BenchmarkCodeEncoder 10 183495300 ns/op 10.58 MB/s
->
json.BenchmarkCodeEncoder 10 133025100 ns/op 14.59 MB/s
But don't get too excited about this. These benchmarks, while
stable at any point of time, fluctuate wildly with any line of
code added or removed anywhere in the path due to stack splitting
issues.
It's currently much faster, though, and this is the API that
doesn't allocate so should always be faster in theory.
Russ Cox [Thu, 15 Dec 2011 18:54:19 +0000 (13:54 -0500)]
go: help messages for 'go test'
The plan is to make 'go test' replace gotest entirely, so it
cannot refer to gotest's godoc. Instead, copy gotest's
documentation in as three different help messages:
'go help test', 'go help testflag', and 'go help testfunc'.
Russ Cox [Thu, 15 Dec 2011 17:32:59 +0000 (12:32 -0500)]
test/bench/go1: first draft of Go 1 benchmark suite
I have included a few important microbenchmarks,
but the overall intent is to have mostly end-to-end
benchmarks timing real world operations.
The jsondata.go file is a summary of agl's
activity in various open source repositories.
It gets used as test data for many of the benchmarks.
Everything links into one binary (even the test data)
so that it is easy to run the benchmarks on many
computers: there is just one file to copy around.
R=golang-dev, r, bradfitz, adg, r
CC=golang-dev
https://golang.org/cl/5484071
Rob Pike [Thu, 15 Dec 2011 05:52:41 +0000 (21:52 -0800)]
spec: skip carriage returns in raw literals
This change guarantees that whether the line ending convention
when the source is created includes carriage returns is irrelevant
to the value of the string. See issue 680.
Russ Cox [Thu, 15 Dec 2011 03:42:42 +0000 (22:42 -0500)]
go: implement build, install, run
clean is gone; all the intermediate files are created
in a temporary tree that is wiped when the command ends.
Not using go/build's Script because it is not well aligned
with this API. The various builder methods are copied from
go/build and adapted. Probably once we delete goinstall
we can delete the Script API too.
Vadim Vygonets [Wed, 14 Dec 2011 22:17:40 +0000 (17:17 -0500)]
gzip: Convert between Latin-1 and Unicode
I realize I didn't send the tests in last time. Anyway, I added
a test that knows too much about the package's internal structure,
and I'm not sure whether it's the right thing to do.
Luuk van Dijk [Wed, 14 Dec 2011 14:05:33 +0000 (15:05 +0100)]
gc: inlining (disabled without -l)
Cross- and intra package inlining of single assignments or return <expression>.
Minus some hairy cases, currently including other calls, expressions with closures and ... arguments.
Rob Pike [Wed, 14 Dec 2011 04:40:55 +0000 (20:40 -0800)]
encoding/gob: better error messages when types mismatch
The transmitter must encode an interface value if it is to be decoded
into an interface value, but it's a common and confusing error to
encode a concrete value and attempt to decode it into an interface,
particularly *interface{}. This CL attempts to explain things better.
Ian Lance Taylor [Tue, 13 Dec 2011 23:12:55 +0000 (15:12 -0800)]
runtime: Make gc_test test extra allocated space, not total space.
Testing total space fails for gccgo when not using split
stacks, because then each goroutine has a large stack, and so
the total memory usage is large.
Russ Cox [Tue, 13 Dec 2011 22:08:56 +0000 (17:08 -0500)]
math: delete non-Sqrt-based Hypot
I was confused by the existence of two portable Hypot
routines in the tree when I cleaned things up, and I made
ARM use the wrong (imprecise) one. Use the right one,
and delete the wrong one.
Fixes arm build.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5485065
««« original CL description
http: close connection after printing panic stack trace
In a testing situation, it's possible for a local http
server to panic and the test exit without the stack trace
ever being printed.
Fixes #2480.
Roger Peppe [Tue, 13 Dec 2011 21:34:22 +0000 (16:34 -0500)]
http: close connection after printing panic stack trace
In a testing situation, it's possible for a local http
server to panic and the test exit without the stack trace
ever being printed.
Fixes #2480.
and then link in either sin_decl.go+sin_386.s or
just sin_port.go. The Makefile actually did the magic
of linking in only the _port.go files for those without
assembly and only the _decl.go files for those with
assembly, or at least some of that magic.
The biggest problem with this, beyond being hard
to explain to the build system, is that once you do
explain it to the build system, godoc knows which
of sin_port.go or sin_decl.go are involved on a given
architecture, and it (correctly) ignores the other.
That means you have to put identical doc comments
in both files.
The new approach, which is more like what we did
in the later packages math/big and sync/atomic,
is to have
sin_386.s
// assembly for Sin (ignores sin)
sin_amd64.s
// assembly for Sin: jmp sin
sin_arm.s
// assembly for Sin: jmp sin
Once we abandon Makefiles we can put all the assembly
stubs in one source file, so the number of files will
actually go down.
Chris asked whether the branches cost anything.
Given that they are branching to pure-Go implementations
that are not typically known for their speed, the single
direct branch is not going to be noticeable. That is,
it's on the slow path.
An alternative would have been to preserve the old
"only write assembly files when there's an implementation"
and still have just one copy of the declaration of Sin
(and thus one doc comment) by doing:
In this version everyone would link in sin.go and
then either sin_decl.go+sin_386.s or sin_port.go.
This has an extra function call on all paths, including
the "fast path" to get to assembly, and it triples the
number of Go files involved compared to what I did
in this CL. On the other hand you don't have to
write assembly stubs. After starting down this path
I decided that the assembly stubs were the easier
approach.
As for generating the assembly stubs on the fly, much
of the goal here is to eliminate magic from the build
process, so that zero-configuration tools like goinstall
or the new go tool can handle this package.
R=golang-dev, r, cw, iant, r
CC=golang-dev
https://golang.org/cl/5488057