work on ch.5

This commit is contained in:
Meik Hellmund 2023-05-13 16:54:43 +02:00
parent 70644d91bc
commit 842e43e771
4 changed files with 33 additions and 111 deletions

6
.gitignore vendored
View File

@ -13,3 +13,9 @@ chapters/*.ipynb
_extensions/julia/escfilter.sh
_extensions/julia/escfilter2.py
_extensions/julia/escfilter3.py
site_libs/
fonts/atkinson*
fonts/quicksand*
fonts/ubuntu*
/.luarc.json

2
.quartoignore Normal file
View File

@ -0,0 +1,2 @@
Readme.md
makie.qmd

View File

@ -0,0 +1,4 @@
This 'Quarto Book'https://quarto.org/ about Julia Programming in German is online at https://www.math.uni-leipzig.de/~hellmund/juliabook/ https://www.math.uni-leipzig.de/~hellmund/juliabook/
It uses the `julia-color` Quarto extension https://gitea.math.uni-leipzig.de/hellmund/julia-color

View File

@ -1,4 +1,4 @@
# Arbeit mit Julia: Hilfe, REPL, Pakete, Introspection
# Arbeit mit Julia: REPL, Pakete, Introspection
@sec-tab
@ -72,32 +72,38 @@ In einem Jupyter-Notebook sind die Modi sind als Einzeiler in einer eigenen Inpu
## Der Paketmanager
- Über 9000 Pakete, siehe [https://julialang.org/packages/](https://julialang.org/packages/)
- Bevor sie mit `using Module` verwendet werden können, müssen sie heruntergeladen und installiert werden.
- Dazu dient der _package manager_ `Pkg`
- Man kann ihn auf zwei Arten verwenden:
- als normale Julia-Anweisungen, die auch in einer `.jl`-Programmdatei stehen können:
Wichtiger Teil des _Julia Ecosystems_ sind die zahlreichen Pakete, die Julia erweitern.
- Einige Pakete sind Teil jeder Julia-Installation und müssen nur mit einer `using Paketname`-Anweisung aktiviert werden.
- Sie bilden die sogenannte _Standard Library_ und dazu gehören
- `LinearAlgebra`, `Statistics`, `SparseArrays`, `Printf`, `Pkg` und andere.
- Über 9000 Pakete sind offiziell registriert, siehe [https://julialang.org/packages/](https://julialang.org/packages/).
- Diese können mit wenigen Tastendrücken heruntergeladen und installiert werden.
- Dazu dient der _package manager_ `Pkg`.
- Man kann ihn auf zwei Arten verwenden:
- als normale Julia-Anweisungen, die auch in einer `.jl`-Programmdatei stehen können:
```
using Pkg
Pkg.add("TollesPaket")
Pkg.add("PaketXY")
```
- im speziellen pkg-Modus des Julia-REPLs:
- im speziellen pkg-Modus des Julia-REPLs:
```
] add TollesPaket
] add PaketXY
```
- Anschließend kann das Paket mit `using PaketXY` verwendet werden.
- Man kann auch Pakete aus anderen Quellen und selbstgeschriebene Pakete installieren.
### Einige Funktionen des Paketmanagers
| Funktion | `pkg` - Mode | Erklärung |
|:------------------------|:----------------------|:----------------------------------------------------------|
|:------------------------|:--------------------------| :-------------------------------------------------------|
| `Pkg.add("MyPack")` | `pkg> add MyPack` | add `MyPack.jl` to current environment |
| `Pkg.rm("MyPack")` | `pkg> remove MyPack` | remove `MyPack.jl` from current environment |
| `Pkg.update()` | `pkg> update` | update packages in current environment |
| `Pkg.activate("mydir")` | `pkg> activate mydir` | activate directory as current environment |
| `Pkg.status()` | `pkg> status` | list packages |
| `Pkg.instantiate()` | `pg> instantiate` | install all packages according to `Project.toml` |
### Installierte Pakete und Environments
@ -142,113 +148,17 @@ Danach können Sie mit `add` im Pkg-Modus auch Pakete installieren:
```{julia}
#| eval: false
] add TollesPaket
] add PaketXY
```
Achtung! Das kann dauern! Viele Pakete haben komplexe Abhängigkeiten und lösen die Installation von weiteren Paketen aus. Viele Pakete werden beim Installieren vorkompiliert. Im REPL sieht man den Installationsfortschritt, im Jupyter-Notebook nicht.
## Eingebaute Hilfe und Informationen
Mit `?` und der `Tab`-Taste kommt man oft weiter.
## Hilfe und praktische Tipps
----
Achtung! Das kann dauern! Viele Pakete haben komplexe Abhängigkeiten und lösen die Installation von weiteren Paketen aus. Viele Pakete werden beim Installieren vorkompiliert. Im REPL sieht man den Installationsfortschritt, im Jupyter-Notebook leider nicht.
### weitere Hilfe: `@which`, `fieldnames()`, `methods()`, `names()`, `pwd()`
```{julia}
# Die Zuordnung zu einem Modul zeigt @which an:
@which(sqrt)
```
```{julia}
# Die Komponenten einer struct oder eines anderen zusammengesetzten Typs:
fieldnames(Rational)
```
```{julia}
fieldnames(Complex)
```
```{julia}
# alle Methoden einer Funktion
methods(sqrt)
```
```{julia}
# alle Methoden einer Funktion bei bestimmten Argumenttypen. Die Argumenttypen müssen als Tupel angegeben werden
methods(sqrt, (Number,)) # Komma nötig für 1-elementiges Tupel
```
```{julia}
# für einen Typ gibt methods() alle Konstruktoren aus
methods(Int64)
```
```{julia}
# names(Module) gibt alle von einem Modul exportierte Namen aus.
# genau wie auch
#
# ?Module
#
# funktioniert es erst, wenn das Modul mit 'using Module' geladen ist.
# Oft ist es besser, wenn die using-Anweisung in einer eigenen Zelle steht.
using Plots
```
```{julia}
names(Plots)
```
```{julia}
# Julia kürzt den interaktiven Output.
# ein explizites print() zeigt alles:
print(names(Plots))
```
```{julia}
# eine andere Möglichkeit der Ausgabe mit Überlänge in Jupyter
show(stdout, MIME("text/plain"), names(Plots))
```
```{julia}
# pwd() "print working directory" zeigt, in welchem Verzeichnis Julia gerade operiert.
#
# Wichtig für die Ein/Ausgabe mit Dateien, z.B. include()
pwd()
```
```{julia}
include("Jupyter.jl") # Datei mit Julia-Code einlesen und abarbeiten
```
## Der Julia JIT _(just in time)_ Compiler
## Der Julia JIT _(just in time)_ Compiler: Introspection
Julia baut auf die Werkzeuge des _LLVM Compiler Infrastructure Projects_ auf.