You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The example above contains a string with only two codepoints, [the codepoint fi](http://www.fileformat.info/info/unicode/char/FB01/index.htm) and [the codepoint n](http://www.fileformat.info/info/unicode/char/006E/index.htm). Look how Elixir properly capitalizes the string, returning a new string made of three codepoints (all ascii letters).
32
32
33
-
Learn more about [Unicode support with the String module](/docs/stable/elixir/String.html).
33
+
Learn more about [Unicode support with the String module](/docs/stable/elixir/#!String.html).
34
34
35
35
## AST metadata
36
36
@@ -70,11 +70,11 @@ When some code call the `unless` macro above, in previous Elixir versions, it wo
70
70
71
71
Elixir v0.8 ensures that the `unless` macro above will expand to the same `if` macro available when quoted, guaranteeing different libraries can integrate easily without imposing hidden requirements.
72
72
73
-
You can read more about [macros in the getting started guide](/getting-started/case-cond-and-if.html) or [go deep into the quote macro docs](/docs/stable/elixir/Kernel.SpecialForms.html#quote/2).
73
+
You can read more about [macros in the getting started guide](/getting-started/case-cond-and-if.html) or [go deep into the quote macro docs](/docs/stable/elixir/#!Kernel.SpecialForms.html#quote/2).
74
74
75
75
## A new way to manipulate pathnames
76
76
77
-
Elixir v0.8 contains a bit of house cleaning too. We have created [the Path module](/docs/stable/elixir/Path.html) to accommodate functions used to manipulate filesystem paths and have also added functions like [`System.tmp_dir` and `System.user_home`](/docs/stable/elixir/System.html) which are meant to work accross different operating systems and are very handy when scripting.
77
+
Elixir v0.8 contains a bit of house cleaning too. We have created [the Path module](/docs/stable/elixir/#!Path.html) to accommodate functions used to manipulate filesystem paths and have also added functions like [`System.tmp_dir` and `System.user_home`](/docs/stable/elixir/#!System.html) which are meant to work accross different operating systems and are very handy when scripting.
Copy file name to clipboardExpand all lines: _posts/2013-04-29-elixir-v0-8-2-released.markdown
+1-1
Original file line number
Diff line number
Diff line change
@@ -44,6 +44,6 @@ defmodule MathTest do
44
44
end
45
45
```
46
46
47
-
You can learn more about [doctests on our documentation page](/docs/stable/ex_unit/ExUnit.DocTest.html) and get more information about our latest release [on the CHANGELOG](https://github.com/elixir-lang/elixir/blob/ed27611f48ba150404c95fe15f1d6058a4287330/CHANGELOG.md).
47
+
You can learn more about [doctests on our documentation page](/docs/stable/ex_unit/#!ExUnit.DocTest.html) and get more information about our latest release [on the CHANGELOG](https://github.com/elixir-lang/elixir/blob/ed27611f48ba150404c95fe15f1d6058a4287330/CHANGELOG.md).
48
48
49
49
If you are new to Elixir, [it's easy to get started with](/getting-started/introduction.html)!
Copy file name to clipboardExpand all lines: _posts/2013-05-23-elixir-v0-9-0-released.markdown
+1-1
Original file line number
Diff line number
Diff line change
@@ -123,7 +123,7 @@ A special thanks to [Eric Meadows-Jonsson](https://github.com/ericmj) for implem
123
123
We have also many other smaller improvements:
124
124
125
125
* Our CLI now supports `--hidden` and `--cookie` flags which are useful for distributed modes;
126
-
* Our test framework, ExUnit, is now able to capture all the communication that happens with a registed IO device, like `:stdio` and `:stderr`, via [`ExUnit.CaptureIO`](/docs/stable/ex_unit/ExUnit.CaptureIO.html). This is very useful for testing how your software reacts to some inputs and what it prints to the terminal;
126
+
* Our test framework, ExUnit, is now able to capture all the communication that happens with a registed IO device, like `:stdio` and `:stderr`, via [`ExUnit.CaptureIO`](/docs/stable/ex_unit/#!ExUnit.CaptureIO.html). This is very useful for testing how your software reacts to some inputs and what it prints to the terminal;
127
127
*`IEx` now allows files to be imported into the shell with `import_file` and also loads `~/.iex` on startup for custom configuration;
128
128
* The `String`, `Enum` and `Dict` modules got more convenience functions that goes from checking unicode character validity to taking values out of a dictionary;
`Stream.repeatedly/1` returns an infinite stream but that's ok we just need its first three elements. You can learn more about [stream and related functions in `Stream` module documentation](/docs/stable/elixir/Stream.html).
57
+
`Stream.repeatedly/1` returns an infinite stream but that's ok we just need its first three elements. You can learn more about [stream and related functions in `Stream` module documentation](/docs/stable/elixir/#!Stream.html).
58
58
59
59
## Sets
60
60
61
-
This release also adds [the Sets API](/docs/stable/elixir/Set.html) to Elixir and a HashSet implementation. The HashSet implementation follows [the same design goals as the HashDict implementation](/blog/2013/01/27/elixir-v0-8-0-released/) released at the beginning of this year, starting with a compact representation and expanding and contracting as needed.
61
+
This release also adds [the Sets API](/docs/stable/elixir/#!Set.html) to Elixir and a HashSet implementation. The HashSet implementation follows [the same design goals as the HashDict implementation](/blog/2013/01/27/elixir-v0-8-0-released/) released at the beginning of this year, starting with a compact representation and expanding and contracting as needed.
62
62
63
63
This feature was a contribution from [Joseph Wilk](https://github.com/josephwilk) and he talks about its implementation and provides some benchmarks [on his blog](http://blog.josephwilk.net/elixir/sets-in-elixir.html).
64
64
65
65
## Pretty printing
66
66
67
67
Another addition to this release is pretty printing. The pretty printing started as an implementation of the [Wadler paper](http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf) by [Jonns Mostovoys](https://github.com/manpages) which was then improved by [Gustavo Brunoro](https://github.com/brunoro) under his Google Summer of Code project as described in [Lindig's _Strictly Prettier_ paper](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.2200).
68
68
69
-
As soon as you upgrade to Elixir v0.10.0 and start IEx, you will get pretty printing for all data structures provided by Elixir. We have also added documentation to the `Inspect` module about [adding pretty printing to your own structures](/docs/stable/elixir/Inspect.html) as well as [using the document algebra for any other kind of formatting](/docs/stable/elixir/Inspect.Algebra.html).
69
+
As soon as you upgrade to Elixir v0.10.0 and start IEx, you will get pretty printing for all data structures provided by Elixir. We have also added documentation to the `Inspect` module about [adding pretty printing to your own structures](/docs/stable/elixir/#!Inspect.html) as well as [using the document algebra for any other kind of formatting](/docs/stable/elixir/#!Inspect.Algebra.html).
70
70
71
71
## Other improvements
72
72
@@ -78,7 +78,7 @@ Other notable improvements are:
78
78
79
79
* We are also working hard on Windows support, improving its command-line tools and working towards a green test suite, thanks to [Tom Jansens](https://github.com/tojans);
80
80
81
-
* Meta-programming in Elixir was also improved by the addition of the `binding/0` and `binding/1` macros plus the additions of `Macro.expand_once/2` and `Macro.expand_all/2` to the [`Macro` module](/docs/stable/elixir/Macro.html);
81
+
* Meta-programming in Elixir was also improved by the addition of the `binding/0` and `binding/1` macros plus the additions of `Macro.expand_once/2` and `Macro.expand_all/2` to the [`Macro` module](/docs/stable/elixir/#!Macro.html);
82
82
83
83
There are also improvements to typespecs, error messages, many bug fixes and some backwards incompatible changes. We have posted a detailed [upgrade instructions on the mailing list](https://groups.google.com/forum/?fromgroups#!topic/elixir-lang-talk/ksrefrgK1eY). For a general overview, [check out the CHANGELOG](https://github.com/elixir-lang/elixir/blob/v0.10.0/CHANGELOG.md).
Copy file name to clipboardExpand all lines: _posts/2013-08-08-elixir-design-goals.markdown
+2-2
Original file line number
Diff line number
Diff line change
@@ -202,9 +202,9 @@ Enum.map set, fn(x) -> x * 2 end
202
202
#=> [2,4,6]
203
203
```
204
204
205
-
Not only that, any developer can **extend** the `Enum` module to work with any data type as long as the data type implements [the `Enumerable` protocol](/docs/stable/elixir/Enumerable.html) (protocols in Elixir are based on Clojure's protocol). This is extremely convenient because the developer needs to know only the `Enum` API for enumeration, instead of memorizing specific APIs for sets, lists, dicts, etc.
205
+
Not only that, any developer can **extend** the `Enum` module to work with any data type as long as the data type implements [the `Enumerable` protocol](/docs/stable/elixir/#!Enumerable.html) (protocols in Elixir are based on Clojure's protocol). This is extremely convenient because the developer needs to know only the `Enum` API for enumeration, instead of memorizing specific APIs for sets, lists, dicts, etc.
206
206
207
-
There are many other protocols exposed by the language, like [the `Inspect` protocol](/docs/stable/elixir/Inspect.html) for pretty printing data structures and [the `Access` protocol](/docs/stable/elixir/Access.html) for accessing key-value data by key. By being extensible, Elixir ensures developers can work **with** the language, instead of **against** the language.
207
+
There are many other protocols exposed by the language, like [the `Inspect` protocol](/docs/stable/elixir/#!Inspect.html) for pretty printing data structures and [the `Access` protocol](/docs/stable/elixir/#!Access.html) for accessing key-value data by key. By being extensible, Elixir ensures developers can work **with** the language, instead of **against** the language.
Copy file name to clipboardExpand all lines: _posts/2013-11-05-elixir-v0-11-0-released.markdown
+3-3
Original file line number
Diff line number
Diff line change
@@ -22,7 +22,7 @@ In this new release, IEx also supports a very simple debugging mechanism called
22
22
23
23

24
24
25
-
In Elixir, your code runs in many processes that talk to each other and the Elixir shell is no different. `IEx.pry` allows another process to take over the shell, allowing the developer to inspect the binding and halt the execution of the process being "pried" (i.e. the one that invoked `IEx.pry`). We called this feature `pry` as a gentle reminder that you can only inspect existing information, you cannot change the binding over a pried process. For more information, check the docs for [`IEx.pry/1`](/docs/stable/iex/IEx.html#pry/1).
25
+
In Elixir, your code runs in many processes that talk to each other and the Elixir shell is no different. `IEx.pry` allows another process to take over the shell, allowing the developer to inspect the binding and halt the execution of the process being "pried" (i.e. the one that invoked `IEx.pry`). We called this feature `pry` as a gentle reminder that you can only inspect existing information, you cannot change the binding over a pried process. For more information, check the docs for [`IEx.pry/1`](/docs/stable/iex/#!IEx.html#pry/1).
26
26
27
27
## ExUnit
28
28
@@ -59,9 +59,9 @@ fun.(1..3)
59
59
#=> true
60
60
```
61
61
62
-
You can learn more about the [new capture operator in our docs](/docs/stable/elixir/Kernel.SpecialForms.html#&/1).
62
+
You can learn more about the [new capture operator in our docs](/docs/stable/elixir/#!Kernel.SpecialForms.html#&/1).
63
63
64
-
We have also pushed improvements to [the String module](/docs/stable/elixir/String.html), including new APIs. In particular, in order to know that `String.length("josé")` has length 4 (even though it takes 5 bytes to be represented in UTF-8), we need to use some algorithms defined by the Unicode Standard. These have been implemented as specified in the [extended grapheme cluster algorithm, defined in the version 6.3.0 of the Unicode Standard](http://www.unicode.org/reports/tr29/).
64
+
We have also pushed improvements to [the String module](/docs/stable/elixir/#!String.html), including new APIs. In particular, in order to know that `String.length("josé")` has length 4 (even though it takes 5 bytes to be represented in UTF-8), we need to use some algorithms defined by the Unicode Standard. These have been implemented as specified in the [extended grapheme cluster algorithm, defined in the version 6.3.0 of the Unicode Standard](http://www.unicode.org/reports/tr29/).
65
65
66
66
In the optimization front, we have pushed the first iteration of a [feature called Protocol consolidation](https://groups.google.com/forum/#!topic/elixir-lang-core/RoXAUtoyjk4), which speeds up the polymorphic dispatch done by protocols, sometimes reducing the dispatching time to 10% of the original time. We will continue working in upcoming releases to integrate protocol consolidation as a regular part of the developer workflow.
Copy file name to clipboardExpand all lines: _posts/2014-04-21-elixir-v0-13-0-released.markdown
+6-6
Original file line number
Diff line number
Diff line change
@@ -30,11 +30,11 @@ In a nutshell, here is what new:
30
30
31
31
* The [Getting Started guide](/getting-started/introduction.html) was rewritten from scratch. The previous guide was comprised of 7 chapters and was about to become 2 years old. The new guide features 20 chapters, it explores the new maps and structs (which are part of this release), and it goes deeper into topics like IO and File handling. It also includes an extra guide, still in development, about [Meta-Programming in Elixir](/getting-started/meta/quote-and-unquote.html);
32
32
33
-
* Elixir v0.13 provides a new comprehension syntax that not only works with lists, but with any [`Enumerable`](/docs/stable/elixir/Enumerable.html). The output of a comprehension is also extensible via the [`Collectable`](/docs/stable/elixir/Collectable.html) protocol;
33
+
* Elixir v0.13 provides a new comprehension syntax that not only works with lists, but with any [`Enumerable`](/docs/stable/elixir/#!Enumerable.html). The output of a comprehension is also extensible via the [`Collectable`](/docs/stable/elixir/#!Collectable.html) protocol;
34
34
35
35
* Mix, Elixir's build tool, has been improved in order to provide better workflows when compiling projects and working with dependencies;
36
36
37
-
* There are many other changes, like the addition of [StringIO](/docs/stable/elixir/StringIO.html), support for [tags and filters in ExUnit](/docs/stable/ex_unit/ExUnit.Case.html) and more. Please check the [CHANGELOG](https://github.com/elixir-lang/elixir/blob/v0.13.0/CHANGELOG.md) for the complete list.
37
+
* There are many other changes, like the addition of [StringIO](/docs/stable/elixir/#!StringIO.html), support for [tags and filters in ExUnit](/docs/stable/ex_unit/#!ExUnit.Case.html) and more. Please check the [CHANGELOG](https://github.com/elixir-lang/elixir/blob/v0.13.0/CHANGELOG.md) for the complete list.
38
38
39
39
Even with all those improvements, Elixir v0.13.0 is backwards compatible with Elixir v0.12.5 and upgrading should be a clean process.
40
40
@@ -68,7 +68,7 @@ iex> %{"other" => value} = map
68
68
69
69
A map pattern will match any map that has all the keys specified in the pattern. The values for the matching keys must also match. For example, `%{"hello" => world}` will match any map that has the key `"hello"` and assign the value to `world`, while `%{"hello" => "world"}` will match any map that has the key `"hello"` with value equals to `"world"`. An empty map pattern (`%{}`) will match all maps.
70
70
71
-
Developers can use the functions in the [`Map` module](/docs/stable/elixir/Map.html) to work with maps. For more information on maps and how they compare to other associative data structures in the language, please check the [Maps chapter in our new Getting Started guide](/getting-started/maps-and-dicts.html). Elixir Sips has also released two episodes that cover maps ([part 1](http://elixirsips.com/episodes/054_maps_part_1.html) and [part 2](http://elixirsips.com/episodes/055_maps_part_2.html)).
71
+
Developers can use the functions in the [`Map` module](/docs/stable/elixir/#!Map.html) to work with maps. For more information on maps and how they compare to other associative data structures in the language, please check the [Maps chapter in our new Getting Started guide](/getting-started/maps-and-dicts.html). Elixir Sips has also released two episodes that cover maps ([part 1](http://elixirsips.com/episodes/054_maps_part_1.html) and [part 2](http://elixirsips.com/episodes/055_maps_part_2.html)).
72
72
73
73
Maps also provide special syntax for creating, accessing and updating maps with atom keys:
74
74
@@ -185,7 +185,7 @@ For more information on structs, check out the [Structs chapter in the getting s
185
185
186
186
With the introduction of maps and structs, some deprecations will arrive on upcoming releases. First of all, the `ListDict` data structure is being deprecated and phased out. Records are also being deprecated from the language, although it is going to be a longer process, as many projects and Elixir itself still use records in diverse occasions.
187
187
188
-
Note though only Elixir records are being deprecated. Erlang records, which are basically syntax sugar around tuples, will remain in the language for the rare cases Elixir developers need to interact with Erlang libraries that provide records. In particular, the [Record](/docs/stable/elixir/Record.html) has been updated to provide the new Record API (while keeping the old one for backwards compatibility).
188
+
Note though only Elixir records are being deprecated. Erlang records, which are basically syntax sugar around tuples, will remain in the language for the rare cases Elixir developers need to interact with Erlang libraries that provide records. In particular, the [Record](/docs/stable/elixir/#!Record.html) has been updated to provide the new Record API (while keeping the old one for backwards compatibility).
189
189
190
190
Finally, structs are still in active development and new features, like `@derive`, should land in upcoming Elixir releases. For those interested, the [original maps and structs proposal is still availble](https://gist.github.com/josevalim/b30c881df36801611d13).
191
191
@@ -222,7 +222,7 @@ iex> for <<c <- " hello world ">>, c != ?\s, into: "", do: <<c>>
222
222
"helloworld"
223
223
```
224
224
225
-
Sets, maps and other dictionaries can also be given with the `:into` option. In general, the `:into` accepts any structure as long as it implements the [`Collectable` protocol](/docs/stable/elixir/Collectable.html).
225
+
Sets, maps and other dictionaries can also be given with the `:into` option. In general, the `:into` accepts any structure as long as it implements the [`Collectable` protocol](/docs/stable/elixir/#!Collectable.html).
226
226
227
227
For example, the `IO` module provides streams, that are both `Enumerable` and `Collectable`. You can implement an echo terminal that returns whatever is typed into the shell, but in upcase, using comprehensions:
228
228
@@ -275,7 +275,7 @@ That said, in the next months we plan to:
275
275
276
276
* Integrate applications configuration (provided by OTP) right into Mix;
277
277
* Provide an Elixir logger that knows how to print and format Elixir exceptions and stacktraces;
278
-
* Properly expose the functionality provided by Applications, Supervisors, GenServers and GenEvents and study how they can integrate with Elixir. For example, how to consume events from GenEvent as a [stream of data](/docs/stable/elixir/Stream.html)?
278
+
* Properly expose the functionality provided by Applications, Supervisors, GenServers and GenEvents and study how they can integrate with Elixir. For example, how to consume events from GenEvent as a [stream of data](/docs/stable/elixir/#!Stream.html)?
279
279
* Study how patterns like tasks and agents can be integrated into the language, often picking up the lessons learned by libraries like [e2](http://e2project.org/erlang.html) and [functionality exposed by OTP itself](http://erlang.org/doc/man/rpc.html);
280
280
* Rewrite the Mix and ExUnit guides to focus on applications and OTP as a whole, rebranding it to "Building Apps with Mix and OTP";
0 commit comments