|
| 1 | +Version 0.8 (October 2013) |
| 2 | +-------------------------- |
| 3 | + |
| 4 | + * ~2100 changes, numerous bugfixes |
| 5 | + |
| 6 | + * Language |
| 7 | + * The `for` loop syntax has changed to work with the `Iterator` trait. |
| 8 | + * At long last, unwinding works on Windows. |
| 9 | + * Default methods definitely mostly work. |
| 10 | + * Many trait inheritance bugs fixed. |
| 11 | + * Owned and borrowed trait objects work more reliably. |
| 12 | + * `copy` is no longer a keyword. It has been replaced by the `Clone` trait. |
| 13 | + * rustc no longer emits code for the `debug!` macro unless it is passed |
| 14 | + `--cfg debug` |
| 15 | + * mod.rs is now "blessed". When loading `mod foo;`, rustc will now look |
| 16 | + for foo.rs, then foo/mod.rs, and will generate an error when both are |
| 17 | + present. |
| 18 | + * Strings no longer contain trailing nulls. The new `std::c_str` module |
| 19 | + provides new mechanisms for converting to C strings. |
| 20 | + * The type of foreign functions is now `extern "C" fn` instead of `*u8'. |
| 21 | + * The FFI has been overhauled such that foreign functions are called directly, |
| 22 | + instead of through a stack-switching wrapper. |
| 23 | + * Calling a foreign function must be done through a Rust function with the |
| 24 | + `#[fixed_stack_segment]` attribute. |
| 25 | + * The `externfn!` macro can be used to declare both a foreign function and |
| 26 | + a `#[fixed_stack_segment]` wrapper at once. |
| 27 | + * `pub` and `priv` modifiers on `extern` blocks are no longer parsed. |
| 28 | + * `unsafe` is no longer allowed on extern fns - they are all unsafe. |
| 29 | + * `priv` is disallowed everywhere except for struct fields and enum variants. |
| 30 | + * `&T` (besides `&'static T`) is no longer allowed in `@T`. |
| 31 | + * `ref` bindings in irrefutable patterns work correctly now. |
| 32 | + * `char` is now prevented from containing invalid code points. |
| 33 | + * Casting to `bool` is no longer allowed. |
| 34 | + * `yield` is a reserved keyword. |
| 35 | + * `typeof` is a reserved keyword. |
| 36 | + * Crates may be imported by URL with `extern mod foo = "url";`. |
| 37 | + * Explicit enum discriminants may be given as uints as in `enum E { V = 0u }` |
| 38 | + * Static vectors can be initialized with repeating elements, |
| 39 | + e.g. `static foo: [u8, .. 100]: [0, .. 100];`. |
| 40 | + * Static structs can be initialized with functional record update, |
| 41 | + e.g. `static foo: Foo = Foo { a: 5, .. bar };`. |
| 42 | + * `cfg!` can be used to conditionally execute code based on the crate |
| 43 | + configuration, similarly to `#[cfg(...)]`. |
| 44 | + * The `unnecessary_qualification` lint detects unneeded module |
| 45 | + prefixes (default: allow). |
| 46 | + * Arithmetic operations have been implemented on the SIMD types in |
| 47 | + `std::unstable::simd`. |
| 48 | + * Exchange allocation headers were removed, reducing memory usage. |
| 49 | + * `format!` implements a completely new, extensible, and higher-performance |
| 50 | + string formatting system. It will replace `fmt!`. |
| 51 | + * `print!` and `println!` write formatted strings (using the `format!` |
| 52 | + extension) to stdout. |
| 53 | + * `write!` and `writeln!` write formatted strings (using the `format!` |
| 54 | + extension) to the new Writers in `std::rt::io`. |
| 55 | + * The library section in which a function or static is placed may |
| 56 | + be specified with `#[link_section = "..."]`. |
| 57 | + * The `proto!` syntax extension for defining bounded message protocols |
| 58 | + was removed. |
| 59 | + * `macro_rules!` is hygenic for `let` declarations. |
| 60 | + * The `#[export_name]` attribute specifies the name of a symbol. |
| 61 | + * `unreachable!` can be used to indicate unreachable code, and fails |
| 62 | + if executed. |
| 63 | + |
| 64 | + * Libraries |
| 65 | + * std: Transitioned to the new runtime, written in Rust. |
| 66 | + * std: Added an experimental I/O library, `rt::io`, based on the new |
| 67 | + runtime. |
| 68 | + * std: A new generic `range` function was added to the prelude, replacing |
| 69 | + `uint::range` and friends. |
| 70 | + * std: `range_rev` no longer exists. Since range is an iterator it can be |
| 71 | + reversed with `range(lo, hi).invert()`. |
| 72 | + * std: The `chain` method on option renamed to `and_then`; `unwrap_or_default` |
| 73 | + renamed to `unwrap_or`. |
| 74 | + * std: The `iterator` module was renamed to `iter`. |
| 75 | + * std: Integral types now support the `checked_add`, `checked_sub`, and |
| 76 | + `checked_mul` operations for detecting overflow. |
| 77 | + * std: Many methods in `str`, `vec`, `option, `result` were renamed for |
| 78 | + consistency. |
| 79 | + * std: Methods are standardizing on conventions for casting methods: |
| 80 | + `to_foo` for copying, `into_foo` for moving, `as_foo` for temporary |
| 81 | + and cheap casts. |
| 82 | + * std: The `CString` type in `c_str` provides new ways to convert to and |
| 83 | + from C strings. |
| 84 | + * std: `DoubleEndedIterator` can yield elements in two directions. |
| 85 | + * std: The `mut_split` method on vectors partitions an `&mut [T]` into |
| 86 | + two splices. |
| 87 | + * std: `str::from_bytes` renamed to `str::from_utf8`. |
| 88 | + * std: `pop_opt` and `shift_opt` methods added to vectors. |
| 89 | + * std: The task-local data interface no longer uses @, and keys are |
| 90 | + no longer function pointers. |
| 91 | + * std: The `swap_unwrap` method of `Option` renamed to `take_unwrap`. |
| 92 | + * std: Added `SharedPort` to `comm`. |
| 93 | + * std: `Eq` has a default method for `ne`; only `eq` is required |
| 94 | + in implementations. |
| 95 | + * std: `Ord` has default methods for `le`, `gt` and `le`; only `lt` |
| 96 | + is required in implementations. |
| 97 | + * std: `is_utf8` performance is improved, impacting many string functions. |
| 98 | + * std: `os::MemoryMap` provides cross-platform mmap. |
| 99 | + * std: `ptr::offset` is now unsafe, but also more optimized. Offsets that |
| 100 | + are not 'in-bounds' are considered undefined. |
| 101 | + * std: Many freestanding functions in `vec` removed in favor of methods. |
| 102 | + * std: Many freestanding functions on scalar types removed in favor of |
| 103 | + methods. |
| 104 | + * std: Many options to task builders were removed since they don't make |
| 105 | + sense in the new scheduler design. |
| 106 | + * std: More containers implement `FromIterator` so can be created by the |
| 107 | + `collect` method. |
| 108 | + * std: More complete atomic types in `unstable::atomics`. |
| 109 | + * std: `comm::PortSet` removed. |
| 110 | + * std: Mutating methods in the `Set` and `Map` traits have been moved into |
| 111 | + the `MutableSet` and `MutableMap` traits. `Container::is_empty`, |
| 112 | + `Map::contains_key`, `MutableMap::insert`, and `MutableMap::remove` have |
| 113 | + default implementations. |
| 114 | + * extra: `dlist`, the doubly-linked list was modernized. |
| 115 | + * extra: Added a `hex` module with `ToHex` and `FromHex` traits. |
| 116 | + * extra: Added `glob` module, replacing `std::os::glob`. |
| 117 | + * extra: `rope` was removed. |
| 118 | + * extra: `deque` was renamed to `ringbuf`. `RingBuf` implements `Deque`. |
| 119 | + * extra: `net`, and `timer` were removed. The experimental replacements |
| 120 | + are `std::rt::io::net` and `std::rt::io::timer`. |
| 121 | + * extra: Iterators implemented for `SmallIntMap`. |
| 122 | + * extra: Iterators implemented for `Bitv` and `BitvSet`. |
| 123 | + * extra: `SmallIntSet` removed. Use `BitvSet`. |
| 124 | + * extra: Performance of JSON parsing greatly improved. |
| 125 | + * extra: `semver` updated to SemVer 2.0.0. |
| 126 | + * extra: `term` handles more terminals correctly. |
| 127 | + * extra: `dbg` module removed. |
| 128 | + |
| 129 | + * Other |
| 130 | + * rustc's debug info generation (`-Z debug-info`) is greatly improved. |
| 131 | + * rustc accepts `--target-cpu` to compile to a specific CPU architecture, |
| 132 | + similarly to gcc's `--march` flag. |
| 133 | + * rustpkg has received many improvements. |
| 134 | + * rustpkg supports git tags as package IDs. |
| 135 | + * rustpkg builds into target-specific directories so it can be used for |
| 136 | + cross-compiling. |
| 137 | + * The number of concurrent test tasks is controlled by the environment |
| 138 | + variable RUST_TEST_TASKS. |
| 139 | + * The test harness can now report metrics for benchmarks. |
| 140 | + * All tools have man pages. |
| 141 | + * Programs compiled with `--test` now support the `-h` and `--help` flags. |
| 142 | + * The runtime uses jemalloc for allocations. |
| 143 | + * Segmented stacks are temporarily disabled as part of the transition to |
| 144 | + the new runtime. Stack overflows are possible! |
| 145 | + |
1 | 146 | Version 0.7 (July 2013)
|
2 | 147 | -----------------------
|
3 | 148 |
|
|
0 commit comments