The document is organized in four parts. The style of presentation is different for each part. While the introduction of the core language is more formal and more complete, the emphasis is put on typechecking for the chapter on objects and classes, the presentation of the modules system remains informal, and the last part is mostly based on examples. This is a deliberate choice, due to the limited space, but also based on the relative importance of the different parts and interest of their formalization. We then refer to other works for a more formal presentation or simply for further reading, both at the end of each chapter for rather technical references, and in chapter 6 for a more general overview of related work.
Programming languages are rigorous but incomplete approximations of the language of mathematics.
General purpose languages are Turing complete. That is, they allow to write all algorithms. However, programming languages are not all equivalent, since they differ by their ability to describe certain kinds of algorithms succinctly. Of course, expressiveness is not the ultimate goal. In particular, the safety of program execution should not be given up for expressiveness.