Rob Pike | d6ef6eb | 2015-06-25 14:36:49 +1000 | [diff] [blame] | 1 | <!--{ |
| 2 | "Title": "Go 1.5 Release Notes", |
| 3 | "Path": "/doc/go1.5", |
| 4 | "Template": true |
| 5 | }--> |
| 6 | |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 7 | |
| 8 | <h2 id="introduction">Introduction to Go 1.5</h2> |
| 9 | |
| 10 | <p> |
| 11 | The latest Go release, version 1.5, |
| 12 | is a significant release, including major architectural changes to the implementation. |
| 13 | Despite that, we expect almost all Go programs to continue to compile and run as before, |
| 14 | because the release still maintains the Go 1 <a href="/doc/go1compat.html">promise |
| 15 | of compatibility</a>. |
| 16 | </p> |
| 17 | |
| 18 | <p> |
| 19 | The biggest developments in the implementation are: |
| 20 | </p> |
| 21 | |
| 22 | <ul> |
| 23 | |
| 24 | <li> |
| 25 | The compiler and runtime are now written entirely in Go (with a little assembler). |
| 26 | C is no longer involved in the implementation, and so the C compiler that was |
| 27 | once necessary for building the distribution is gone. |
| 28 | </li> |
| 29 | |
| 30 | <li> |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 31 | The garbage collector is now <a href="https://golang.org/s/go14gc">concurrent</a> and provides dramatically lower |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 32 | pause times by running, when possible, in parallel with other goroutines. |
| 33 | </li> |
| 34 | |
| 35 | <li> |
| 36 | By default, Go programs run with <code>GOMAXPROCS</code> set to the |
| 37 | number of cores available; in prior releases it defaulted to 1. |
| 38 | </li> |
| 39 | |
| 40 | <li> |
Brad Fitzpatrick | 2ae7737 | 2015-07-10 17:17:11 -0600 | [diff] [blame] | 41 | Support for <a href="https://golang.org/s/go14internal">internal packages</a> |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 42 | is now provided for all repositories, not just the Go core. |
| 43 | </li> |
| 44 | |
| 45 | <li> |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 46 | The <code>go</code> command now provides <a href="https://golang.org/s/go15vendor">experimental |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 47 | support</a> for "vendoring" external dependencies. |
| 48 | </li> |
| 49 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 50 | <li> |
| 51 | A new <code>go tool trace</code> command supports fine-grained |
| 52 | tracing of program execution. |
| 53 | </li> |
| 54 | |
| 55 | <li> |
| 56 | A new <code>go doc</code> command (distinct from <code>godoc</code>) |
| 57 | is customized for command-line use. |
| 58 | </li> |
| 59 | |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 60 | </ul> |
| 61 | |
| 62 | <p> |
| 63 | These and a number of other changes to the implementation and tools |
| 64 | are discussed below. |
| 65 | </p> |
| 66 | |
| 67 | <p> |
| 68 | The release also contains one small language change involving map literals. |
| 69 | </p> |
| 70 | |
| 71 | <p> |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 72 | Finally, the timing of the <a href="https://golang.org/s/releasesched">release</a> |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 73 | strays from the usual six-month interval, |
| 74 | both to provide more time to prepare this major release and to shift the schedule thereafter to |
| 75 | time the release dates more conveniently. |
| 76 | </p> |
| 77 | |
| 78 | <h2 id="language">Changes to the language</h2> |
| 79 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 80 | <h3 id="map_literals">Map literals</h3> |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 81 | |
| 82 | <p> |
| 83 | Due to an oversight, the rule that allowed the element type to be elided from slice literals was not |
| 84 | applied to map keys. |
| 85 | This has been <a href="/cl/2591">corrected</a> in Go 1.5. |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 86 | An example will make this clear. |
| 87 | As of Go 1.5, this map literal, |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 88 | </p> |
| 89 | |
Rob Pike | d6ef6eb | 2015-06-25 14:36:49 +1000 | [diff] [blame] | 90 | <pre> |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 91 | m := map[Point]string{ |
| 92 | Point{29.935523, 52.891566}: "Persepolis", |
| 93 | Point{-25.352594, 131.034361}: "Uluru", |
| 94 | Point{37.422455, -122.084306}: "Googleplex", |
| 95 | } |
| 96 | </pre> |
Brad Fitzpatrick | fd2642b | 2015-01-18 16:00:10 -0800 | [diff] [blame] | 97 | |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 98 | <p> |
| 99 | may be written as follows, without the <code>Point</code> type listed explicitly: |
| 100 | </p> |
Robert Griesemer | 754bb71 | 2015-03-20 16:17:13 -0700 | [diff] [blame] | 101 | |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 102 | <pre> |
| 103 | m := map[Point]string{ |
| 104 | {29.935523, 52.891566}: "Persepolis", |
| 105 | {-25.352594, 131.034361}: "Uluru", |
| 106 | {37.422455, -122.084306}: "Googleplex", |
| 107 | } |
| 108 | </pre> |
Brad Fitzpatrick | fd2642b | 2015-01-18 16:00:10 -0800 | [diff] [blame] | 109 | |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 110 | <h2 id="implementation">The Implementation</h2> |
Russ Cox | cbbe9f6 | 2015-04-27 19:28:16 -0400 | [diff] [blame] | 111 | |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 112 | <h3 id="c">No more C</h3> |
Brad Fitzpatrick | fb7e244 | 2015-05-14 16:02:53 -0700 | [diff] [blame] | 113 | |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 114 | <p> |
| 115 | The compiler and runtime are now implemented in Go and assembler, without C. |
| 116 | The only C source left in the tree is related to testing or to <code>cgo</code>. |
| 117 | There was a C compiler in the tree in 1.4 and earlier. |
| 118 | It was used to build the runtime; a custom compiler was necessary in part to |
| 119 | guarantee the C code would work with the stack management of goroutines. |
| 120 | Since the runtime is in Go now, there is no need for this C compiler and it is gone. |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 121 | Details of the process to eliminate C are discussed <a href="https://golang.org/s/go13compiler">elsewhere</a>. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 122 | </p> |
| 123 | |
| 124 | <p> |
| 125 | The conversion from C was done with the help of custom tools created for the job. |
| 126 | Most important, the compiler was actually moved by automatic translation of |
| 127 | the C code into Go. |
| 128 | It is in effect the same program in a different language. |
| 129 | It is not a new implementation |
| 130 | of the compiler so we expect the process will not have introduced new compiler |
| 131 | bugs. |
| 132 | An overview of this process is available in the slides for |
| 133 | <a href="https://talks.golang.org/2015/gogo.slide">this presentation</a>. |
| 134 | </p> |
| 135 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 136 | <h3 id="compiler_and_tools">Compiler and tools</h3> |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 137 | |
| 138 | <p> |
| 139 | Independent of but encouraged by the move to Go, the names of the tools have changed. |
| 140 | The old names <code>6g</code>, <code>8g</code> and so on are gone; instead there |
| 141 | is just one binary, accessible as <code>go</code> <code>tool</code> <code>compile</code>, |
| 142 | that compiles Go source into binaries suitable for the architecture and operating system |
| 143 | specified by <code>$GOARCH</code> and <code>$GOOS</code>. |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 144 | Similarly, there is now one linker (<code>go</code> <code>tool</code> <code>link</code>) |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 145 | and one assembler (<code>go</code> <code>tool</code> <code>asm</code>). |
| 146 | The linker was translated automatically from the old C implementation, |
| 147 | but the assembler is a new native Go implementation discussed |
| 148 | in more detail below. |
| 149 | </p> |
| 150 | |
| 151 | <p> |
| 152 | Similar to the drop of the names <code>6g</code>, <code>8g</code>, and so on, |
| 153 | the output of the compiler and assembler are now given a plain <code>.o</code> suffix |
| 154 | rather than <code>.8</code>, <code>.6</code>, etc. |
| 155 | </p> |
| 156 | |
| 157 | |
| 158 | <h3 id="gc">Garbage collector</h3> |
| 159 | |
| 160 | <p> |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 161 | The garbage collector has been re-engineered for 1.5 as part of the development |
| 162 | outlined in the <a href="https://golang.org/s/go14gc">design document</a>. |
| 163 | Expected latencies are much lower than with the collector |
| 164 | in prior releases, through a combination of advanced algorithms, |
| 165 | better <a href="https://golang.org/s/go15gcpacing">scheduling</a> of the collector, |
| 166 | and running more of the collection in parallel with the user program. |
| 167 | The "stop the world" phase of the collector |
| 168 | will almost always be under 10 milliseconds and usually much less. |
| 169 | </p> |
| 170 | |
| 171 | <p> |
| 172 | For systems that benefit from low latency, such as user-responsive web sites, |
| 173 | the drop in expected latency with the new collector may be important. |
| 174 | </p> |
| 175 | |
| 176 | <p> |
Rob Pike | 6163cf8 | 2015-07-16 14:45:46 +1000 | [diff] [blame] | 177 | Details of the new collector were presented in a |
| 178 | <a href="https://talks.golang.org/2015/go-gc.pdf">talk</a> at GopherCon 2015. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 179 | </p> |
| 180 | |
| 181 | <h3 id="runtime">Runtime</h3> |
| 182 | |
| 183 | <p> |
| 184 | In Go 1.5, the order in which goroutines are scheduled has been changed. |
| 185 | The properties of the scheduler were never defined by the language, |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 186 | but programs that depend on the scheduling order may be broken |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 187 | by this change. |
| 188 | We have seen a few (erroneous) programs affected by this change. |
| 189 | If you have programs that implicitly depend on the scheduling |
| 190 | order, you will need to update them. |
| 191 | </p> |
| 192 | |
| 193 | <p> |
| 194 | Another potentially breaking change is that the runtime now |
| 195 | sets the default number of threads to run simultaneously, |
| 196 | defined by <code>GOMAXPROCS</code>, to the number |
| 197 | of cores available on the CPU. |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 198 | In prior releases the default was 1. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 199 | Programs that do not expect to run with multiple cores may |
| 200 | break inadvertently. |
| 201 | They can be updated by removing the restriction or by setting |
Rob Pike | 902345e | 2015-07-14 15:20:19 +1000 | [diff] [blame] | 202 | <code>GOMAXPROCS</code> explicitly. |
Ian Lance Taylor | d5f5e65 | 2015-08-03 12:35:59 -0700 | [diff] [blame] | 203 | For a more detailed discussion of this change, see |
| 204 | the <a href="https://golang.org/s/go15gomaxprocs">design document</a>. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 205 | </p> |
| 206 | |
| 207 | <h3 id="build">Build</h3> |
| 208 | |
| 209 | <p> |
| 210 | Now that the Go compiler and runtime are implemented in Go, a Go compiler |
| 211 | must be available to compile the distribution from source. |
| 212 | Thus, to build the Go core, a working Go distribution must already be in place. |
| 213 | (Go programmers who do not work on the core are unaffected by this change.) |
| 214 | Any Go 1.4 or later distribution (including <code>gccgo</code>) will serve. |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 215 | For details, see the <a href="https://golang.org/s/go15bootstrap">design document</a>. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 216 | </p> |
| 217 | |
| 218 | <h2 id="ports">Ports</h2> |
| 219 | |
| 220 | <p> |
Jonathan Rudenberg | 9e88f79 | 2015-07-14 18:53:13 -0400 | [diff] [blame] | 221 | Due mostly to the industry's move away from the 32-bit x86 architecture, |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 222 | the set of binary downloads provided is reduced in 1.5. |
| 223 | A distribution for the OS X operating system is provided only for the |
| 224 | <code>amd64</code> architecture, not <code>386</code>. |
| 225 | Similarly, the ports for Snow Leopard (Apple OS X 10.6) still work but are no |
| 226 | longer released as a download or maintained since Apple no longer maintains that version |
| 227 | of the operating system. |
| 228 | Also, the <code>dragonfly/386</code> port is no longer supported at all |
| 229 | because DragonflyBSD itself no longer supports the 32-bit 386 architecture. |
| 230 | </p> |
| 231 | |
| 232 | <p> |
| 233 | There are however several new ports available to be built from source. |
| 234 | These include <code>darwin/arm</code> and <code>darwin/arm64</code>. |
| 235 | The new port <code>linux/arm64</code> is mostly in place, but <code>cgo</code> |
| 236 | is only supported using external linking. |
| 237 | </p> |
| 238 | |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 239 | <p> |
Russ Cox | 16c3838 | 2015-08-17 21:32:40 -0400 | [diff] [blame] | 240 | Also available as experiments are <code>ppc64</code> |
| 241 | and <code>ppc64le</code> (64-bit PowerPC, big- and little-endian). |
Rob Pike | f4c775e | 2015-07-30 15:53:10 +1000 | [diff] [blame] | 242 | Both these ports support <code>cgo</code> but |
| 243 | only with internal linking. |
Rob Pike | 0908fad | 2015-07-22 11:24:27 +1000 | [diff] [blame] | 244 | </p> |
| 245 | |
| 246 | <p> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 247 | On FreeBSD, Go 1.5 requires FreeBSD 8-STABLE+ because of its new use of the <code>SYSCALL</code> instruction. |
| 248 | </p> |
| 249 | |
| 250 | <p> |
Dave Cheney | e7f4df7 | 2015-08-07 10:52:18 +1000 | [diff] [blame] | 251 | On NaCl, Go 1.5 requires SDK version pepper-41. Later pepper versions are not |
| 252 | compatible due to the removal of the sRPC subsystem from the NaCl runtime. |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 253 | </p> |
| 254 | |
David Crawshaw | ebb6783 | 2015-07-16 15:30:47 -0400 | [diff] [blame] | 255 | <p> |
| 256 | On Darwin, the use of the system X.509 certificate interface can be disabled |
| 257 | with the <code>ios</code> build tag. |
| 258 | </p> |
| 259 | |
Rob Pike | 4e0be15 | 2015-07-31 09:03:58 +1000 | [diff] [blame] | 260 | <p> |
| 261 | The Solaris port now has full support for cgo and the packages |
| 262 | <a href="/pkg/net/"><code>net</code></a> and |
| 263 | <a href="/pkg/crypto/x509/"><code>crypto/x509</code></a>, |
| 264 | as well as a number of other fixes and improvements. |
| 265 | </p> |
| 266 | |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 267 | <h2 id="tools">Tools</h2> |
Rob Pike | 1a27c07 | 2015-01-13 10:16:30 +1100 | [diff] [blame] | 268 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 269 | <h3 id="translate">Translating</h3> |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 270 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 271 | <p> |
| 272 | As part of the process to eliminate C from the tree, the compiler and |
| 273 | linker were translated from C to Go. |
| 274 | It was a genuine (machine assisted) translation, so the new programs are essentially |
| 275 | the old programs translated rather than new ones with new bugs. |
| 276 | We are confident the translation process has introduced few if any new bugs, |
| 277 | and in fact uncovered a number of previously unknown bugs, now fixed. |
| 278 | </p> |
| 279 | |
| 280 | <p> |
| 281 | The assembler is a new program, however; it is described below. |
| 282 | </p> |
| 283 | |
| 284 | <h3 id="rename">Renaming</h3> |
| 285 | |
| 286 | <p> |
| 287 | The suites of programs that were the compilers (<code>6g</code>, <code>8g</code>, etc.), |
| 288 | the assemblers (<code>6a</code>, <code>8a</code>, etc.), |
| 289 | and the linkers (<code>6l</code>, <code>8l</code>, etc.) |
| 290 | have each been consolidated into a single tool that is configured |
| 291 | by the environment variables <code>GOOS</code> and <code>GOARCH</code>. |
| 292 | The old names are gone; the new tools are available through the <code>go</code> <code>tool</code> |
| 293 | mechanism as <code>go tool compile</code>, |
| 294 | <code>go tool asm</code>, |
| 295 | <code>and go tool link</code>. |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 296 | Also, the file suffixes <code>.6</code>, <code>.8</code>, etc. for the |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 297 | intermediate object files are also gone; now they are just plain <code>.o</code> files. |
| 298 | </p> |
| 299 | |
| 300 | <p> |
| 301 | For example, to build and link a program on amd64 for Darwin |
| 302 | using the tools directly, rather than through <code>go build</code>, |
| 303 | one would run: |
| 304 | </p> |
| 305 | |
| 306 | <pre> |
| 307 | $ export GOOS=darwin GOARCH=amd64 |
| 308 | $ go tool compile program.go |
| 309 | $ go tool link program.o |
Rob Pike | d6ef6eb | 2015-06-25 14:36:49 +1000 | [diff] [blame] | 310 | </pre> |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 311 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 312 | <h3 id="moving">Moving</h3> |
| 313 | |
| 314 | <p> |
| 315 | Because the <a href="/pkg/go/types/"><code>go/types</code></a> package |
| 316 | has now moved into the main repository (see below), |
| 317 | the <a href="/cmd/vet"><code>vet</code></a> and |
| 318 | <a href="/cmd/cover"><code>cover</code></a> |
| 319 | tools have also been moved. |
| 320 | They are no longer maintained in the external <code>golang.org/x/tools</code> repository, |
| 321 | although (deprecated) source still resides there for compatibility with old releases. |
| 322 | </p> |
| 323 | |
| 324 | <h3 id="compiler">Compiler</h3> |
| 325 | |
| 326 | <p> |
| 327 | As described above, the compiler in Go 1.5 is a single Go program, |
| 328 | translated from the old C source, that replaces <code>6g</code>, <code>8g</code>, |
| 329 | and so on. |
| 330 | Its target is configured by the environment variables <code>GOOS</code> and <code>GOARCH</code>. |
| 331 | </p> |
| 332 | |
| 333 | <p> |
| 334 | The 1.5 compiler is mostly equivalent to the old, |
| 335 | but some internal details have changed. |
| 336 | One significant change is that evaluation of constants now uses |
| 337 | the <a href="/pkg/math/big/"><code>math/big</code></a> package |
| 338 | rather than a custom (and less well tested) implementation of high precision |
| 339 | arithmetic. |
| 340 | We do not expect this to affect the results. |
| 341 | </p> |
| 342 | |
| 343 | <p> |
| 344 | For the amd64 architecture only, the compiler has a new option, <code>-dynlink</code>, |
| 345 | that assists dynamic linking by supporting references to Go symbols |
| 346 | defined in external shared libraries. |
| 347 | </p> |
| 348 | |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 349 | <h3 id="assembler">Assembler</h3> |
| 350 | |
| 351 | <p> |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 352 | Like the compiler and linker, the assembler in Go 1.5 is a single program |
| 353 | that replaces the suite of assemblers (<code>6a</code>, |
| 354 | <code>8a</code>, etc.) and the environment variables |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 355 | <code>GOARCH</code> and <code>GOOS</code> |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 356 | configure the architecture and operating system. |
| 357 | Unlike the other programs, the assembler is a wholly new program |
| 358 | written in Go. |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 359 | </p> |
Rob Pike | 902345e | 2015-07-14 15:20:19 +1000 | [diff] [blame] | 360 | |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 361 | <p> |
| 362 | The new assembler is very nearly compatible with the previous |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 363 | ones, but there are a few changes that may affect some |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 364 | assembler source files. |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 365 | See the updated <a href="/doc/asm">assembler guide</a> |
| 366 | for more specific information about these changes. In summary: |
| 367 | |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 368 | </p> |
| 369 | |
| 370 | <p> |
| 371 | First, the expression evaluation used for constants is a little |
| 372 | different. |
| 373 | It now uses unsigned 64-bit arithmetic and the precedence |
| 374 | of operators (<code>+</code>, <code>-</code>, <code><<</code>, etc.) |
| 375 | comes from Go, not C. |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 376 | We expect these changes to affect very few programs but |
| 377 | manual verification may be required. |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 378 | </p> |
| 379 | |
| 380 | <p> |
Rob Pike | e71276c | 2015-07-09 10:10:12 +1000 | [diff] [blame] | 381 | Perhaps more important is that on machines where |
| 382 | <code>SP</code> or <code>PC</code> is only an alias |
| 383 | for a numbered register, |
| 384 | such as <code>R13</code> for the stack pointer and |
| 385 | <code>R15</code> for the hardware program counter |
Rob Pike | 2e6ed61 | 2015-07-09 15:06:15 +1000 | [diff] [blame] | 386 | on ARM, |
Rob Pike | e71276c | 2015-07-09 10:10:12 +1000 | [diff] [blame] | 387 | a reference to such a register that does not include a symbol |
| 388 | is now illegal. |
| 389 | For example, <code>SP</code> and <code>4(SP)</code> are |
| 390 | illegal but <code>sym+4(SP)</code> is fine. |
| 391 | On such machines, to refer to the hardware register use its |
| 392 | true <code>R</code> name. |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 393 | </p> |
| 394 | |
| 395 | <p> |
| 396 | One minor change is that some of the old assemblers |
| 397 | permitted the notation |
| 398 | </p> |
| 399 | |
| 400 | <pre> |
| 401 | constant=value |
| 402 | </pre> |
| 403 | |
| 404 | <p> |
| 405 | to define a named constant. |
| 406 | Since this is always possible to do with the traditional |
| 407 | C-like <code>#define</code> notation, which is still |
| 408 | supported (the assembler includes an implementation |
| 409 | of a simplified C preprocessor), the feature was removed. |
| 410 | </p> |
| 411 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 412 | <h3 id="link">Linker</h3> |
| 413 | |
| 414 | <p> |
| 415 | The linker in Go 1.5 is now one Go program, |
| 416 | that replaces <code>6l</code>, <code>8l</code>, etc. |
| 417 | Its operating system and instruction set are specified |
| 418 | by the environment variables <code>GOOS</code> and <code>GOARCH</code>. |
| 419 | </p> |
| 420 | |
| 421 | <p> |
Rob Pike | 9991227 | 2015-08-03 11:05:05 +1000 | [diff] [blame] | 422 | There are several other changes. |
| 423 | The most significant is the addition of a <code>-buildmode</code> option that |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 424 | expands the style of linking; it now supports |
| 425 | situations such as building shared libraries and allowing other languages |
| 426 | to call into Go libraries. |
| 427 | Some of these were outlined in a <a href="https://golang.org/s/execmodes">design document</a>. |
| 428 | For a list of the available build modes and their use, run |
| 429 | </p> |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 430 | |
| 431 | <pre> |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 432 | $ go help buildmode |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 433 | </pre> |
| 434 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 435 | <p> |
| 436 | Another minor change is that the linker no longer records build time stamps in |
| 437 | the header of Windows executables. |
| 438 | Also, although this may be fixed, Windows cgo executables are missing some |
| 439 | DWARF information. |
| 440 | </p> |
| 441 | |
Rob Pike | 9991227 | 2015-08-03 11:05:05 +1000 | [diff] [blame] | 442 | <p> |
| 443 | Finally, the <code>-X</code> flag, which takes two arguments, |
| 444 | as in |
| 445 | </p> |
| 446 | |
| 447 | <pre> |
| 448 | -X importpath.name value |
| 449 | </pre> |
| 450 | |
| 451 | <p> |
| 452 | now also accepts a more common Go flag style with a single argument |
| 453 | that is itself a <code>name=value</code> pair: |
| 454 | </p> |
| 455 | |
| 456 | <pre> |
| 457 | -X importpath.name=value |
| 458 | </pre> |
| 459 | |
| 460 | <p> |
| 461 | Although the old syntax still works, it is recommended that uses of this |
| 462 | flag in scripts and the like be updated to the new form. |
| 463 | </p> |
| 464 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 465 | <h3 id="go_command">Go command</h3> |
| 466 | |
| 467 | <p> |
| 468 | The <a href="/cmd/go"><code>go</code></a> command's basic operation |
| 469 | is unchanged, but there are a number of changes worth noting. |
| 470 | </p> |
| 471 | |
| 472 | <p> |
| 473 | The previous release introduced the idea of a directory internal to a package |
| 474 | being unimportable through the <code>go</code> command. |
| 475 | In 1.4, it was tested with the introduction of some internal elements |
| 476 | in the core repository. |
| 477 | As suggested in the <a href="https://golang.org/s/go14internal">design document</a>, |
| 478 | that change is now being made available to all repositories. |
| 479 | The rules are explained in the design document, but in summary any |
| 480 | package in or under a directory named <code>internal</code> may |
| 481 | be imported by packages rooted in the same subtree. |
| 482 | Existing packages with directory elements named <code>internal</code> may be |
| 483 | inadvertently broken by this change, which was why it was advertised |
| 484 | in the last release. |
| 485 | </p> |
| 486 | |
| 487 | <p> |
| 488 | Another change in how packages are handled is the experimental |
| 489 | addition of support for "vendoring". |
Russ Cox | aad4fe4 | 2015-07-22 11:33:42 -0400 | [diff] [blame] | 490 | For details, see the documentation for the <a href="/cmd/go/#hdr-Vendor_Directories"><code>go</code> command</a> |
| 491 | and the <a href="https://golang.org/s/go15vendor">design document</a>. |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 492 | </p> |
| 493 | |
| 494 | <p> |
| 495 | There have also been several minor changes. |
| 496 | Read the <a href="/cmd/go">documentation</a> for full details. |
| 497 | </p> |
| 498 | |
| 499 | <ul> |
| 500 | |
| 501 | <li> |
| 502 | SWIG support has been updated such that |
| 503 | <code>.swig</code> and <code>.swigcxx</code> |
| 504 | now require SWIG 3.0.6 or later. |
| 505 | </li> |
| 506 | |
| 507 | <li> |
Rob Pike | 4315662 | 2015-09-08 10:58:21 -0700 | [diff] [blame] | 508 | The <code>install</code> subcommand now removes the |
| 509 | binary created by the <code>build</code> subcommand |
| 510 | in the source directory, if present, |
| 511 | to avoid problems having two binaries present in the tree. |
| 512 | </li> |
| 513 | |
| 514 | <li> |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 515 | The <code>std</code> (standard library) wildcard package name |
| 516 | now excludes commands. |
| 517 | A new <code>cmd</code> wildcard covers the commands. |
| 518 | </li> |
| 519 | |
| 520 | <li> |
Russ Cox | 91a480c | 2015-07-14 00:34:36 -0400 | [diff] [blame] | 521 | A new <code>-asmflags</code> build option |
| 522 | sets flags to pass to the assembler. |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 523 | However, |
Russ Cox | 91a480c | 2015-07-14 00:34:36 -0400 | [diff] [blame] | 524 | the <code>-ccflags</code> build option has been dropped; |
| 525 | it was specific to the old, now deleted C compiler . |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 526 | </li> |
| 527 | |
| 528 | <li> |
Russ Cox | 91a480c | 2015-07-14 00:34:36 -0400 | [diff] [blame] | 529 | A new <code>-buildmode</code> build option |
| 530 | sets the build mode, described above. |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 531 | </li> |
| 532 | |
| 533 | <li> |
Russ Cox | 91a480c | 2015-07-14 00:34:36 -0400 | [diff] [blame] | 534 | A new <code>-pkgdir</code> build option |
| 535 | sets the location of installed package archives, |
| 536 | to help isolate custom builds. |
| 537 | </li> |
| 538 | |
| 539 | <li> |
| 540 | A new <code>-toolexec</code> build option |
| 541 | allows substitution of a different command to invoke |
| 542 | the compiler and so on. |
| 543 | This acts as a custom replacement for <code>go tool</code>. |
| 544 | </li> |
| 545 | |
| 546 | <li> |
Rob Pike | e71276c | 2015-07-09 10:10:12 +1000 | [diff] [blame] | 547 | The <code>test</code> subcommand now has a <code>-count</code> |
| 548 | flag to specify how many times to run each test and benchmark. |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 549 | The <a href="/pkg/testing/"><code>testing</code></a> package |
Rob Pike | ae4dc8f | 2015-08-20 11:46:05 +1000 | [diff] [blame] | 550 | does the work here, through the <code>-test.count</code> flag. |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 551 | </li> |
| 552 | |
| 553 | <li> |
| 554 | The <code>generate</code> subcommand has a couple of new features. |
| 555 | The <code>-run</code> option specifies a regular expression to select which directives |
| 556 | to execute; this was proposed but never implemented in 1.4. |
| 557 | The executing pattern now has access to two new environment variables: |
| 558 | <code>$GOLINE</code> returns the source line number of the directive |
| 559 | and <code>$DOLLAR</code> expands to a dollar sign. |
| 560 | </li> |
| 561 | |
Rob Pike | e71276c | 2015-07-09 10:10:12 +1000 | [diff] [blame] | 562 | <li> |
| 563 | The <code>get</code> subcommand now has a <code>-insecure</code> |
| 564 | flag that must be enabled if fetching from an insecure repository, one that |
| 565 | does not encrypt the connection. |
| 566 | </li> |
| 567 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 568 | </ul> |
| 569 | |
| 570 | <h3 id="vet_command">Go vet command</h3> |
| 571 | |
| 572 | <p> |
| 573 | The <a href="/cmd/vet"><code>go tool vet</code></a> command now does |
| 574 | more thorough validation of struct tags. |
| 575 | </p> |
| 576 | |
| 577 | <h3 id="trace_command">Trace command</h3> |
| 578 | |
Rob Pike | 6163cf8 | 2015-07-16 14:45:46 +1000 | [diff] [blame] | 579 | <p> |
| 580 | A new tool is available for dynamic execution tracing of Go programs. |
| 581 | The usage is analogous to how the test coverage tool works. |
| 582 | Generation of traces is integrated into <code>go test</code>, |
| 583 | and then a separate execution of the tracing tool itself analyzes the results: |
| 584 | </p> |
| 585 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 586 | <pre> |
Rob Pike | 6163cf8 | 2015-07-16 14:45:46 +1000 | [diff] [blame] | 587 | $ go test -trace=trace.out path/to/package |
| 588 | $ go tool trace [flags] pkg.test trace.out |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 589 | </pre> |
| 590 | |
Rob Pike | 6163cf8 | 2015-07-16 14:45:46 +1000 | [diff] [blame] | 591 | <p> |
| 592 | The flags enable the output to be displayed in a browser window. |
| 593 | For details, run <code>go tool trace -help</code>. |
| 594 | There is also a description of the tracing facility in this |
| 595 | <a href="https://talks.golang.org/2015/dynamic-tools.slide">talk</a> |
| 596 | from GopherCon 2015. |
| 597 | </p> |
| 598 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 599 | <h3 id="doc_command">Go doc command</h3> |
| 600 | |
| 601 | <p> |
| 602 | A few releases back, the <code>go doc</code> |
| 603 | command was deleted as being unnecessary. |
| 604 | One could always run "<code>godoc .</code>" instead. |
| 605 | The 1.5 release introduces a new <a href="/cmd/doc"><code>go doc</code></a> |
| 606 | command with a more convenient command-line interface than |
| 607 | <code>godoc</code>'s. |
| 608 | It is designed for command-line usage specifically, and provides a more |
| 609 | compact and focused presentation of the documentation for a package |
| 610 | or its elements, according to the invocation. |
| 611 | It also provides case-insensitive matching and |
| 612 | support for showing the documentation for unexported symbols. |
| 613 | For details run "<code>go help doc</code>". |
| 614 | </p> |
| 615 | |
| 616 | <h3 id="cgo">Cgo</h3> |
| 617 | |
| 618 | <p> |
| 619 | When parsing <code>#cgo</code> lines, |
| 620 | the invocation <code>${SRCDIR}</code> is now |
| 621 | expanded into the path to the source directory. |
| 622 | This allows options to be passed to the |
| 623 | compiler and linker that involve file paths relative to the |
| 624 | source code directory. Without the expansion the paths would be |
| 625 | invalid when the current working directory changes. |
| 626 | </p> |
| 627 | |
| 628 | <p> |
Rob Pike | 4e0be15 | 2015-07-31 09:03:58 +1000 | [diff] [blame] | 629 | Solaris now has full cgo support. |
| 630 | </p> |
| 631 | |
| 632 | <p> |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 633 | On Windows, cgo now uses external linking by default. |
| 634 | </p> |
| 635 | |
Ian Lance Taylor | a5d23fc | 2015-07-30 09:01:22 -0700 | [diff] [blame] | 636 | <p> |
| 637 | When a C struct ends with a zero-sized field, but the struct itself is |
| 638 | not zero-sized, Go code can no longer refer to the zero-sized field. |
| 639 | Any such references will have to be rewritten. |
| 640 | </p> |
| 641 | |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 642 | <h2 id="performance">Performance</h2> |
| 643 | |
| 644 | <p> |
| 645 | As always, the changes are so general and varied that precise statements |
| 646 | about performance are difficult to make. |
| 647 | The changes are even broader ranging than usual in this release, which |
| 648 | includes a new garbage collector and a conversion of the runtime to Go. |
| 649 | Some programs may run faster, some slower. |
| 650 | On average the programs in the Go 1 benchmark suite run a few percent faster in Go 1.5 |
| 651 | than they did in Go 1.4, |
| 652 | while as mentioned above the garbage collector's pauses are |
| 653 | dramatically shorter, and almost always under 10 milliseconds. |
| 654 | </p> |
| 655 | |
| 656 | <p> |
| 657 | Builds in Go 1.5 will be slower by a factor of about two. |
| 658 | The automatic translation of the compiler and linker from C to Go resulted in |
| 659 | unidiomatic Go code that performs poorly compared to well-written Go. |
| 660 | Analysis tools and refactoring helped to improve the code, but much remains to be done. |
| 661 | Further profiling and optimization will continue in Go 1.6 and future releases. |
| 662 | For more details, see these <a href="https://talks.golang.org/2015/gogo.slide">slides</a> |
| 663 | and associated <a href="https://www.youtube.com/watch?v=cF1zJYkBW4A">video</a>. |
| 664 | </p> |
| 665 | |
| 666 | <h2 id="library">Core library</h2> |
Rob Pike | 6fe9c4a | 2015-07-01 08:48:19 +1000 | [diff] [blame] | 667 | |
| 668 | <h3 id="flag">Flag</h3> |
| 669 | |
| 670 | <p> |
| 671 | The flag package's |
Rob Pike | 902345e | 2015-07-14 15:20:19 +1000 | [diff] [blame] | 672 | <a href="/pkg/flag/#PrintDefaults"><code>PrintDefaults</code></a> |
Rob Pike | 6fe9c4a | 2015-07-01 08:48:19 +1000 | [diff] [blame] | 673 | function, and method on <a href="/pkg/flag/#FlagSet"><code>FlagSet</code></a>, |
| 674 | have been modified to create nicer usage messages. |
| 675 | The format has been changed to be more human-friendly and in the usage |
| 676 | messages a word quoted with `backquotes` is taken to be the name of the |
| 677 | flag's operand to display in the usage message. |
| 678 | For instance, a flag created with the invocation, |
| 679 | </p> |
| 680 | |
| 681 | <pre> |
| 682 | cpuFlag = flag.Int("cpu", 1, "run `N` processes in parallel") |
| 683 | </pre> |
| 684 | |
| 685 | <p> |
| 686 | will show the help message, |
| 687 | </p> |
| 688 | |
| 689 | <pre> |
| 690 | -cpu N |
| 691 | run N processes in parallel (default 1) |
| 692 | </pre> |
| 693 | |
| 694 | <p> |
| 695 | Also, the default is now listed only when it is not the zero value for the type. |
| 696 | </p> |
| 697 | |
| 698 | <h3 id="math_big">Floats in math/big</h3> |
| 699 | |
| 700 | <p> |
| 701 | The <a href="/pkg/math/big/"><code>math/big</code></a> package |
| 702 | has a new, fundamental data type, |
| 703 | <a href="/pkg/math/big/#Float"><code>Float</code></a>, |
| 704 | which implements arbitrary-precision floating-point numbers. |
| 705 | A <code>Float</code> value is represented by a boolean sign, |
| 706 | a variable-length mantissa, and a 32-bit fixed-size signed exponent. |
| 707 | The precision of a <code>Float</code> (the mantissa size in bits) |
| 708 | can be specified explicitly or is otherwise determined by the first |
| 709 | operation that creates the value. |
| 710 | Once created, the size of a <code>Float</code>'s mantissa may be modified with the |
| 711 | <a href="/pkg/math/big/#Float.SetPrec"><code>SetPrec</code></a> method. |
| 712 | <code>Floats</code> support the concept of infinities, such as are created by |
| 713 | overflow, but values that would lead to the equivalent of IEEE 754 NaNs |
| 714 | trigger a panic. |
| 715 | <code>Float</code> operations support all IEEE-754 rounding modes. |
| 716 | When the precision is set to 24 (53) bits, |
| 717 | operations that stay within the range of normalized <code>float32</code> |
| 718 | (<code>float64</code>) |
| 719 | values produce the same results as the corresponding IEEE-754 |
| 720 | arithmetic on those values. |
| 721 | </p> |
| 722 | |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 723 | <h3 id="go_types">Go types</h3> |
| 724 | |
| 725 | <p> |
| 726 | The <a href="/pkg/go/types/"><code>go/types</code></a> package |
| 727 | up to now has been maintained in the <code>golang.org/x</code> |
| 728 | repository; as of Go 1.5 it has been relocated to the main repository. |
| 729 | The code at the old location is now deprecated. |
| 730 | There is also a modest API change in the package, discussed below. |
| 731 | </p> |
| 732 | |
| 733 | <p> |
| 734 | Associated with this move, the |
| 735 | <a href="/pkg/go/constant/"><code>go/constant</code></a> |
| 736 | package also moved to the main repository; |
| 737 | it was <code>golang.org/x/tools/exact</code> before. |
| 738 | The <a href="/pkg/go/importer/"><code>go/importer</code></a> package |
| 739 | also moved to the main repository, |
| 740 | as well as some tools described above. |
| 741 | </p> |
| 742 | |
| 743 | <h3 id="net">Net</h3> |
| 744 | |
| 745 | <p> |
| 746 | The DNS resolver in the net package has almost always used <code>cgo</code> to access |
| 747 | the system interface. |
| 748 | A change in Go 1.5 means that on most Unix systems DNS resolution |
| 749 | will no longer require <code>cgo</code>, which simplifies execution |
| 750 | on those platforms. |
| 751 | Now, if the system's networking configuration permits, the native Go resolver |
| 752 | will suffice. |
| 753 | The important effect of this change is that each DNS resolution occupies a goroutine |
| 754 | rather than a thread, |
| 755 | so a program with multiple outstanding DNS requests will consume fewer operating |
| 756 | system resources. |
| 757 | </p> |
| 758 | |
| 759 | <p> |
| 760 | The decision of how to run the resolver applies at run time, not build time. |
| 761 | The <code>netgo</code> build tag that has been used to enforce the use |
| 762 | of the Go resolver is no longer necessary, although it still works. |
Brad Fitzpatrick | 6031500 | 2015-07-17 09:25:45 -0700 | [diff] [blame] | 763 | A new <code>netcgo</code> build tag forces the use of the <code>cgo</code> resolver at |
| 764 | build time. |
| 765 | To force <code>cgo</code> resolution at run time set |
| 766 | <code>GODEBUG=netdns=cgo</code> in the environment. |
| 767 | More debug options are documented <a href="https://golang.org/cl/11584">here</a>. |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 768 | </p> |
| 769 | |
| 770 | <p> |
| 771 | This change applies to Unix systems only. |
| 772 | Windows, Mac OS X, and Plan 9 systems behave as before. |
| 773 | </p> |
| 774 | |
Rob Pike | 6fe9c4a | 2015-07-01 08:48:19 +1000 | [diff] [blame] | 775 | <h3 id="reflect">Reflect</h3> |
| 776 | |
| 777 | <p> |
| 778 | The <a href="/pkg/reflect/"><code>reflect</code></a> package |
| 779 | has two new functions: <a href="/pkg/reflect/#ArrayOf"><code>ArrayOf</code></a> |
| 780 | and <a href="/pkg/reflect/#FuncOf"><code>FuncOf</code></a>. |
| 781 | These functions, analogous to the extant |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 782 | <a href="/pkg/reflect/#SliceOf"><code>SliceOf</code></a> function, |
Rob Pike | 6fe9c4a | 2015-07-01 08:48:19 +1000 | [diff] [blame] | 783 | create new types at runtime to describe arrays and functions. |
| 784 | </p> |
| 785 | |
| 786 | <h3 id="hardening">Hardening</h3> |
| 787 | |
| 788 | <p> |
| 789 | Several dozen bugs were found in the standard library |
| 790 | through randomized testing with the |
| 791 | <a href="https://github.com/dvyukov/go-fuzz"><code>go-fuzz</code></a> tool. |
| 792 | Bugs were fixed in the |
| 793 | <a href="/pkg/archive/tar/"><code>archive/tar</code></a>, |
| 794 | <a href="/pkg/archive/zip/"><code>archive/zip</code></a>, |
| 795 | <a href="/pkg/compress/flate/"><code>compress/flate</code></a>, |
| 796 | <a href="/pkg/encoding/gob/"><code>encoding/gob</code></a>, |
| 797 | <a href="/pkg/fmt/"><code>fmt</code></a>, |
| 798 | <a href="/pkg/html/template/"><code>html/template</code></a>, |
| 799 | <a href="/pkg/image/gif/"><code>image/gif</code></a>, |
| 800 | <a href="/pkg/image/jpeg/"><code>image/jpeg</code></a>, |
| 801 | <a href="/pkg/image/png/"><code>image/png</code></a>, and |
| 802 | <a href="/pkg/text/template/"><code>text/template</code></a>, |
| 803 | packages. |
| 804 | The fixes harden the implementation against incorrect and malicious inputs. |
| 805 | </p> |
| 806 | |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 807 | <h3 id="minor_library_changes">Minor changes to the library</h3> |
| 808 | |
| 809 | <ul> |
| 810 | |
| 811 | <li> |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 812 | The <a href="/pkg/archive/zip/"><code>archive/zip</code></a> package's |
| 813 | <a href="/pkg/archive/zip/#Writer"><code>Writer</code></a> type now has a |
| 814 | <a href="/pkg/archive/zip/#Writer.SetOffset"><code>SetOffset</code></a> |
| 815 | method to specify the location within the output stream at which to write the archive. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 816 | </li> |
| 817 | |
| 818 | <li> |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 819 | The <a href="/pkg/bufio/#Reader"><code>Reader</code></a> in the |
| 820 | <a href="/pkg/bufio/"><code>bufio</code></a> package now has a |
| 821 | <a href="/pkg/bufio/#Reader.Discard"><code>Discard</code></a> |
| 822 | method to discard data from the input. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 823 | </li> |
| 824 | |
| 825 | <li> |
Andrew Gerrand | abe70af | 2015-08-07 04:16:43 +0000 | [diff] [blame] | 826 | In the <a href="/pkg/bytes/"><code>bytes</code></a> package, |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 827 | the <a href="/pkg/bytes/#Buffer"><code>Buffer</code></a> type |
| 828 | now has a <a href="/pkg/bytes/#Buffer.Cap"><code>Cap</code></a> method |
| 829 | that reports the number of bytes allocated within the buffer. |
Brad Fitzpatrick | aee4f42 | 2015-07-20 19:46:12 -0700 | [diff] [blame] | 830 | Similarly, in both the <a href="/pkg/bytes/"><code>bytes</code></a> |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 831 | and <a href="/pkg/strings/"><code>strings</code></a> packages, |
| 832 | the <a href="/pkg/bytes/#Reader"><code>Reader</code></a> |
| 833 | type now has a <a href="/pkg/bytes/#Reader.Size"><code>Size</code></a> |
| 834 | method that reports the original length of the underlying slice or string. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 835 | </li> |
| 836 | |
| 837 | <li> |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 838 | Both the <a href="/pkg/bytes/"><code>bytes</code></a> and |
| 839 | <a href="/pkg/strings/"><code>strings</code></a> packages |
| 840 | also now have a <a href="/pkg/bytes/#LastIndexByte"><code>LastIndexByte</code></a> |
| 841 | function that locates the rightmost byte with that value in the argument. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 842 | </li> |
| 843 | |
| 844 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 845 | The <a href="/pkg/crypto/"><code>crypto</code></a> package |
| 846 | has a new interface, <a href="/pkg/crypto/#Decrypter"><code>Decrypter</code></a>, |
| 847 | that abstracts the behavior of a private key used in asymmetric decryption. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 848 | </li> |
| 849 | |
| 850 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 851 | In the <a href="/pkg/crypto/cipher/"><code>crypto/cipher</code></a> package, |
| 852 | the documentation for the <a href="/pkg/crypto/cipher/#Stream"><code>Stream</code></a> |
| 853 | interface has been clarified regarding the behavior when the source and destination are |
| 854 | different lengths. |
| 855 | If the destination is shorter than the source, the method will panic. |
| 856 | This is not a change in the implementation, only the documentation. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 857 | </li> |
| 858 | |
| 859 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 860 | Also in the <a href="/pkg/crypto/cipher/"><code>crypto/cipher</code></a> package, |
| 861 | there is now support for nonce lengths other than 96 bytes in AES's Galois/Counter mode (GCM), |
| 862 | which some protocols require. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 863 | </li> |
| 864 | |
| 865 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 866 | In the <a href="/pkg/crypto/elliptic/"><code>crypto/elliptic</code></a> package, |
| 867 | there is now a <code>Name</code> field in the |
| 868 | <a href="/pkg/crypto/elliptic/#CurveParams"><code>CurveParams</code></a> struct, |
| 869 | and the curves implemented in the package have been given names. |
| 870 | These names provide a safer way to select a curve, as opposed to |
| 871 | selecting its bit size, for cryptographic systems that are curve-dependent. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 872 | </li> |
| 873 | |
| 874 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 875 | Also in the <a href="/pkg/crypto/elliptic/"><code>crypto/elliptic</code></a> package, |
| 876 | the <a href="/pkg/crypto/elliptic/#Unmarshal"><code>Unmarshal</code></a> function |
| 877 | now verifies that the point is actually on the curve. |
| 878 | (If it is not, the function returns nils). |
| 879 | This change guards against certain attacks. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 880 | </li> |
| 881 | |
| 882 | <li> |
Brad Fitzpatrick | 1b5eaa4 | 2015-07-20 15:14:01 -0700 | [diff] [blame] | 883 | The <a href="/pkg/crypto/sha512/"><code>crypto/sha512</code></a> |
| 884 | package now has support for the two truncated versions of |
| 885 | the SHA-512 hash algorithm, SHA-512/224 and SHA-512/256. |
| 886 | </li> |
| 887 | |
| 888 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 889 | The <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package |
Jonathan Rudenberg | aed74b9 | 2015-07-14 19:16:01 -0400 | [diff] [blame] | 890 | minimum protocol version now defaults to TLS 1.0. |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 891 | The old default, SSLv3, is still available through <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> if needed. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 892 | </li> |
| 893 | |
| 894 | <li> |
Jonathan Rudenberg | aed74b9 | 2015-07-14 19:16:01 -0400 | [diff] [blame] | 895 | The <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 896 | now supports Signed Certificate Timestamps (SCTs) as specified in RFC 6962. |
| 897 | The server serves them if they are listed in the |
| 898 | <a href="/pkg/crypto/tls/#Certificate"><code>Certificate</code></a> struct, |
Rob Pike | ef37184 | 2015-07-06 09:01:32 +1000 | [diff] [blame] | 899 | and the client requests them and exposes them, if present, |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 900 | in its <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a> struct. |
Jonathan Rudenberg | aed74b9 | 2015-07-14 19:16:01 -0400 | [diff] [blame] | 901 | |
| 902 | <li> |
| 903 | The stapled OCSP response to a <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> client connection, |
| 904 | previously only available via the |
| 905 | <a href="/pkg/crypto/tls/#Conn.OCSPResponse"><code>OCSPResponse</code></a> method, |
| 906 | is now exposed in the <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a> struct. |
| 907 | </li> |
| 908 | |
| 909 | <li> |
| 910 | The <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> server implementation |
| 911 | will now always call the |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 912 | <code>GetCertificate</code> function in |
| 913 | the <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> struct |
| 914 | to select a certificate for the connection when none is supplied. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 915 | </li> |
| 916 | |
| 917 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 918 | Finally, the session ticket keys in the |
| 919 | <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package |
Jonathan Rudenberg | aed74b9 | 2015-07-14 19:16:01 -0400 | [diff] [blame] | 920 | can now be changed while the server is running. |
Rob Pike | 902345e | 2015-07-14 15:20:19 +1000 | [diff] [blame] | 921 | This is done through the new |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 922 | <a href="/pkg/crypto/tls/#Config.SetSessionTicketKeys"><code>SetSessionTicketKeys</code></a> |
| 923 | method of the |
| 924 | <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> type. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 925 | </li> |
| 926 | |
| 927 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 928 | In the <a href="/pkg/crypto/x509/"><code>crypto/x509</code></a> package, |
| 929 | wildcards are now accepted only in the leftmost label as defined in |
| 930 | <a href="https://tools.ietf.org/html/rfc6125#section-6.4.3">the specification</a>. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 931 | </li> |
| 932 | |
| 933 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 934 | Also in the <a href="/pkg/crypto/x509/"><code>crypto/x509</code></a> package, |
| 935 | the handling of unknown critical extensions has been changed. |
| 936 | They used to cause parse errors but now they are parsed and caused errors only |
| 937 | in <a href="/pkg/crypto/x509/#Certificate.Verify"><code>Verify</code></a>. |
| 938 | The new field <code>UnhandledCriticalExtensions</code> of |
| 939 | <a href="/pkg/crypto/x509/#Certificate"><code>Certificate</code></a> records these extensions. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 940 | </li> |
| 941 | |
| 942 | <li> |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 943 | The <a href="/pkg/database/sql/#DB"><code>DB</code></a> type of the |
| 944 | <a href="/pkg/database/sql/"><code>database/sql</code></a> package |
| 945 | now has a <a href="/pkg/database/sql/#DB.Stats"><code>Stats</code></a> method |
| 946 | to retrieve database statistics. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 947 | </li> |
| 948 | |
| 949 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 950 | The <a href="/pkg/debug/dwarf/"><code>debug/dwarf</code></a> |
| 951 | package has extensive additions to better support DWARF version 4. |
| 952 | See for example the definition of the new type |
| 953 | <a href="/pkg/debug/dwarf/#Class"><code>Class</code></a>. |
| 954 | </li> |
| 955 | |
| 956 | <li> |
Austin Clements | 43a404c | 2015-08-04 15:57:07 -0400 | [diff] [blame] | 957 | The <a href="/pkg/debug/dwarf/"><code>debug/dwarf</code></a> package |
| 958 | also now supports decoding of DWARF line tables. |
| 959 | </li> |
| 960 | |
| 961 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 962 | The <a href="/pkg/debug/elf/"><code>debug/elf</code></a> |
Russ Cox | 16c3838 | 2015-08-17 21:32:40 -0400 | [diff] [blame] | 963 | package now has support for the 64-bit PowerPC architecture. |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 964 | </li> |
| 965 | |
| 966 | <li> |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 967 | The <a href="/pkg/encoding/base64/"><code>encoding/base64</code></a> package |
| 968 | now supports unpadded encodings through two new encoding variables, |
| 969 | <a href="/pkg/encoding/base64/#RawStdEncoding"><code>RawStdEncoding</code></a> and |
| 970 | <a href="/pkg/encoding/base64/#RawURLEncoding"><code>RawURLEncoding</code></a>. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 971 | </li> |
| 972 | |
| 973 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 974 | The <a href="/pkg/encoding/json/"><code>encoding/json</code></a> package |
| 975 | now returns an <a href="/pkg/encoding/json/#UnmarshalTypeError"><code>UnmarshalTypeError</code></a> |
| 976 | if a JSON value is not appropriate for the target variable or component |
| 977 | to which it is being unmarshaled. |
| 978 | </li> |
| 979 | |
| 980 | <li> |
Rob Pike | ff99194 | 2015-07-29 09:43:32 +1000 | [diff] [blame] | 981 | The <code>encoding/json</code>'s |
| 982 | <a href="/pkg/encoding/json/#Decoder"><code>Decoder</code></a> |
| 983 | type has a new method that provides a streaming interface for decoding |
| 984 | a JSON document: |
| 985 | <a href="/pkg/encoding/json/#Decoder.Token"><code>Token</code></a>. |
| 986 | It also interoperates with the existing functionality of <code>Decode</code>, |
| 987 | which will continue a decode operation already started with <code>Decoder.Token</code>. |
| 988 | </li> |
| 989 | |
| 990 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 991 | The <a href="/pkg/flag/"><code>flag</code></a> package |
| 992 | has a new function, <a href="/pkg/flag/#UnquoteUsage"><code>UnquoteUsage</code></a>, |
| 993 | to assist in the creation of usage messages using the new convention |
| 994 | described above. |
| 995 | </li> |
| 996 | |
| 997 | <li> |
Jonathan Rudenberg | f4b4c88 | 2015-07-14 19:22:24 -0400 | [diff] [blame] | 998 | In the <a href="/pkg/fmt/"><code>fmt</code></a> package, |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 999 | a value of type <a href="/pkg/reflect/#Value"><code>Value</code></a> now |
| 1000 | prints what it holds, rather than use the <code>reflect.Value</code>'s <code>Stringer</code> |
| 1001 | method, which produces things like <code><int Value></code>. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1002 | </li> |
| 1003 | |
| 1004 | <li> |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 1005 | The <a href="/pkg/ast/#EmptyStmt"><code>EmptyStmt</code></a> type |
| 1006 | in the <a href="/pkg/go/ast/"><code>go/ast</code></a> package now |
| 1007 | has a boolean <code>Implicit</code> field that records whether the |
| 1008 | semicolon was implicitly added or was present in the source. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1009 | </li> |
| 1010 | |
| 1011 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1012 | For forward compatibility the <a href="/pkg/go/build/"><code>go/build</code></a> package |
| 1013 | reserves <code>GOARCH</code> values for a number of architectures that Go might support one day. |
| 1014 | This is not a promise that it will. |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1015 | Also, the <a href="/pkg/go/build/#Package"><code>Package</code></a> struct |
| 1016 | now has a <code>PkgTargetRoot</code> field that stores the |
| 1017 | architecture-dependent root directory in which to install, if known. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1018 | </li> |
| 1019 | |
| 1020 | <li> |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1021 | The (newly migrated) <a href="/pkg/go/types/"><code>go/types</code></a> |
| 1022 | package allows one to control the prefix attached to package-level names using |
| 1023 | the new <a href="/pkg/go/types/#Qualifier"><code>Qualifier</code></a> |
| 1024 | function type as an argument to several functions. This is an API change for |
| 1025 | the package, but since it is new to the core, it is not breaking the Go 1 compatibility |
| 1026 | rules since code that uses the package must explicitly ask for it at its new location. |
Rob Pike | 6163cf8 | 2015-07-16 14:45:46 +1000 | [diff] [blame] | 1027 | To update, run |
| 1028 | <a href="https://golang.org/cmd/go/#hdr-Run_go_tool_fix_on_packages"><code>go fix</code></a> on your package. |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1029 | </li> |
| 1030 | |
| 1031 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1032 | In the <a href="/pkg/image/"><code>image</code></a> package, |
| 1033 | the <a href="/pkg/image/#Rectangle"><code>Rectangle</code></a> type |
| 1034 | now implements the <a href="/pkg/image/#Image"><code>Image</code></a> interface, |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 1035 | so a <code>Rectangle</code> can serve as a mask when drawing. |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1036 | </li> |
| 1037 | |
| 1038 | <li> |
| 1039 | Also in the <a href="/pkg/image/"><code>image</code></a> package, |
| 1040 | to assist in the handling of some JPEG images, |
| 1041 | there is now support for 4:1:1 and 4:1:0 YCbCr subsampling and basic |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 1042 | CMYK support, represented by the new <code>image.CMYK</code> struct. |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1043 | </li> |
| 1044 | |
| 1045 | <li> |
| 1046 | The <a href="/pkg/image/color/"><code>image/color</code></a> package |
| 1047 | adds basic CMYK support, through the new |
| 1048 | <a href="/pkg/image/color/#CMYK"><code>CMYK</code></a> struct, |
| 1049 | the <a href="/pkg/image/color/#CMYKModel"><code>CMYKModel</code></a> color model, and the |
| 1050 | <a href="/pkg/image/color/#CMYKToRGB"><code>CMYKToRGB</code></a> function, as |
| 1051 | needed by some JPEG images. |
| 1052 | </li> |
| 1053 | |
| 1054 | <li> |
Rob Pike | 902345e | 2015-07-14 15:20:19 +1000 | [diff] [blame] | 1055 | Also in the <a href="/pkg/image/color/"><code>image/color</code></a> package, |
| 1056 | the conversion of a <a href="/pkg/image/color/#YCbCr"><code>YCbCr</code></a> |
| 1057 | value to <code>RGBA</code> has become more precise. |
| 1058 | Previously, the low 8 bits were just an echo of the high 8 bits; |
| 1059 | now they contain more accurate information. |
| 1060 | Because of the echo property of the old code, the operation |
Ian Lance Taylor | 443ec4f | 2015-07-14 08:14:03 -0700 | [diff] [blame] | 1061 | <code>uint8(r)</code> to extract an 8-bit red value worked, but is incorrect. |
Rob Pike | 902345e | 2015-07-14 15:20:19 +1000 | [diff] [blame] | 1062 | In Go 1.5, that operation may yield a different value. |
| 1063 | The correct code is, and always was, to select the high 8 bits: |
| 1064 | <code>uint8(r>>8)</code>. |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 1065 | Incidentally, the <code>image/draw</code> package |
Rob Pike | 902345e | 2015-07-14 15:20:19 +1000 | [diff] [blame] | 1066 | provides better support for such conversions; see |
| 1067 | <a href="https://blog.golang.org/go-imagedraw-package">this blog post</a> |
| 1068 | for more information. |
| 1069 | </li> |
| 1070 | |
| 1071 | <li> |
| 1072 | Finally, as of Go 1.5 the closest match check in |
| 1073 | <a href="/pkg/image/color/#Palette.Index"><code>Index</code></a> |
| 1074 | now honors the alpha channel. |
| 1075 | </li> |
| 1076 | |
| 1077 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1078 | The <a href="/pkg/image/gif/"><code>image/gif</code></a> package |
| 1079 | includes a couple of generalizations. |
| 1080 | A multiple-frame GIF file can now have an overall bounds different |
| 1081 | from all the contained single frames' bounds. |
| 1082 | Also, the <a href="/pkg/image/gif/#GIF"><code>GIF</code></a> struct |
| 1083 | now has a <code>Disposal</code> field |
| 1084 | that specifies the disposal method for each frame. |
| 1085 | </li> |
| 1086 | |
| 1087 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1088 | The <a href="/pkg/io/"><code>io</code></a> package |
| 1089 | adds a <a href="/pkg/io/#CopyBuffer"><code>CopyBuffer</code></a> function |
| 1090 | that is like <a href="/pkg/io/#Copy"><code>Copy</code></a> but |
| 1091 | uses a caller-provided buffer, permitting control of allocation and buffer size. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1092 | </li> |
| 1093 | |
| 1094 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1095 | The <a href="/pkg/log/"><code>log</code></a> package |
| 1096 | has a new <a href="/pkg/log/#LUTC"><code>LUTC</code></a> flag |
| 1097 | that causes time stamps to be printed in the UTC time zone. |
Ian Lance Taylor | d7aae33 | 2015-08-16 12:20:31 -0700 | [diff] [blame] | 1098 | It also adds a <a href="/pkg/log/#Logger.SetOutput"><code>SetOutput</code></a> method |
| 1099 | for user-created loggers. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1100 | </li> |
| 1101 | |
| 1102 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1103 | In Go 1.4, <a href="/pkg/math/#Max"><code>Max</code></a> was not detecting all possible NaN bit patterns. |
| 1104 | This is fixed in Go 1.5, so programs that use <code>math.Max</code> on data including NaNs may behave differently, |
| 1105 | but now correctly according to the IEEE754 definition of NaNs. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1106 | </li> |
| 1107 | |
| 1108 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1109 | The <a href="/pkg/math/big/"><code>math/big</code></a> package |
| 1110 | adds a new <a href="/pkg/math/big/#Jacobi"><code>Jacobi</code></a> |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 1111 | function for integers and a new |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1112 | <a href="/pkg/math/big/#Int.ModSqrt"><code>ModSqrt</code></a> |
| 1113 | method for the <a href="/pkg/math/big/#Int"><code>Int</code></a> type. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1114 | </li> |
| 1115 | |
| 1116 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1117 | The mime package |
| 1118 | adds a new <a href="/pkg/mime/#WordDecoder"><code>WordDecoder</code></a> type |
| 1119 | to decode MIME headers containing RFC 204-encoded words. |
| 1120 | It also provides <a href="/pkg/mime/#BEncoding"><code>BEncoding</code></a> and |
| 1121 | <a href="/pkg/mime/#QEncoding"><code>QEncoding</code></a> |
| 1122 | as implementations of the encoding schemes of RFC 2045 and RFC 2047. |
| 1123 | </li> |
| 1124 | |
| 1125 | <li> |
| 1126 | The <a href="/pkg/mime/"><code>mime</code></a> package also adds an |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 1127 | <a href="/pkg/mime/#ExtensionsByType"><code>ExtensionsByType</code></a> |
| 1128 | function that returns the MIME extensions know to be associated with a given MIME type. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1129 | </li> |
| 1130 | |
| 1131 | <li> |
Rob Pike | 6fe9c4a | 2015-07-01 08:48:19 +1000 | [diff] [blame] | 1132 | There is a new <a href="/pkg/mime/quotedprintable/"><code>mime/quotedprintable</code></a> |
| 1133 | package that implements the quoted-printable encoding defined by RFC 2045. |
| 1134 | </li> |
| 1135 | |
| 1136 | <li> |
Paul Marks | abf943a | 2015-07-17 14:23:26 -0700 | [diff] [blame] | 1137 | The <a href="/pkg/net/"><code>net</code></a> package will now |
| 1138 | <a href="/pkg/net/#Dial"><code>Dial</code></a> hostnames by trying each |
| 1139 | IP address in order until one succeeds. |
| 1140 | The <code><a href="/pkg/net/#Dialer">Dialer</a>.DualStack</code> |
| 1141 | mode now implements Happy Eyeballs |
| 1142 | (<a href="https://tools.ietf.org/html/rfc6555">RFC 6555</a>) by giving the |
| 1143 | first address family a 300ms head start; this value can be overridden by |
| 1144 | the new <code>Dialer.FallbackDelay</code>. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1145 | </li> |
| 1146 | |
| 1147 | <li> |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1148 | A number of inconsistencies in the types returned by errors in the |
| 1149 | <a href="/pkg/net/"><code>net</code></a> package have been |
| 1150 | tidied up. |
| 1151 | Most now return an |
| 1152 | <a href="/pkg/net/#OpError"><code>OpError</code></a> value |
| 1153 | with more information than before. |
| 1154 | Also, the <a href="/pkg/net/#OpError"><code>OpError</code></a> |
| 1155 | type now includes a <code>Source</code> field that holds the local |
| 1156 | network address. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1157 | </li> |
| 1158 | |
| 1159 | <li> |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1160 | The <a href="/pkg/net/http/"><code>net/http</code></a> package now |
| 1161 | has support for setting trailers from a server <a href="/pkg/net/http/#Handler"><code>Handler</code></a>. |
| 1162 | For details, see the documentation for |
| 1163 | <a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1164 | </li> |
| 1165 | |
| 1166 | <li> |
Brad Fitzpatrick | e28ff1f | 2015-07-20 12:30:06 -0700 | [diff] [blame] | 1167 | There is a new method to cancel a <a href="/pkg/net/http/"><code>net/http</code></a> |
| 1168 | <code>Request</code> by setting the new |
| 1169 | <a href="/pkg/net/http/#Request"><code>Request.Cancel</code></a> |
| 1170 | field. |
| 1171 | It is supported by <code>http.Transport</code>. |
| 1172 | The <code>Cancel</code> field's type is compatible with the |
| 1173 | <a href="https://godoc.org/golang.org/x/net/context"><code>context.Context.Done</code></a> |
| 1174 | return value. |
| 1175 | </li> |
| 1176 | |
| 1177 | <li> |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1178 | Also in the <a href="/pkg/net/http/"><code>net/http</code></a> package, |
| 1179 | there is code to ignore the zero <a href="/pkg/time/#Time"><code>Time</code></a> value |
| 1180 | in the <a href="/pkg/net/#ServeContent"><code>ServeContent</code></a> function. |
| 1181 | As of Go 1.5, it now also ignores a time value equal to the Unix epoch. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1182 | </li> |
| 1183 | |
| 1184 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1185 | The <a href="/pkg/net/http/fcgi/"><code>net/http/fcgi</code></a> package |
| 1186 | exports two new errors, |
| 1187 | <a href="/pkg/net/http/fcgi/#ErrConnClosed"><code>ErrConnClosed</code></a> and |
| 1188 | <a href="/pkg/net/http/fcgi/#ErrRequestAborted"><code>ErrRequestAborted</code></a>, |
| 1189 | to report the corresponding error conditions. |
| 1190 | </li> |
| 1191 | |
| 1192 | <li> |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1193 | The <a href="/pkg/net/http/cgi/"><code>net/http/cgi</code></a> package |
| 1194 | had a bug that mishandled the values of the environment variables |
Mikio Hara | 91e3b35 | 2015-08-06 11:18:27 +0900 | [diff] [blame] | 1195 | <code>REMOTE_ADDR</code> and <code>REMOTE_HOST</code>. |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1196 | This has been fixed. |
| 1197 | Also, starting with Go 1.5 the package sets the <code>REMOTE_PORT</code> |
| 1198 | variable. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1199 | </li> |
| 1200 | |
| 1201 | <li> |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1202 | The <a href="/pkg/net/mail/"><code>net/mail</code></a> package |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 1203 | adds an <a href="/pkg/net/mail/#AddressParser"><code>AddressParser</code></a> |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1204 | type that can parse mail addresses. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1205 | </li> |
| 1206 | |
| 1207 | <li> |
Rob Pike | cd2e2f6 | 2015-07-01 15:49:40 +1000 | [diff] [blame] | 1208 | The <a href="/pkg/net/smtp/"><code>net/smtp</code></a> package |
| 1209 | now has a <a href="/pkg/net/smtp/#Client.TLSConnectionState"><code>TLSConnectionState</code></a> |
| 1210 | accessor to the <a href="/pkg/net/smtp/#Client"><code>Client</code></a> |
| 1211 | type that returns the client's TLS state. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1212 | </li> |
| 1213 | |
| 1214 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1215 | The <a href="/pkg/os/"><code>os</code></a> package |
| 1216 | has a new <a href="/pkg/os/#LookupEnv"><code>LookupEnv</code></a> function |
| 1217 | that is similar to <a href="/pkg/os/#Getenv"><code>Getenv</code></a> |
| 1218 | but can distinguish between an empty environment variable and a missing one. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1219 | </li> |
| 1220 | |
| 1221 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1222 | The <a href="/pkg/os/signal/"><code>os/signal</code></a> package |
| 1223 | adds new <a href="/pkg/os/signal/#Ignore"><code>Ignore</code></a> and |
| 1224 | <a href="/pkg/os/signal/#Reset"><code>Reset</code></a> functions. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1225 | </li> |
| 1226 | |
| 1227 | <li> |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1228 | The <a href="/pkg/runtime/"><code>runtime</code></a>, |
Russ Cox | 1579822 | 2015-08-05 10:20:02 -0400 | [diff] [blame] | 1229 | <a href="/pkg/runtime/trace/"><code>runtime/trace</code></a>, |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1230 | and <a href="/pkg/net/http/pprof/"><code>net/http/pprof</code></a> packages |
| 1231 | each have new functions to support the tracing facilities described above: |
| 1232 | <a href="/pkg/runtime/#ReadTrace"><code>ReadTrace</code></a>, |
| 1233 | <a href="/pkg/runtime/#StartTrace"><code>StartTrace</code></a>, |
| 1234 | <a href="/pkg/runtime/#StopTrace"><code>StopTrace</code></a>, |
Dmitry Vyukov | de641ef | 2015-08-04 09:11:06 +0200 | [diff] [blame] | 1235 | <a href="/pkg/runtime/trace/#Start"><code>Start</code></a>, |
| 1236 | <a href="/pkg/runtime/trace/#Stop"><code>Stop</code></a>, and |
Rob Pike | 09b5463 | 2015-07-02 12:56:51 +1000 | [diff] [blame] | 1237 | <a href="/pkg/net/http/pprof/#Trace"><code>Trace</code></a>. |
| 1238 | See the respective documentation for details. |
| 1239 | </li> |
| 1240 | |
| 1241 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1242 | The <a href="/pkg/runtime/pprof/"><code>runtime/pprof</code></a> package |
| 1243 | by default now includes overall memory statistics in all memory profiles. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1244 | </li> |
| 1245 | |
| 1246 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1247 | The <a href="/pkg/strings/"><code>strings</code></a> package |
| 1248 | has a new <a href="/pkg/strings/#Compare"><code>Compare</code></a> function. |
| 1249 | This is present to provide symmetry with the <a href="/pkg/bytes/"><code>bytes</code></a> package |
| 1250 | but is otherwise unnecessary as strings support comparison natively. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1251 | </li> |
| 1252 | |
| 1253 | <li> |
Russ Cox | 4b145d4 | 2015-08-06 16:05:56 -0400 | [diff] [blame] | 1254 | The <a href="/pkg/sync/#WaitGroup"><code>WaitGroup</code></a> implementation in |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 1255 | package <a href="/pkg/sync/"><code>sync</code></a> |
| 1256 | now diagnoses code that races a call to <a href="/pkg/sync/#WaitGroup.Add"><code>Add</code></a> |
| 1257 | against a return from <a href="/pkg/sync/#WaitGroup.Wait"><code>Wait</code></a>. |
Russ Cox | 4b145d4 | 2015-08-06 16:05:56 -0400 | [diff] [blame] | 1258 | If it detects this condition, the implementation panics. |
Rob Pike | c418fe7 | 2015-06-29 19:51:56 +1000 | [diff] [blame] | 1259 | </li> |
| 1260 | |
| 1261 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1262 | In the <a href="/pkg/syscall/"><code>syscall</code></a> package, |
| 1263 | the Linux <code>SysProcAttr</code> struct now has a |
| 1264 | <code>GidMappingsEnableSetgroups</code> field, made necessary |
| 1265 | by security changes in Linux 3.19. |
| 1266 | On all Unix systems, the struct also has new <code>Foreground</code> and <code>Pgid</code> fields |
| 1267 | to provide more control when exec'ing. |
| 1268 | On Darwin, there is now a <code>Syscall9</code> function |
| 1269 | to support calls with too many arguments. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1270 | </li> |
| 1271 | |
| 1272 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1273 | The <a href="/pkg/testing/quick/"><code>testing/quick</code></a> will now |
| 1274 | generate <code>nil</code> values for pointer types, |
| 1275 | making it possible to use with recursive data structures. |
| 1276 | Also, the package now supports generation of array types. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1277 | </li> |
| 1278 | |
| 1279 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1280 | In the <a href="/pkg/text/template/"><code>text/template</code></a> and |
| 1281 | <a href="/pkg/html/template/"><code>html/template</code></a> packages, |
| 1282 | integer constants too large to be represented as a Go integer now trigger a |
| 1283 | parse error. Before, they were silently converted to floating point, losing |
| 1284 | precision. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1285 | </li> |
| 1286 | |
| 1287 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1288 | Also in the <a href="/pkg/text/template/"><code>text/template</code></a> and |
| 1289 | <a href="/pkg/html/template/"><code>html/template</code></a> packages, |
Rob Pike | 54eb9ef | 2015-08-19 13:44:33 +1000 | [diff] [blame] | 1290 | a new <a href="/pkg/text/template/#Template.Option"><code>Option</code></a> method |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1291 | allows customization of the behavior of the template during execution. |
| 1292 | The sole implemented option allows control over how a missing key is |
| 1293 | handled when indexing a map. |
| 1294 | The default, which can now be overridden, is as before: to continue with an invalid value. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1295 | </li> |
| 1296 | |
| 1297 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1298 | The <a href="/pkg/time/"><code>time</code></a> package's |
| 1299 | <code>Time</code> type has a new method |
Rob Pike | 902345e | 2015-07-14 15:20:19 +1000 | [diff] [blame] | 1300 | <a href="/pkg/time/#Time.AppendFormat"><code>AppendFormat</code></a>, |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1301 | which can be used to avoid allocation when printing a time value. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1302 | </li> |
| 1303 | |
| 1304 | <li> |
Rob Pike | 0ea3f58 | 2015-06-26 11:52:21 +1000 | [diff] [blame] | 1305 | The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated |
| 1306 | support throughout the system has been upgraded from version 7.0 to |
| 1307 | <a href="http://www.unicode.org/versions/Unicode8.0.0/">Unicode 8.0</a>. |
Rob Pike | 751eef8 | 2015-06-25 16:20:27 +1000 | [diff] [blame] | 1308 | </li> |
| 1309 | |
| 1310 | </ul> |