100% found this document useful (3 votes)
16 views

PDF Domain Specific Languages in R Advanced Statistical Programming 1st Edition Thomas Mailund download

Advanced

Uploaded by

siimescacoma98
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (3 votes)
16 views

PDF Domain Specific Languages in R Advanced Statistical Programming 1st Edition Thomas Mailund download

Advanced

Uploaded by

siimescacoma98
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

Download the full version of the textbook now at textbookfull.

com

Domain Specific Languages in R Advanced


Statistical Programming 1st Edition Thomas
Mailund

https://textbookfull.com/product/domain-specific-
languages-in-r-advanced-statistical-
programming-1st-edition-thomas-mailund-2/

Explore and download more textbook at https://textbookfull.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Domain Specific Languages in R Advanced Statistical


Programming 1st Edition Thomas Mailund

https://textbookfull.com/product/domain-specific-languages-in-r-
advanced-statistical-programming-1st-edition-thomas-mailund-2/

textbookfull.com

Functional Data Structures in R: Advanced Statistical


Programming in R Thomas Mailund

https://textbookfull.com/product/functional-data-structures-in-r-
advanced-statistical-programming-in-r-thomas-mailund/

textbookfull.com

Functional Data Structures in R: Advanced Statistical


Programming in R Mailund

https://textbookfull.com/product/functional-data-structures-in-r-
advanced-statistical-programming-in-r-mailund/

textbookfull.com

Heaven Is Empty A Cross Cultural Approach to Religion and


Empire in Ancient China Filippo Marsili

https://textbookfull.com/product/heaven-is-empty-a-cross-cultural-
approach-to-religion-and-empire-in-ancient-china-filippo-marsili/

textbookfull.com
Fundamentals of Music Processing: Using Python and Jupyter
Notebooks 2nd Edition Meinard Müller

https://textbookfull.com/product/fundamentals-of-music-processing-
using-python-and-jupyter-notebooks-2nd-edition-meinard-muller/

textbookfull.com

Switched A Twin Swap Sweet Omegaverse Romance Super Sweet


Omegaverse Book 1 1st Edition Romy Lockhart

https://textbookfull.com/product/switched-a-twin-swap-sweet-
omegaverse-romance-super-sweet-omegaverse-book-1-1st-edition-romy-
lockhart/
textbookfull.com

Bad Boy Bossy Pants A Bad Boy Billionaire Book 1st Edition
Paulin Brynn

https://textbookfull.com/product/bad-boy-bossy-pants-a-bad-boy-
billionaire-book-1st-edition-paulin-brynn/

textbookfull.com

Global Lean for Higher Education A Themed Anthology of


Case Studies Approaches and Tools 1st Edition Stephen
Yorkstone (Editor)
https://textbookfull.com/product/global-lean-for-higher-education-a-
themed-anthology-of-case-studies-approaches-and-tools-1st-edition-
stephen-yorkstone-editor/
textbookfull.com

Clinical Neuroanatomy (LANGE) 29th Edition Stephen G.


Waxman

https://textbookfull.com/product/clinical-neuroanatomy-lange-29th-
edition-stephen-g-waxman/

textbookfull.com
Accelerated Pavement Testing to Transport Infrastructure
Innovation Proceedings of 6th APT Conference Armelle
Chabot
https://textbookfull.com/product/accelerated-pavement-testing-to-
transport-infrastructure-innovation-proceedings-of-6th-apt-conference-
armelle-chabot/
textbookfull.com
Domain-Specific
Languages in R
Advanced Statistical Programming

Thomas Mailund
Domain-Specific
Languages in R
Advanced Statistical
Programming

Thomas Mailund
Domain-Specific Languages in R: Advanced Statistical Programming
Thomas Mailund
Aarhus N, Staden København, Denmark

ISBN-13 (pbk): 978-1-4842-3587-4   ISBN-13 (electronic): 978-1-4842-3588-1


https://doi.org/10.1007/978-1-4842-3588-1
Library of Congress Control Number: 2018947391

Copyright © 2018 by Thomas Mailund


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or
part of the material is concerned, specifically the rights of translation, reprinting, reuse of
illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way,
and transmission or information storage and retrieval, electronic adaptation, computer software,
or by similar or dissimilar methodology now known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark
symbol with every occurrence of a trademarked name, logo, or image we use the names, logos,
and images only in an editorial fashion and to the benefit of the trademark owner, with no
intention of infringement of the trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if
they are not identified as such, is not to be taken as an expression of opinion as to whether or not
they are subject to proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of
publication, neither the authors nor the editors nor the publisher can accept any legal
responsibility for any errors or omissions that may be made. The publisher makes no warranty,
express or implied, with respect to the material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Steve Anglin
Development Editor: Matthew Moodie
Coordinating Editor: Mark Powers
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York,
233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505,
e-mail orders-ny@springer-sbm.com, or visit www.springeronline.com. Apress Media, LLC is a
California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc
(SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail editorial@apress.com; for reprint, paperback, or
audio rights, please e-mail bookpermissions@springernature.com.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook
versions and licenses are also available for most titles. For more information, reference our Print
and eBook Bulk Sales web page at www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is
available to readers on GitHub via the book’s product page, located at www.apress.com/
9781484235874. For more detailed information, please visit www.apress.com/source-code.
Printed on acid-free paper
Table of Contents
About the Author��������������������������������������������������������������������������������vii
About the Technical Reviewer�������������������������������������������������������������ix

Chapter 1: Introduction������������������������������������������������������������������������1
Who This Book Is For���������������������������������������������������������������������������������������������1
Domain-Specific Languages���������������������������������������������������������������������������������2

Chapter 2: Matrix Expressions�������������������������������������������������������������9


Parsing Expressions��������������������������������������������������������������������������������������������10
Meta-Programming Parsing��������������������������������������������������������������������������14
Expression Manipulation�������������������������������������������������������������������������������������18
Optimizing Multiplication�������������������������������������������������������������������������������20
Expression Rewriting�������������������������������������������������������������������������������������23
Expression Evaluation�����������������������������������������������������������������������������������������27

Chapter 3: Components of a Programming Language������������������������31


Text, Tokens, Grammars, and Semantics�������������������������������������������������������������32
Specifying a Grammar����������������������������������������������������������������������������������������36
Designing Semantics������������������������������������������������������������������������������������������46

Chapter 4: Functions, Classes, and Operators������������������������������������55


The S3 Object-Oriented Programming System���������������������������������������������������56
Objects and Classes��������������������������������������������������������������������������������������56
Generic Functions������������������������������������������������������������������������������������������58

iii
Table of Contents

Operator Overloading������������������������������������������������������������������������������������63
Group Generics����������������������������������������������������������������������������������������������68
Precedence and Evaluation Order�����������������������������������������������������������������������70
Code Blocks��������������������������������������������������������������������������������������������������������73

Chapter 5: Parsing and Manipulating Expressions�����������������������������77


Quoting and Evaluating���������������������������������������������������������������������������������������78
Exploring Expressions�����������������������������������������������������������������������������������������84
Manipulating Expressions�����������������������������������������������������������������������������������94

Chapter 6: Lambda Expressions�������������������������������������������������������101


Anonymous functions���������������������������������������������������������������������������������������101
Experiments with Alternatives to the Syntax����������������������������������������������������104
Don’t Do This at Home��������������������������������������������������������������������������������������107

Chapter 7: Environments and Expressions���������������������������������������109


Scopes and Environments��������������������������������������������������������������������������������109
Default Parameters, Lazy Evaluation, and Promises�����������������������������������������114
Quotes and Non-standard Evaluation���������������������������������������������������������������124

Chapter 8: Tidy Evaluation����������������������������������������������������������������135


Quosures�����������������������������������������������������������������������������������������������������������136
Quasi-quoting���������������������������������������������������������������������������������������������������147

Chapter 9: List Comprehension��������������������������������������������������������159

Chapter 10: Continuous-Time Markov Chains����������������������������������167


Constructing the Markov Chain�������������������������������������������������������������������������170
Constructing a Rate Matrix�������������������������������������������������������������������������������174
Traces����������������������������������������������������������������������������������������������������������������177
Computing Likelihoods��������������������������������������������������������������������������������������180

iv
Table of Contents

Chapter 11: Pattern Matching����������������������������������������������������������183


Constructors������������������������������������������������������������������������������������������������������185
Pattern Matching����������������������������������������������������������������������������������������������196
Lists������������������������������������������������������������������������������������������������������������������203
Search Trees�����������������������������������������������������������������������������������������������������207

Chapter 12: Dynamic Programming�������������������������������������������������215


Parsing Expressions������������������������������������������������������������������������������������������221
Evaluating Expressions�������������������������������������������������������������������������������������229
Fixing the Evaluation Environment��������������������������������������������������������������������242

Chapter 13: Conclusion���������������������������������������������������������������������247

References����������������������������������������������������������������������������������������249

Index�������������������������������������������������������������������������������������������������251

v
About the Author
Thomas Mailund is an associate professor in bioinformatics at Aarhus
University, Denmark. He has a background in math and computer science.
For the past decade, his main focus has been on genetics and evolutionary
studies, particularly comparative genomics, speciation, and gene flow
between emerging species. He has published Beginning Data Science in
R, Functional Programming in R, and Metaprogramming in R, all from
Apress, as well as other books.

vii
About the Technical Reviewer
Colin Fay works for ThinkR, a French agency
focused on everything R-related.
During the day, he helps companies
take full advantage of the power of R by
providing training (from beginner to
expert), tools (packages, shiny apps…), and
infrastructure. His main areas of expertise
are software engineering, analytics, and data
visualization.
During the night, Colin is a hyperactive open source developer and an
open data advocate. You can find a lot of his work on his GitHub account
(https://github.com/ColinFay).
He is also active in the data science community in France, especially
in his home town Rennes, where he founded the data-blogging web site
Data-Bzh.fr, co-founded the Breizh Data Club association, and organizes
the Breizh Data Club Meetups.
You can learn more about Colin via his web site at https://colinfay.me,
and you can find him on Twitter at https://twitter.com/_ColinFay.
To learn more about ThinkR, please visit www.thinkr.fr/,
https://github.com/ThinkR-­open, and https://twitter.com/Thinkr_FR.

ix
CHAPTER 1

Introduction
This book introduces embedded domain-specific languages in R. The
term domain-specific languages, or DSL, refers to programming languages
specialized for a particular purpose, as opposed to general-purpose
programming languages. Domain-specific languages ideally give you
a precise way of specifying tasks you want to do and goals you want to
achieve, within a specific context. Regular expressions are one example
of a domain-specific language, where you have a specialized notation
to express patterns of text. You can use this domain-specific language to
define text strings to search for or specify rules to modify text. Regular
expressions are often considered very hard to read, but they do provide
a useful language for describing text patterns. Another example of a
domain-­specific language is SQL—a language specialized for extracting
from and modifying a relational database. With SQL, you have an
expressive domain-specific language in which you can specify rules as to
which data points in a database you want to access or modify.

Who This Book Is For


This book is aimed at experienced R programmers. Some of the concepts
we cover in this book are advanced, so at the very least you should be
familiar with functional and object-oriented programming in R (although
the next chapter will review the object-oriented programming features

© Thomas Mailund 2018 1


T. Mailund, Domain-Specific Languages in R,
https://doi.org/10.1007/978-1-4842-3588-1_1
Chapter 1 Introduction

we will use). It will be helpful to have some experience with ­meta-­


programming when it comes to evaluating expressions in contexts that
interact with the surrounding R code. However, Chapter 7 gives a crash
course in the techniques we will use in this book, so you should be able to
pick it up with a little effort from there.

D
 omain-Specific Languages
With domain-specific languages we often distinguish between “external”
and “embedded” languages. Regular expressions and SQL are typically
specified as strings when you use them in a program, and these strings
must be parsed and interpreted when your program runs. In a sense,
they are languages separated from the programming language you use
them in. They need to be compiled separately and then called by the
main programming language. They are therefore considered “external”
languages. In contrast, embedded domain-specific languages provide
domain-specific languages expressed in the general-purpose language
in which they are used. In R, the grammar of graphics implemented in
ggplot2 or the data transformation operations implemented in dplyr
provides small languages—domain-specific languages—that you can use
from within R, and you write the programs for these languages in R as well.
Embedded DSLs extend the programming language in which you are
working. They provide more than what you usually find in a framework
in the form of functions and classes as they offer a high level of flexibility
in what you can do with them. They are programming languages, after
all, and you can express complex ideas and tasks in them. They provide a
language for expressing thoughts in a specific domain, so they do not give
you a general programming language as the language you use them from,
but they do extend that surrounding language with new expressive power.
However, being embedded in the general-purpose language means that
they will follow the rules you are familiar with there—or mostly, at least,

2
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Chapter 1 Introduction

since in languages such as R it is possible to modify the rules a bit using


so-called non-standard evaluation. You can expect the syntax of the
embedded DSL to follow the rules of the general-purpose language. The
semantics will be determined by the DSL, but when you write programs
in the DSL, the syntax is already familiar to you. If you implement a DSL
yourself, embedding it in a general-purpose language lets you reuse the
parsing and evaluation done by the general-purpose language so that you
can focus on designing the domain-specific language.
Implementing embedded domain-specific languages often involves
meta-programming; that is, it consists of treating the program you
are writing as data that you can manipulate from within the language
itself. This might sound more complicated than it is, but quite often,
it is reasonably straightforward to achieve. Using classes and operator
overloading, we can use R’s parser to parse embedded languages by simply
designing the language such that evaluating expressions automatically
parse them. This leaves us with data structures we, ourselves, have
defined, without us having to parse anything, and we can rewrite the
results of such parsed expressions in various ways before we evaluate them
to run the embedded program. Evaluating expressions can be relatively
straightforward or involve a deeper analysis of the parsed expressions.
To get a feel for what we can do with embedded domain-specific
languages, let’s consider a simple DSL: matrix multiplication (an example
we cover in more detail in Chapter 2). You might not think of matrix
expressions as much of a programming language, but the arithmetic
notation is highly efficient for expressing ideas in a limited domain. Just
imagine having to do mathematics without this notation. Of course, R
already supports this language—it has infix operators and the semantics
we associate with arithmetic expressions when we write them in an R
program. However, since matrix multiplication is a well-known task, it
serves as an excellent example to illustrate some of the things we can do if
we extend R with other smaller programming languages.

3
Chapter 1 Introduction

R already supports arithmetic with matrices, and if you use the


operator %*%, you can do matrix multiplication (if you use *, you will do
component-wise multiplication instead). Multiplications are done one at a
time, so if you have a series of them, such as this:

A %*% B %*% C %*% D

then the product will be computed from left to right, like this:

((A %*% B) %*% C) %*% D

For each multiplication, you produce a new matrix that will be used in
the next multiplication.
Now, matrix multiplication is associative, so you should be able to
set the parentheses in any way, as long as you respect the left-to-right
order of the matrices (matrix multiplication is not commutative, after
all), and you will get the same result. The running time, however, will
not be the same. We can do a small experiment to see this using the
microbenchmark package.

A <- matrix(1, nrow = 400, ncol = 300)


B <- matrix(1, nrow = 300, ncol = 30)
C <- matrix(1, nrow = 30, ncol = 500)
D <- matrix(1, nrow = 500, ncol = 400)

library(microbenchmark)
res <- microbenchmark(A %*% B %*% C %*% D,
                      ((A %*% B) %*% C) %*% D,
                      (A %*% (B %*% C)) %*% D,
                      (A %*% B) %*% (C %*% D),
                      A %*% (B %*% (C %*% D)),
                      A %*% ((B %*% C) %*% D))

options(microbenchmark.unit="relative")
print(res, signif = 3, order = "mean")

4
Chapter 1 Introduction

## Unit: relative
##                     expr  min   lq mean median
##  (A %*% B) %*% (C %*% D) 1.00 1.00 1.00   1.00
##  A %*% (B %*% (C %*% D)) 3.92 3.87 3.49   3.84
##      A %*% B %*% C %*% D 6.13 6.06 5.42   6.03
##  ((A %*% B) %*% C) %*% D 6.12 6.05 5.51   6.04
##  A %*% ((B %*% C) %*% D) 7.71 7.62 6.75   7.57
##  (A %*% (B %*% C)) %*% D 9.88 9.76 8.73   9.69
##    uq  max neval
##  1.00 1.00   100
##  3.62 1.41   100
##  5.57 2.06   100
##  5.61 2.35   100
##  7.00 2.30   100
##  8.99 3.71   100

Here, I’ve computed the matrix product in the five different possible
ways. There are six expressions, but the first two will compute the matrix
multiplication in the same order. With microbenchmark we compute each
expression 100 times and collect the time each evaluation takes. We collect
the time it takes to compute each expression, and here I have displayed
the running time relative to the fastest expression, sorted by the mean
evaluation time.
On average, there is almost a factor of ten between the fastest and
the slowest evaluation (for the slowest evaluations in the two cases the
difference is a factor of two, which is still a substantial relative difference).
There is something to be gained by setting parentheses optimally if we
multiply together several large matrices. The dimensions of matrices are
not necessarily known before runtime, however, so ideally we want to set
the parentheses when we evaluate expressions in an optimal way.

5
Chapter 1 Introduction

The approach we take in Chapter 2 is to delay the evaluation of


matrix multiplication and instead build a data structure for matrix
expressions, one we can evaluate later when we have the entire matrix
multiplication expression constructed. It is a simple DSL, but it contains
all the components we typically need in one: we need code for parsing
an expression and creating a representation of it, we need to do some
manipulation of expressions, and then we need to evaluate them.
For parsing expressions, we need to capture matrices and
multiplications. We wrap matrices in a class to make them objects of our
language, rather than plain R data.

m <- function(data) {
  structure(data,
            nrow = nrow(data),
            ncol = ncol(data),
            class = c("matrix_expr", class(data)))
}

The class matrix_expr is one we will use to overload the multiplication


operator, and we want all elements of this class to know their dimensions,
so when we wrap the data, we save the number of rows, nrow, and the
number of columns, ncol.
We also want to capture matrix multiplications, where we do not
evaluate the multiplication but simply save references to the matrices that
we want to multiply together.

matrix_mult <- function(A, B) {


  structure(list(left = A, right = B),
            nrow = nrow(A),
            ncol = ncol(B),
            class = c("matrix_mult", "matrix_expr"))
}

6
Chapter 1 Introduction

Of course, we do not want to write expressions as follows:

matrix_mult(matrix_mult(m(A), m(B), matrix_mult(m(C), m(D))))

so we overload the * operator:

`*.matrix_expr` <- function(A, B) {


  matrix_mult(A, B)
}

Now, this expression:

m(A) * m(B) * m(C) * m(D)

is our new syntax for the matrix multiplication, shown here:

A %*% B %*% C %*% D

except that the former expression only constructs a data structure


representing the expression. It does not evaluate it.
When we need to evaluate a matrix multiplication, we want to analyze
the delayed evaluation and rearrange the multiplication to get the optimal
performance. In Chapter 2 we will implement the functions rearrange_
matrix_mult and eval_matrix_mult that do this. Here, we just define a
function, v, for evaluating a matrix multiplication:

v <- function(expr)
    eval_matrix_expr(rearrange_matrix_expr(expr))

We can compare this automatic parentheses setting procedure with


the default evaluation and the optimal evaluation order we saw earlier.

res <- microbenchmark(A %*% B %*% C %*% D,


                      (A %*% B) %*% (C %*% D),
                      v(m(A) * m(B) * m(C) * m(D)))

options(microbenchmark.unit="relative")
print(res, signif = 3, order = "mean")

7
Chapter 1 Introduction

## Unit: relative
##                          expr  min   lq mean
##       (A %*% B) %*% (C %*% D) 1.00 1.00 1.00
##  v(m(A) * m(B) * m(C) * m(D)) 1.13 1.19 1.37
##           A %*% B %*% C %*% D 6.13 6.09 5.65
##  median   uq  max neval
##    1.00 1.00 1.00   100
##    1.23 1.26 1.19   100
##    6.08 5.99 2.19   100

The automatic solution is only slightly slower than the optimal solution
and about a factor of six better than the default evaluation.

8
CHAPTER 2

Matrix Expressions
In the next chapter we discuss computer languages in a more theoretical
way, but here we will consider a concrete case—the matrix expressions
mentioned in Chapter 1. This example is a relatively simple domain-­
specific language, but parsing matrix expressions, optimizing them, and
then evaluating them are all the phases we usually have to implement in
any DSL, and the implementation will also have examples of most of the
techniques we will cover in more detail later. The example will use some
tricks that I will not explain until later in the book, so some aspects might
not be evident at this point, but the broader strokes should be and will
ideally serve as a sneak peek of what follows in future chapters.
Our goal for writing a language for matrix expressions is to improve
upon the default performance of the built-in matrix expressions. We
achieve this by taking a more global view of expressions than R does—R
will handle each operator one at a time from left to right, but we will
analyze expressions and rearrange them to improve performance. These
are the steps we must take to do this:

1. Parse expressions into data that we can manipulate.

2. Rearrange the expressions into more efficient


expressions.

3. Provide a way to evaluate the expressions.

© Thomas Mailund 2018 9


T. Mailund, Domain-Specific Languages in R,
https://doi.org/10.1007/978-1-4842-3588-1_2
Chapter 2 Matrix Expressions

In this chapter, we use the following library:

library(microbenchmark)

P
 arsing Expressions
To keep things simple, we will only consider matrix multiplication and
matrix addition. We do not include scalar multiplication or inverting or
transposing matrices or any other functionality. Adding more components
of the expression language in the example will follow the same ideas as
we need for multiplication and addition. It will not teach us anything new
regarding embedding DSLs in R. When you understand the example, you
will be able to do this easily yourself.
With these restrictions, we can say that a matrix expression is either
just a matrix, the product of two matrix expressions, or the sum of two
matrix expressions. We can represent this as a class hierarchy with one
(abstract) superclass representing expressions and three (concrete)
subclasses for actual data, products, and sums. If you are not familiar with
object-oriented programming in R, we will have a short guide to everything
you need to know in Chapter 4. Constructors for creating objects of the
three concrete classes can look like these:

m <- function(data) {
  structure(list(data = data),
            nrow = nrow(data),
            ncol = ncol(data),
            def_expr = deparse(substitute(data)),
            class = c("matrix_data", "matrix_expr"))
}
matrix_mult <- function(A, B) {

10
Chapter 2 Matrix Expressions

  structure(list(left = A, right = B),


            nrow = nrow(A),
            ncol = ncol(B),
            class = c("matrix_mult", "matrix_expr"))
}
matrix_sum <- function(A, B) {
  structure(list(left = A, right = B),
            nrow = nrow(A),
            ncol = ncol(B),
            class = c("matrix_sum", "matrix_expr"))
}

We just wrap the parameters of the constructors in a list and set


the appropriate class attributes, and we store the number of rows and
number of columns because we will need them when optimizing matrix
multiplication, as we saw in Chapter 1.
The only purpose of the def_expr attribute we set in the m function is
pretty printing. It makes the output of the expressions we manipulate in
the following pages easier to follow. Strictly speaking, we do not need any
pretty printing for manipulating expressions, but it does make debugging
easier, so I tend always to write some code for that. For the matrix
expressions, we can use the following code:

toString.matrix_data <- function(x, ...) {


  paste0("[", attr(x, "def_expr"), "]")
}
toString.matrix_mult <- function(x, ...) {
  paste0("(", toString(x$left), " * ", toString(x$right), ")")
}
toString.matrix_sum <- function(x, ...) {
  paste0("(", toString(x$left), " + ", toString(x$right), ")")
}
print.matrix_expr <- function(x, ...) {

11
Chapter 2 Matrix Expressions

  cat(toString(x), "\n")
}

Using the constructors and the pretty-printing code, we can try to


construct a small expression.

A <- matrix(1, nrow = 10, ncol = 20)


B <- matrix(1, nrow = 20, ncol = 10)
C <- matrix(1, nrow = 10, ncol = 10)

matrix_sum(matrix_mult(m(A), m(B)), m(C))

## (([A] * [B]) + [C])

There is nothing in what we have done so far that qualifies as providing


a language as such. We have just implemented a few constructor functions.
However, if we overload the multiplication and addition operators for matrix
expressions, we get something that starts to resemble a language at least.

`*.matrix_expr` <- function(A, B) {


  stopifnot(ncol(A) == nrow(B))
  matrix_mult(A, B)
}
`+.matrix_expr` <- function(A, B) {
  stopifnot(dim(A) == dim(B))
  matrix_sum(A, B)
}

With these, we can write the same expression more familiarly.

m(A) * m(B) + m(C)

## (([A] * [B]) + [C])

12
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Chapter 2 Matrix Expressions

I have put some assertions—the calls to stopifnot()—into the code


for the operators to make sure that the dimensions of the matrices involved
in operators are valid. We could also have placed these in the constructor
functions, but later, we will manipulate expressions where we know that
the dimensions are valid, so we do not need to check them there. We do
not expect a user to call the constructors directly but use the operators, so
this is the natural place to put the checks.
We use the dim function for the sanity check in the addition operator,
so we need a version of this that works on matrix expressions. It could look
like this:

dim.matrix_expr <- function(x) {


  c(attr(x, "nrow"), attr(x, "ncol"))
}

You might be wondering why we need the m function. After all, it does
not contribute anything to expressions instead of just wrapping matrices.
Could we just use the matrices directly? The answer is no, and it has to
do with how we use operator overloading. For * and + to be the matrix
expression versions, we need the first arguments given to them to be a
matrix expression. If we wrote simply this:

A * B + C

## Error in A * B: non-conformable arrays

we would be invoking the operators for R’s matrix class instead. And since
* is not matrix multiplication (for that you need to use %*% because the *
operator is component-wise multiplication), you get an error.
We need a way of bootstrapping us from R’s matrices to the matrices in
our expression language. That is what we use m for.

13
Chapter 2 Matrix Expressions

M
 eta-Programming Parsing
Using an explicit function such as m to bootstrap us into the matrix
expression language is the simplest way to use R’s own parser for our
benefits, but it is not the only way. In R, we can manipulate expressions as
if they were data, a feature known as meta-programming and something we
return to in Chapter 5. For now, it suffices to know that an expression can
be explored recursively. We can use the predicate is.name to check whether
the expression refers to a variable, and we can use the predicate is.call
to check whether it is a function call—and all operators are function calls.
So, given an expression that does not use the m function and thus does not
enter our DSL, we can transform it into one that goes like this:

build_matrix_expr <- function(expr) {


  if (is.name(expr)) {
      return(substitute(m(name), list(name = expr)))
  }

  if (is.call(expr)) {
      if (expr[[1]] == as.name("("))
        return(build_matrix_expr(expr[[2]]))
      if (expr[[1]] == as.name("*") ||
          expr[[1]] == as.name("%*%")) {
          return(call('*',
                      build_matrix_expr(expr[[2]]),
                      build_matrix_expr(expr[[3]])))
      }
      if (expr[[1]] == as.name("+")) {
          return(call('+',
                      build_matrix_expr(expr[[2]]),
                      build_matrix_expr(expr[[3]])))
      }
  }

14
Chapter 2 Matrix Expressions

  stop(paste("Parse error for", expr))


}

In this implementation, we consider both * and %*% matrix


multiplication so that we would consider an R expression that uses
matrix multiplication as such. Notice also that we consider calls that are
parentheses. Parentheses are also function calls in R, and if we want to
allow our language to use parentheses, we have to deal with them—like
here, where we just continue the recursion. We did not have to worry
about that when we explicitly wrote expressions using m and operator
overloading because there R already took care of giving parentheses the
right semantics.
For this function to work, it needs a so-called quoted expression. If
we write a raw expression in R, then R will try to evaluate it before we
can manipulate it. We will get an error before we even get to rewrite the
expression.

build_matrix_expr(A * B)

## Error in A * B: non-conformable arrays

To avoid this, we need to quote the expression.

build_matrix_expr(quote(A * B))

## m(A) * m(B)

We can avoid having to explicitly quote expressions every time we


call the function by wrapping it in another function that does this for us.
If we call the function substitute on a function parameter, we get the
expression it contains so that we can write a function like this:

parse_matrix_expr <- function(expr) {


  expr <- substitute(expr)
  build_matrix_expr(expr)
}

15
Chapter 2 Matrix Expressions

Now, we do not need to quote expressions to do the rewriting.

parse_matrix_expr(A * B)

## m(A) * m(B)

This isn’t a perfect solution, and there are some pitfalls, among which
is that you cannot use this function from other functions directly. The
substitute function can be difficult to work with. The further problem
is that we are creating a new expression, but it’s an R expression and not
the data structure we want in our matrix expression language. You can
think of the R expression as a literate piece of code; it is not yet evaluated
to become the result we want. For that, we need the eval function, and
we need to evaluate the expression in the right context. Working with
expressions, especially evaluating expressions in different environments,
is among the more advanced aspects of R programming, so if it looks
complicated right now, do not despair. We cover it in detail in Chapter 7.
For now, we will just use this function:

parse_matrix_expr <- function(expr) {


  expr <- substitute(expr)
  modified_expr <- build_matrix_expr(expr)
  eval(modified_expr, parent.frame())
}

It gets the (quoted) expression, builds the corresponding matrix


expression, and then evaluates that expression in the “parent frame,”
which is the environment where we call the function. With this function,
we can get a data structure in our matrix language from an otherwise
ordinary R expression.

parse_matrix_expr(A * B)

## ([A] * [B])

16
Chapter 2 Matrix Expressions

The approach we take here involves translating one R expression into


another to use our m function to move us from R to matrix expressions.
This involves parsing the expression twice, once when we transform it
and again when we ask R to evaluate the result. The approach is also
less expressive than using the m function directly. We can call m with any
expression that generates a matrix, but in the expression transformation,
we only allow identifiers.
As an alternative, we can build the matrix expression directly using
our constructor functions. We will use matrix_mult and matrix_sum
when we have a call that is *, %*%, or +, and otherwise, we will call m. This
way, any expression we do not recognize as multiplication or addition
will be interpreted as a value we should consider a matrix. This approach,
however, adds one complication. When we call function m, we need to call
it with a value, but what we have when traversing the expression is quoted
expressions. We need to evaluate such expressions, and we need to do so
in the right environment. We will need to pass an environment along with
the traversal for this to work.

build_matrix_expr <- function(expr, env) {


  if (is.call(expr)) {
    if (expr[[1]] == as.name("("))
      return(build_matrix_expr(expr[[2]], env))
    if (expr[[1]] == as.name("*") || expr[[1]] == as.name("%*%"))
      return(matrix_mult(build_matrix_expr(expr[[2]], env),
                         build_matrix_expr(expr[[3]], env)))
    if (expr[[1]] == as.name("+"))
      return(matrix_sum(build_matrix_expr(expr[[2]], env),
                        build_matrix_expr(expr[[3]], env)))
  }
  data_matrix <- m(eval(expr, env))
  attr(data_matrix, "def_expr") <- deparse(expr)
  data_matrix
}
17
Random documents with unrelated
content Scribd suggests to you:
The Project Gutenberg eBook of Aus grauen
Mauern und grünen Weiten
This ebook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this ebook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.

Title: Aus grauen Mauern und grünen Weiten

Author: Gustav Riess

Release date: November 19, 2021 [eBook #66770]

Language: German

Credits: The Online Distributed Proofreading Team at


https://www.pgdp.net

*** START OF THE PROJECT GUTENBERG EBOOK AUS GRAUEN


MAUERN UND GRÜNEN WEITEN ***
Anmerkungen zur Transkription
Das Original ist in Fraktur gesetzt. Im Original gesperrter Text ist so ausgezeichnet. Im
Original in Antiqua gesetzter Text ist so markiert.
Weitere Anmerkungen zur Transkription befinden sich am Ende des Buches.
Aus grauen Mauern
und grünen Weiten
Schauen und Sinnen
auf Heimatwegen
Von

Gustav Rieß
»Nehmt die Wünschelrute deutschen
Findergeistes in die Hand, durchwandert
mit ihr die deutschen Städte, die
deutschen Fluren, die deutschen Wälder,
die deutschen Berge: und ihr werdet
Quellen finden und erschließen, aus
denen Tiefsinn und Schlichtheit,
Schönheit, Großartigkeit und Anmut,
Kraft und Milde, Erhabenheit und
Einfachheit in Überfülle hervorsprudeln,
als segenspendende Ströme für unser
Volk und für die Welt.«
Paul Graf v. Hoensbroech.

5. Band der Heimatbücherei


des Landesvereins Sächsischer Heimatschutz

Dresden 1924
Otto Wigand’sche Buchdruckerei G. m. b. H., Leipzig.
Meiner Frau und Wandergenossin
durch Heimat und Leben
Inhaltsverzeichnis.
Seite
1. Alt-Freibergs Romantik 5–19
2. Von festen Mauern und festen Herzen 20–59
3. Gesichte und Geschichten vom Freiberger Rathaus 60–103
4. Was der Petriturmknopf erzählt 104–125
5. Spruchweisheit in alter und neuer Zeit 126–170
6. Im Freiberger Dom 171–213
7. Vor der Goldenen Pforte 214–229
8. Haldenwanderung 230–243
9. Das Tännichttal im Tharandter Wald 244–272
10. Der Königstein 273–322
11. Eine Fahrt ins Weihnachtsland 323–361
12. O du fröhliche, o du selige Weihnachtszeit 362–370
Alt-Freibergs Romantik.

N
icht lange vor dem Kriege hatte ich mit meinem Freunde Heinz
eine köstliche Wanderfahrt ins Blaue mit dem Rade
unternommen. Die alten lieben Städtchen am Main, wie
Wertheim und Miltenberg, übten ihren mittelalterlichen Zauber, die
Landschaft und der Frankenwein ließ unsere Herzen höher schlagen.
Wie auf leichten Schwingen flogen wir durchs liebliche Taubertal.
Eines Tages war das alte herrliche Rothenburg o. T. unser lockendes
Ziel. Wir hatten das schöne Weickersheim mit seinem mächtigen
Hohenlohe-Schloß und vergessenem, verwunschenem, verträumtem
Park besucht und kamen gegen Sonnenuntergang über die Höhen
an den Rand des Taubertales. Wir traten aus dem Walde: da lag
plötzlich vor uns wie ein Märchen in rotglühendem Abendschein aus
duftigem Talgrunde aufsteigend die alte herrliche Stadt mit ihren
Mauern und Türmen, mit ihren Giebeln und Dächern und
malerischen Toren in wundervollem Umriß vor dem leuchtenden
Abendhimmel. Wir konnten nur stumm und atemlos schauen und
schauen und haben den unvergeßlichen Eindruck nie wieder aus
dem Herzen verloren. – Einige Jahre nach dem Kriege kam ich mit
der Bahn von Würzburg nach dem alten herrlichen Rothenburg, um
meiner Frau dieses Kleinod der Erinnerung zu zeigen. Wehe – ein
nüchterner Bahnhof, eine langweilige Landstraße zur Stadt – – nichts
von Romantik bis wir in der Stadt waren und der mittelalterliche
Zauber unsere empfänglichen, zunächst so enttäuschten und
ernüchterten Herzen wieder umsponnen hatte. –
Freiberg ist kein Rothenburg, und Tausend mögen durch seine
Gassen wandern ohne je eine Spur von Romantik oder
mittelalterlichem Zauber zu finden. Tausend mögen kopfschüttelnd
wieder davongehen mit enttäuschtem, ernüchtertem Herzen, weil
der karge, spröde, ernste Geist und Charakter der Stadt kein Lächeln
für sie fand, das ihre Seele aufschloß und warm machte, wie jenes
heitere, köstliche Stadtjuwel im Süden so leicht es vermag.
Und doch kann Romantik in Freiberg lebendig noch werden, wenn
auch die grausame Gegenwart unendlich viel davon geraubt hat. Die
rechte Stunde, den rechten Ort, die rechte Art zu schauen und zu
lauschen, muß man haben, muß man suchen und finden, dann wird
der Zauber lebendig und die verschütteten Brunnen der Erinnerung
fangen an zu strömen, verstummte Glocken tönen, die Augen und
Herzen werden sehend, das Verlorene ist wieder da und lebt und
füllt mit seinem wundersamen Leben und Weben die Stätten, welche
zuvor leer, öde, karg und nüchtern schienen. Öffne dein Herz der
Heimat, dann nimmt sie dich an ihr Herz und raunt dir wundersame
Kunde zu und stille Geheimnisse, die dich reich und froh und stille
machen. Heimat ist nicht Sache der verstandesmäßigen Vorstellung,
sondern der seelischen Empfindung. Die Heimat hat nur der, welcher
Heimatgefühl hat. Die Heimat liegt nicht draußen irgendwo, wo der
nüchterne Verstand und kritische Geist seine harten, kalten
Grenzsteine setzt, nein, wer sie sucht, der muß im eigenen Herzen
suchen, muß die Arme ausbreiten, wie das Kind der Mutter
entgegen, er muß glauben und lieben.
Willst du an das Herz und das innere Wesen der alten getreuen
Bergstadt herankommen, willst du willig den spröden Reiz ihrer
Herbheit kennenlernen und dir erobern, dann darfst du nicht mit der
Bahn zu ihr kommen und durch das geräuschvolle Gewühl des
nüchternen Bahnhofs und die Langweile der freudlosen
Bahnhofstraße in die Altstadt wandern.
Stelle dich mit mir an den Hang des Muldentales oberhalb
Halsbach im Osten der Stadt. Tief im Grunde windet sich die Mulde
zwischen den grünen Abhängen. Hie und da tritt der nackte Fels
schroff zutage. Häuser und kleine Gehöfte sind da und dort wie ein
Spielzeug hingestellt. Birken leuchten mit ihren weißen Stämmen
und winken mit ihrem grünen, zarten Schleier. Und droben,
gegenüber auf den Höhen, die aus dem Talgrunde aufsteigen, türmt
sich nicht ein malerisches Stadtbild mit Zinnen, Mauern und Toren,
es türmen sich riesenhafte Halden mit ihren Werkbauten, Stätten der
Arbeit vieler Jahrhunderte, die der Landschaft ihren Stempel
aufgedrückt hat. Die Romantik der Arbeit, die Romantik, welche in
die Tiefe der Erde, ins Dunkel hinabsteigt, die Schrecken der
Finsternis mit kühnem Wagemut und raschem Erfindergeist besiegt,
blinkende Schätze zutage fördert und aus dem Gestein der Tiefe
Berge zum Himmel türmt von gigantischer Wucht und
Denkmalsgröße, diese heroische Romantik der Arbeit schuf das
Landschaftsbild.
Stelle dich mit mir an den Hang des Muldentales am linken Ufer
gegenüber Muldenhütten. Wie ein schwarzer riesenhafter Kessel liegt
es vor dir im Grunde. Schwarz blinkend fließt die Mulde und trägt
weiße Schaumflocken, wie eine langsam gleitende gefleckte
Schlange der Unterwelt scheint sie in der Tiefe unheimlich zu
schleichen. Und es türmen sich bergaufwärts vom Grunde schwarze
Schlackenmauern, Dächer über Dächer, Häuser über Häuser, Giebel
über Giebel, die Essen rauchen und recken sich wie schlanke Türme
dazwischen, und es ist als zitterte und dröhnte eine ungeheure
Spannung, eine unbändige Lebenskraft und unzähmbare
Arbeitswucht im Körper eines gefesselten Riesen. Sein heißer Atem
stößt empor und flockt in weißlichen Wolken in den blauen Himmel
hinein. Kahle mächtige Halden schieben sich hervor mit steil
abstürzenden Seiten in ihrer schwarzen Nacktheit wie aus der
Unterwelt und Nacht emporgehobene Felsenklippen mit trotziger
Stirn in die flimmernde Welt des Lichtes starrend. Und darüber die
Talhänge in goldgelber Farbe des herbstlichen rauhen langen Grases
leuchten wie ein ungeheurer goldener Reif über dem Haupte des
arbeitenden Giganten. Romantik der Arbeit schuf dieses
Landschaftsbild als Ausdruck heroischer Schönheit und Kraft der
Industrie. – Wandere mit mir durch das Muldental, wo steil die
Halden der Bergwerke ins Tal abstürzen. Der Ludwigschacht mit
seinen riesenhaften Sturzmassen schwarzer Blöcke schiebt sich wie
ein gewaltiger Felsriegel dunkel und drohend ins Landschaftsbild.
Aus finsterem Stollenmundloch strömt das Wasser des Kunstgrabens
hervor und eilt hellgrün schimmernd neben unserem Pfad. Hie und
da ein Häuslein am Wege oder dort auf grüner Halde unter
leuchtenden Birken zierlich ein freundliches Idyll. Die Mulde strömt in
raschem Flusse bald dicht an unserem Wege, bald in weitem Bogen
im breiteren Talgrunde. Bald lieblich und freundlich, bald ernst und
schwermütig oder gar finster ist diese Landschaft des Muldentales,
geworden und gestaltet durch die Arbeit der Jahrhunderte, durch
das Ringen starker Fäuste von tausend Geschlechtern im
Bergmannskleid. Die Romantik der Arbeit mit Schlägel und Eisen
geht im Bergkittel und mit dem Bergleder neben dir auf dem Weg
durchs Muldental und raunt dir ins Ohr und fragt dich stolz: Wo gibt
es Täler, deren Eigenart und Schönheit, deren landschaftlicher
Charakter erst durch die industrielle Arbeit zu solcher Größe und
Bedeutung im Wandel der Zeiten emporgehoben ist? –
Und dann komm und steige mit mir den steilen Weg der alten
Dresdner Straße am linken Muldenhang, den Hammerberg, aufwärts,
vorbei an der riesigen Halde des Abrahamschachtes, deren schwarze
Steinmassen an der Straße zu mächtigen Mauern gepackt sind und
weiter hinauf in steiler Böschung sich türmen. Wir gehen zu der
etwa 100 m vom Wege rechts liegenden Grube Elisabeth, zur »Alten
Liese«, wie sie der Freiberger Volksmund nennt. Ihre
Grubengebäude über der mächtigen grau und weiß und gelblich
schimmernden Haldenböschung sind echte Charakterbauten des
Bergbaus mit ihren hohen, durch Fensterluken geteilten grauen
Dächern und niedrigen hellen Mauern. Als wären sie aus der Halde
gewachsen und geworden wie ein Naturgebilde, nicht wie gebaut
oder hingestellt, sind sie echt, wahr und bodenständig.
Da liegt die alte Bergstadt vor uns in malerischer Umrißlinie mit
ihren Türmen, Dächern und Giebeln, mit ihrer sturmerprobten,
verwitterten Stadtmauer und dem starken Donatsturm und dem
buschigen Grün der Wallpromenade im Vordergrunde. Die ruhende
Masse des Domes, die beiden Türme von Nikolai und als
stolzragende Krönung die Türme von St. Petri und Rathaus gliedern
das Stadtbild in klarem, klingendem Rhythmus. Lachende Felder und
Fluren weitumher, dort die grünen Wogen des Waldes, der bis in die
Stadt seine harzduftigen Grüße schickt, und in der Ferne die Linien
der Berge und Höhen, die in dem leuchtenden Himmel mit
wundersamer Zartheit ferner und ferner, weicher und weicher sich
zeichnen. Zu unseren Füßen blühende Gärten, in denen Kinder
lachen und spielen, und dort drüben ein andrer großer Garten, wo
stille Schläfer ruhen von ihrer Arbeit, der ehrwürdige Donatsfriedhof.
Vergangenheit und zukunftsfrohe Gegenwart, Geschichte, Sage
und tausend Erinnerungen, das Leben, welches heute in den alten
Gassen und Häusern wirkt und drängt, die Gestalten, Herzen und
Gedanken, welche diese Giebel und Mauern, Türme und
Straßenbilder einst schufen, darin lebten, liebten und schließlich dort
drüben ihre Ruhe fanden, alles vereinigt sich zu einem
geheimnisvollen Zauber, der verklärend über dem Alltag des Lebens
liegt und über Nüchternheit und kalte Prosa und graue Sorge erhebt.
Und mögen wir nichts wissen, was dort in jenen winkligen Gassen
und alten Häusern an Leid und Lust geschah, wir fühlen es, daß sie
viel erlebt haben und erzählen können, daß ihre heimlichen Worte
die Romantik uns erwecken könnten, die mit ihrem Lächeln das Herz
gewinnt und warm macht. Der Bergbau ist zur Rüste gegangen, aber
immer noch klingt seine Poesie über die Firste der alten Häuser,
wenn das Bergglöckchen noch läutet wie einst zur Schicht. Sie
schreitet durch die alten Gassen mit den schlichten Häusern und lugt
um die Ecken winkliger Straßen, die mit ihm jung waren, wo an
Portalen hie und da die Gestalt des Bergmanns oder das
Bergmannszeichen in Stein gehauen, Schlägel und Eisen, dich grüßt
oder irgendein frommer Spruch oder Gruß, wie ihn unsre Zeit nicht
mehr kennt. Poesie wandert hinaus zu den alten Schächten und
Halden, die wie Hünenmale uralter Zeit die Höhen rings um die Stadt
krönen. Sie steigt hinab in die tiefen dunklen Schächte, die jetzt so
still und einsam sind. Wo einst des Fäustels muntrer Schlag erklang,
»und sie gruben das Silber und das Gold bei der Nacht,« und wo das
funkelnde Erz aus schwarzer Tiefe zur strahlenden Sonne gleißend
emporstieg, wo man die Grubenwässer murmeln und fließen hört,
und die Gänge und Stollen in schweigender Finsternis sich tief unter
der Stadt und weit darüber hinaus wie ein ungeheures Netz
meilenweit erstrecken, da lugt sie aus Spalten und Klüften, da
huscht sie um die Ecken und Winkel, da hörst du sie flüstern vom
Berggeist, von Gnomen und Kobolden, von den märchenhaften
Schätzen der Berge, von den »Walen«, den zauberkundigen
Venetianern, die ihren Ort wußten, von all den Wundern der Tiefe,
die noch kein Menschenauge geschaut und der Erlösung harren, von
den Geheimnissen der Wünschelrute. Da werden die Schatten
lebendig, Vergangenheit wird Gegenwart, zeitlos und ohne Stunde
ist das Dasein. Du weißt nicht, ist es droben Tag oder Nacht,
Sommer oder Winter – eine Poesie ganz eigener Art hat dich in ihr
Reich geführt, hält dich in ihrer Macht. –
Dort der alte Donatsfriedhof, ist er nicht auch Poesie? Seit
400 Jahren fast schlafen im Ringe seiner altersgrauen Mauern
Freiberger Geschlechter. Sie zogen aus dem weiten Ringe der
starken Mauern der Stadt, aus ihren schönen steinernen Häusern in
den engeren Mauerring des alten Friedhofes, in die schmalen
hölzernen Wohnungen aus sechs Brettern. Über ihren alten Grüften
rauschen hohe Bäume. Um ihre schönen Denkmäler rankt sich der
Efeu und Heckenrosen, duftet der Flieder und jubeln die Singvögel
das Lied des Lebens und der unvergänglichen Liebe. – Pestzeiten
waren es, als Herzog Heinrich der Fromme 1531 diesen Friedhof
anzulegen befahl. Das Sterbeglöcklein stand nimmer still. Mit immer
neuer Furchtbarkeit erhob die Seuche ihr schreckliches Haupt und
erstickte mit ihrem giftigen Hauche das Leben, schonte weder jung
noch alt, nicht arm noch reich, nicht Mann noch Weib. Die Friedhöfe
an den Kirchen reichten nicht aus und aus den Grüften schien der
Tod allnächtlich aufzustehen und mit gespenstischer Faust an die
Türen von Hoch und Niedrig zu pochen, oder aus zahnlosem
Knochenmunde seine Opfer grinsend anzuhauchen. Da befahl der
Herzog, daß »wegen der Dünste, so sich in den gefährlichen und
geschwinden Sterbensläuften aus den Todtengräbern ziehen und
erheben, und manchen Menschen tödtlich vergiften mögen, daß ein
gemeines Begräbniß außerhalb der Stadt zu halten sei«. Wo die
Kapelle des heiligen Donatus stand, dicht vor dem Tor der Stadt, am
Wege nach der Grube Himmelfahrt, zog man den ovalen Mauerring
um die neue Stadt der Toten. Sinnvolle Beziehungen für gläubige
Herzen mag man daraus erkennen: draußen der Weg der
Bergknappen zur Arbeitsschicht in das Dunkel der Grube
Himmelfahrt, drinnen der Gang zur letzten Schicht in das Dunkel
einer Grube, deren Rätsel noch kein Wissen erleuchtet hat, die der
Glaube in den Sprüchen auf Steinen und Kreuzen als »Himmelfahrt«
deutet. Wie ist es doch auch so sinnig und tief empfunden, den
ernsten Baum, der so feierlich und schön an den Gräbern steht,
»Lebensbaum« zu nennen, und so in einem Namen sinnbildlich eine
ganze Lebens-, Welt- und Religionsauffassung zusammenzufassen,
nämlich, daß es keinen Tod gibt, sondern nur Wechsel und
Übergang, Himmelfahrt.
Auf dem ergreifenden Gefallenen-Gedächtnismal des Friedhofs
stehen die Worte: »Euer Tod soll Leben werden, deutscher Zukunft
edle Saat.« Saat ist Leben und Sterben, Saat ist Tun und Denken,
Saat ist Anfang, Ernte ist Vollendung. –
Eine tiefe, sinnige Poesie lebt so in den grünen Räumen des alten
Friedhofes, der Ruhestätte des alten Freibergs, heute der
stimmungsvolle Vorhof der neueren weiten Gräberfelder. – –
Wo sollen wir noch die Poesie und Romantik in Freiberg suchen?
Ach, du brauchst sie nicht zu suchen, denn draußen, über das
Friedhofstor hinweg, siehst du den gewaltigen Donatsturm ragen
und in den Friedhof hineinschauen. Als Wahrzeichen der Stadt reckt
sich seine wuchtige Gestalt empor wie ein Bild echten Bürgertrotzes
und kernhafter Treue. Die Dohlen, die in den zahlreichen
Mauerlöchern unzugänglich nisten, gehören zum Turm, wie seine
Gestalt ins Bild der Stadt. Da scharen sich die schwarzen Gesellen
zusammen zu einer Wolke, zu einem flatternden Geschwader;
schreiend beraten sie, wohin der Flug sie tragen soll. Zum
Spittelwald? Hin und her schwebt die Wolke, bald dicht
zusammengeballt, bald weit auseinandergezogen droben in der
blauen Luft und entschwindet schließlich in der Ferne am Saume des
Waldes. Der Donatsturm, die Stadtmauern mit ihren alten
Verteidigungswerken und Türmen, mit den Gräben, in denen jetzt
die Bäume rauschen, wissen zu erzählen von alter Zeit, und ihre
Steine reden von Kampf und Blut und Not und dem Heldentum
schlichter Bürgertreue. Da klirrt es von Waffen, da kracht es aus den
groben Stücken und Kartaunen, da rühmt es von kühner Tat, da
raunt es aber auch von Verrat, da ist die Romantik der Geschichte
lebendig, deren Zeuge diese Mauern und Steine waren. –
Und mitten im Herzen der Stadt, wo der Puls des Lebens am
kräftigsten, am raschesten pocht, lacht oft die Poesie aus blanken
jungen Augen, die Poesie der Jugend und fröhlicher Burschenzeit
trotz trüber schwerer Gegenwart. Der Marktbrunnen rauscht und
plätschert neben dir. Aus breitem vierteiligem Granitbecken steigt die
wuchtige Mittelsäule auf, die vier kleinere Becken mit
wasserspeienden Löwenköpfen trägt. Die Bronzegestalt Ottos des
Reichen, des Gründers der Stadt steht mit wallendem Mantel in
Panzer und Helm als Säulenheiliger oben auf dem romanischen
Schaft und hält die Gründungsurkunde in der Rechten, den Griff des
langen Schwertes in der Linken. Vier Bronzelöwen halten am Sockel
der Säule Wacht und speien im Bogen Wasser in die unteren
Granitschalen. Das unvermischte nasse Wasser, wie hier von allen
Seiten es den Wettiner wie einen Wassergott umsprüht, umrieselt,
umplätschert, und die von Löwen bewachte Säuleneinsamkeit dort
oben mag nicht sein besonderer fürstlicher Geschmack gewesen
sein. Das empfinden die Herren Studenten, denen anderer Stoff
lieber ist als Wasser, mit unfehlbarem Feingefühl und wie der
Hanfried auf dem Markte zu Jena spürt auch der reiche Otto flotten
Burschengeist und kecken Übermut.
Nacht ist es. Der Vollmond leuchtet mit märchenhaftem Schein
über die alten Giebel. Wie Silber blinken die Dächer und Erker der
ehrwürdigen Häuser und blinzeln mit verschlafenen Augen in die
Träume der Nacht. Der Rathausturm ragt hoch in den schimmernden
Glanz. Wie das große rote Auge eines Zyklopen schaut seine Uhr auf
den stillen Markt, als wollte es spähen und wachen für die Sicherheit
der Stadt, ob nicht in den breiten schwarzen Schatten der Häuser
oder in den engen Finsternissen der Straßenmündungen sich
Geheimnisse verbergen. Da regt es sich gespensterhaft. Da klingt es
wie heimliches Gemurmel. Ein Klappen, ein Schleifen, ein Trappeln
und Huschen. Im Gänsemarsch zieht es herbei und bewegt sich im
großen Kreise um den Brunnen, wie eine geisterhafte Prozession. Ein
Ruck, die Prozession erstarrt, ein leises Kommando und ein kräftiger
Salamander steigt auf dem granitenen Brunnenrand oder auf dem
schwarzen Stein, da Kunz von Kaufungen, der Prinzenräuber, einst
enthauptet wurde, eine Ansprache an den ehernen Brunnenfürsten
dort oben, der wahrhaftig sein hartes Gesicht zum Lächeln verzieht,
ein Prosit auf sein wässeriges Wohl in braunem Bier, das seine
steifen Lippen nicht erreicht, ein brausender Burschensang, der von
den Häuserwänden widerhallt, ein »Glückauf, Glückauf, der Steiger
kommt« und der Spuk ist spurlos verschwunden, als die Polizei
erscheint. – Ruhig grinsend spucken die Löwen ihr Wasser im
plätschernden Bogen, ein Philister schimpft zum Fenster heraus und
Otto der Reiche guckt in den Mond. –
O Mondnachtmärchen und Mitternachtszauber am Obermarkt!
O Romantik jugendfrischer Studentenzeit, wie steigst du auf und
lächelst dem Frohsinn ungebrochener Jugendlust und übermütiger
Studentenstreiche. Auch der Löwenritt zwischen sprudelnden
Strahlen und tiefem Wasserbecken zu mitternächtiger Stunde,
unmittelbar angesichts der Polizeiwache, hat gar manchem üppigen
Füchslein zu unfreiwilligem Bad oder Strafmandat, dem bronzenen
Säulenheiligen dort oben aber öfter zu einer »feuchtfröhlichen«
Huldigung in seinem steifen Dasein verholfen. Ja einstmals hielt
dieser hochgestellte Erzheilige am Morgen eine große Klingel in der
Hand, welche am verborgenen Drahte gezogen, frisch in den Morgen
schellte, als wäre er der Ortsdiener und wollte seinen getreuen
Freibergern ausschellen, daß der alte Burschengeist noch lebt. –
Was wallen die bunten Studentenfahnen aus den Fenstern, wo ein
flotter Bursche wohnt, und flattern fröhlich im zausenden Winde,
wenn irgendein Verbindungsfest oder ein Ehrentag der ehrwürdigen
alma mater im Reigen der Zeit uns grüßt! Sie werfen buntjubelnde
Freude ins Straßenbild. Der behäbige Bürger lächelt zu ihnen empor
und freut sich, wenn die schlanken Burschen durch die farbenfrohe
Poesie ihrer Jugend den grauen Alltag vergolden. Es lächeln aber
auch lieblich verschämt oder auch keck und bewußt, je nach
Temperament, die jungen Damen, wenn abends um 6 Uhr auf dem
Bummel an der östlichen Marktseite die bunten Farben sich zeigen
und mancher Gruß und mancher Wink aus schönen Augen spricht
von Suchen und Finden, von Maienzeit und seligem Hoffen – »denn
du weißt, du weißt es ja!«
Wenn der neue Rektor der Bergakademie durch seine Studenten
mit einem Fackelzug begrüßt und der Scheidende zum Abschied
geehrt wurde, was war das für ein Leben in der alten Bergstadt! Der
Ausschuß der Studierenden in seiner eigenartigen kleidsamen
bergmännischen Tracht voran, die bunten Farben und Mützen,
Pekeschen und Jacken in reichem lebendigen Wechsel, der kräftige
Sang froher Burschenlieder, die lodernden Fackeln mit ihrer roten
Glut in den alten Gassen, die jugendfrohe, frische Begeisterung in
lachenden, leuchtenden Augen, und herzudrängend in froher
Teilnahme alt und jung, die liebe Mädchenwelt und die begeisterten
Schüler, als wäre es ein Fest der ganzen Stadt, nicht bloß der alma
mater: die Poesie des ganzen Studentenlebens schien sich in einem
lachenden Bilde zusammenzuschließen. – Die harte Not der Zeit hat
dieses herrliche Bild in den letzten Jahren nicht wieder lebendig
werden lassen, hat die lodernden Fackeln ausgelöscht, hat aber nicht
den feurigen Mut löschen können, der in den jungen begeisterten
Herzen lebt, der auch das deutsche Leid überwinden wird.
»Frei ist der Bursch« klingt und singt es durch die Straßen nicht
minder als durch die Herzen in Alt-Freiberg, der einzigen sächsischen
Stadt, die noch den Zauber der Romantik studentischen Lebens bei
allem tiefgründigen Ernst der Arbeit trotz aller Lebensnot uns spüren
läßt. Wie klingen die alten Bergmannslieder, wie jauchzt das
»Glückauf« in begeistertem Zuruf in froher studentischer Runde und
machen die Romantik der bergmännischen Vergangenheit der Stadt
und der eigenen bergmännischen Zukunft den jungen Sängern voll
Begeisterung lebendig: »Glück auf! ihr Bergleut’, jung und alt!« Und
wenn der Bursche hinauszieht ins Philisterland, wie begleitet ihn
noch die Poesie bis in die rauchige Prosa der Bahnhofshalle, wenn
das Abschiedslied in mächtigem Chore klingt und die farbigen
Mützen dem Scheidenden winken: »Sing sang und kling klang, es
zog ein Bursch hinaus in die Welt. Sing sang und kling klang, es zog
ein Bursch hinaus!« – Die Fahrgäste schauen und winken mit aus
dem Zuge, der aus der Halle schnaubend davonkeucht. Die Poesie
Alt-Freiberger Romantik und frischen Burschengeistes hat sie berührt
und klingt in ihren Herzen noch, wenn längst die Petritürme am
Horizont versunken sind.
Ja die Romantik der Stadt! Wandere durch den Dom, tritt vor die
goldene Pforte oder vor die schwarze Rüstung des Kurfürsten Moritz
aus der Todesschlacht von Sievershausen, stelle dich unter die
Torstensonlinde und laß dir von ihren Blättern zuraunen, wie der
podagrageplagte Feldherr über das »Hexennest« Freiberg fluchte,
oder steige hinab in das Verließ des Kunz von Kaufungen, oder
denke an Friederikus Rex, wie er durch Freibergs Straßen ritt, oder
an nächtliche Bergparaden beim wuchtigen, ehernen Klange der
russischen Hörner bei Fackelschein und rhythmischer Bewegung der
brennenden Froschlampen, denke an die feierlichen
Leichenbegängnisse in düsterer Pracht, wenn ein Fürst im Dome
beigesetzt wurde. Die Bilder drängen sich, Gestalten und Männer
treten vor dein Auge und Herz und füllen dich mit Heimatstolz, denn
nun erst hat die Stadt eine Seele bekommen, eine Seele, die mit dir
wandert und spricht; du hast die Seele der Heimat gefunden.
Ja die Romantik in Freibergs Mauern, das ist die Geschichte der
Stadt, die in ihr lebendig wird und in Erinnerungen redet. Ihrem
ernsten Gewande braucht man nicht den Flitterkram phantasievoller
Erfindung anzuhängen, um zu fesseln, zu packen und zum Sinnen
und Denken und innerlichen Schauen anzuregen, daß es uns nicht
wieder losläßt. Vieles ist vergessen, zerstört, hinabgesunken in das
dunkle Reich des Schweigens, aber schaut die alten Häuser und
Mauern, die alten schönen Portale, den herrlichen Dom mit seiner
goldenen Pforte, den Kanzeln und der Wettiner Gruft, die anderen
Kirchen, die altertümliche »Thümerei« mit ihren Museumsschätzen,
das Rathaus mit dem, was diese Bauten in sich bergen, blättert in
den alten Chroniken, Urkunden oder Akten, dann steigt es herauf
und wird wieder lebendig, dann blüht ein verklärendes Lächeln auf,
das Lächeln, das wie ein geheimnisvoller Zauber die alte getreue
Bergstadt verschönt und die Herzen an sie fesselt. Verschüttete
Brunnen der Erinnerung fangen an zu strömen, verstummte Glocken
tönen, versunkene, verwunschene Schätze steigen empor, die Augen
und Herzen werden sehend, das Verlorene ist wieder da und lebt
und füllt mit seinem wundersamen Leben und Weben die Stätten,
welche zuvor leer, öde, karg, ernst und kalt und nüchtern schienen:
Du hast die Seele der Heimat gefunden.
Von festen Mauern und festen
Herzen.

D
rei trotzige Türme mit Zinnen und flachen Kegeldächern, und ein
zinnengekröntes Mauertor, in dem ein Herzschild mit
wehrhaftem Löwen den Zugang sperrt, das ist das Wappen des
alten Vriberch, »Sigillum Burgensium in Vriberch«, »das Siegel der
Bürger in Vriberch«. An einer der ältesten erhaltenen Freiberger
Urkunden von 1227 hängt es bedeutungsvoll, und man darf
annehmen, daß seit der Stadtgründung, etwa 50 Jahre zuvor, dieses
Wappen geführt wurde und den Stolz und trutzigen Sinn der Stadt
auf dem freien Berge, der deutschen Bergmannsstadt in slavischer
Wildnis, zum Ausdruck brachte. Dieses Siegel sagte Freund und
Feind, daß die junge Stadt eine ummauerte, wohlbefestigte sei, an
deren Toren der Freiberger Löwe Wache hält und seine Klauen zum
mächtigen Schlage dem Freunde zum Schutz, dem Feinde zum Trutz
erhebt. Ein »redendes« Wappen, dessen Rede im Lauf der
Geschichte zu Taten wurde.
Durch alle Jahrhunderte hat die Stadt dies Wappen mit den
silbernen Türmen geführt, festgegründet auf silberdurchwachsenem
freiem Felsengrunde.
Märchen gingen durch alle Lande von dem wunderbaren Reichtum
der Stadt, wo die Ziegel auf den Dächern von Silber wären, und
Bürger und Bergmann von Gold und Silber speisten. Wie ein
Märchen aus Tausendundeiner Nacht klingt es z. B., was uns der
Chronist über das große Turnier berichtet, welches im Jahre 1263
der Markgraf Heinrich der Erlauchte von dem Freiberger Silber in
Nordhausen ausrichtete: »Da er in der Mitte der Bahn einen gantzen
silbernen Baum aufrichten lassen von halb gülden und halb silbern
Blettern, auch einem jeden, welcher im rennen seinen Speer
gebrochen, und auf dem Rosse sitzen blieben, ein silbern Blat,
welcher aber den andern gar herabgestochen, ein gülden Blat
verehret; dabey denn eine solche kostbare Zubereitung in allen
Sachen gewesen, und gegenwärtige Fürsten, Graffen, Herren, Ritter
und Adels Personen 8 Tage nacheinander dermassen stadlich
tractiret worden, daß es, wie die alten historici berichten, einem
Keyser schwer würde gefallen seyn, solches nachzuthun.« Von
diesem Markgraf sagte man, daß er durch seinen »fürtrefflichen
Reichthum gantz Böhmen mit baaren Gelde hette bezahlen, auch
sonst andere Länder an sich und seine Nachkommen bringen
können«. Auch die Chronik der Stadt Schneeberg, welche 1470
gegründet war, berichtet aus dem Jahre 1477: »Auch war in St.
Georgen die große Silber-Stuffe wie ein Tisch verstrosset, darauff
Herzog Albrecht Tafel gehalten und daraus hernachmals 400 Zentner
Silber geschmelzet worden.«
Solche reiche Silberausbeute mußte wohl märchenhaft erscheinen
und die Phantasie des Volkes mächtig anregen.
Hat man doch sogar in neuerer Zeit noch erstaunliche Funde
gediegenen Silbers gemacht, wie z. B. im Jahre 1847 auf der Grube
Himmelfahrt 17 Zentner auf einem Gangkreuz, im Jahre 1857 auf
der Grube Himmelfürst sogar 91 Zentner plattenförmig auf einem
Punkte beisammen. Da war es kein Wunder, daß in der Zeit, als das
Silber fast zu Tage lag und das Erz mühelos gebrochen wurde,
Markgraf Otto, der Gründer der Stadt, der »Reiche« genannt wurde,
daß er dieses Schatzkästlein mit festen Mauern und Türmen umgab,
und daß er die Wehrhaftigkeit durch Siegel und Wappen besonders
betonte. Reste dieser ersten Mauer darf man wohl heute noch in den
unteren Teilen der erhaltenen alten Stadtmauer am Donatsring
vermuten. Ein stolzes Bild hat durch die Jahrhunderte die
mauerumgürtete, turmgekrönte, zinnenumwehrte Stadt geboten,
namentlich nachdem im Laufe des Mittelalters alle Erfahrungen und
Künste der Befestigung und des Wehrbaues an ihre
Wehrhaftmachung gesetzt waren. Sie war mit doppelten Mauern,
44 Türmen, fünf starken Torbauten, mit Gräben und breiten Teichen
gesichert.
Der Chronist Möller schreibt im Jahre 1653:
»Die Ringmawern sind dick und stark, umb und umb zwiefächtig
mit einem Zwinger. Die eine ist sehr hoch, und mit vielen Außwerken
und Thürmen befestiget. Die andere, welche sonst die Zwinger
Mawer genennet wird, ist etwas niedriger, und hat auch etliche
besondere Thürmlein und Außwerke. Für den Ringmawern gehet
umb die Stadt ein tieffer gefütterter Graben, welcher zum theil voll
Wasser, zum theil leer ist. Man hat für diesen zur Lust etliche Stücke
Wild drinnen gehalten und vermehret, wie auch noch bei Mannes
gedenken etliche weisse Hirsche, sampt anderen Stücken, von der
hohen Obrigkeit deßwegen dahin gesendet, und der Stadt verehret
worden.
In den Ringmawern seynd fünff Haupt Thore, welche alle mit
festen Thürmen, Brustwehren, Rondelen, hangenden Zugbrücken,
und drey unterschiedlichen grossen Pforten, theils auch mit starken
Schutzgattern, und anderen zur Defension und wider feindlichen
Anlauff gehörenden Stücken wol verwahret seynd.«
Möller erwähnt hier nicht die Befestigung durch die Teiche,
obschon sie bereits auf dem Stadtplan von 1554 vorhanden sind.
Vom Peterstor bis dicht zum Meißner Tor, zehn an der Zahl, waren
sie mit ihren senkrechten gemauerten Ufern oder Böschungen ein
starkes Hindernis noch vor der Stadtmauer. Auch heute noch bietet
sich, namentlich im Winter, dem Blicke, z. B. über den Schlüsselteich,
auf die hohen Mauern und Türme ein trotziges stolzes Bild der alten
Wehrhaftigkeit.
Von den fünf starken Torbauten ist nichts erhalten geblieben als
der gewaltige Donatsturm im Osten der Stadt. Immer noch steht er,
als kraftvolles Wahrzeichen der Stadt, wie ein treuer Wächter und
ragt weit über Dächer und Giebel in die blaue Luft. Wie zu
unzerstörbaren Felsenmauern gefügt türmen sich seine braunen und
schwarzen Gneisquadern zu mächtigem Rundbau empor. 5 m stark
sind seine Wände, so daß er auch für die schwersten Geschütze der
älteren Zeit als unzerstörbar gelten mußte. Sein Umfang ist 44 m,
sein Durchmesser 14 m und seine Höhe 29 m. So ragt er gen
Himmel, über die Stadt und die Jahrhunderte, wie ein trotziger Fels,
an dem die Wogen der Zeit und die Stürme des Schicksals sich
brechen und zerstieben.
Die Rüstlöcher der fleißigen Werkleute sind in regelmäßigen
Abständen sein einziger Schmuck. Schießscharten mit Rundöffnung
für die Rohre der kleinen Feldschlangen, Geschütze, Doppelhaken
und Falkonetlein und mit Schlitzen für die Beobachtung und den
Abzug der Pulvergase durchbrechen im oberen Teil des Turmes 18 m
über der Erde in drei Reihen übereinander von je neun Stück das
Mauerwerk und sind von innen durch gewölbte, tunnelartige,
ringförmige Umgänge im Mauerkerne zugänglich. Oben öffnen sich
im Ringe dicht unter dem spitzen Kegeldach die neun Schießluken
oder Scharten für die groben Stücke. Von hier brüllten sie dem
Feinde ihre rauhen Grüße zu. Die letzten Kanonen sollen erst 1796
herabgestürzt und von Hammerschmieden als altes Eisen gekauft
worden sein.
Im vorigen Jahrhundert erst wurde das eigentliche Tor mit dem
weitvorspringenden Rondell abgebrochen, und weit klaffte die große
Lücke zwischen dem mächtigen Turm und dem Reste der
Stadtmauer. Erst im Jahre 1922 wurde von mir ein Wohnhaus für die
Stadt dort errichtet. Durch weitgespannten Torbogen ist es mit dem
Turm verbunden und zu einer malerischen, geschlossenen Gruppe
zusammengefaßt, welche das Straßenbild abschließt. Am Tor ließ ich
in Sandstein die Sprüche meißeln: »Gemeinwohl geht über dein
Wohl« und »Eintracht bricht Not, Zwietracht bringt Tod«. Dafür ist
der Turm selbst Zeuge und Mahnung durch seine Entstehung und
seine Geschichte.
Bergmannstreue soll ja diesen starken Schutz und Wächter der
Stadt geschaffen haben, indem jeder Bergmann für das Gemeinwohl
sich von seinem Schichtlohn einen Betrag kürzen ließ, und indem er
selbst mit Hand anlegte. So wuchs das Bollwerk empor, seiner
Bestimmung entgegen und hat in den Stürmen der Jahrhunderte
unerschüttert und unzerstörbar, wuchtig und stolz seinen Platz in der
Mauer, im Stadtbilde und vor dem Feinde ausgefüllt, denn Eintracht
bricht Not, Zwietracht bringt Tod!
Er sah trotzig hernieder mit seiner Felsenstirn auf Sorben und
Hussiten, auf Wallensteins Söldner und schwedische Heerscharen,
auf die Füsiliere des Friderikus Rex, auf Napoleons Truppen und die
Sieger von 70. Wie brandete um seine Mauern die sturmbewegte
Geschichte der Stadt und der ganzen Heimat! Er hörte einst die
dunkle bittere Kunde von Sievershausen, da Herzog Moritz, die
Hoffnung des evangelischen Deutschlands, fiel, von Lützen, da
Gustav Adolf starb, die Siegeskunde von Leuthen und Leipzig, die
Schmach von Jena, von Moskaus Brand und von dem Fall von Paris,
von Sedan, von Lüttich, Tannenberg und Skagerrak. Das deutsche
Leid sank lastend auf ihn nieder, und schwarze Wolken deckten
blühende Fluren.
An ihm rumpelte die gelbe Postkutsche mit hellem Hornruf vorbei,
und lustige Wagen mit Maien und lachenden Mädchen, und auch der
dunkle Wagen mit seinen schwarzen Rossen zum nahen
Donatsfriedhof und seinem grünen Frieden. So viele
Bergmannsgeschlechter, die längst vergessen dort der Ewigkeit
entgegenschlummern, hat er gekannt, wie sie als Kinder zu seinen
Füßen spielten.
Johann Tetzel verkaufte zu seinen Füßen seine Ablaßzettel an die
Bergknappen und schleppte viel Geld mit fort, denn er predigte, daß
alle Schächte verfallen würden, wenn man nicht reichliche Spenden
in seinen Ablaßkasten werfen würde. Bruder Martinus, der
Bergmannssohn aus Wittenberg sah vielleicht mit seinen tiefen
Augen dieses trotzige Bollwerk der Stadt, den Psalm und sein Lied
von der festen Burg im Herzen. Er trug Seelen und Herzen mit sich
fort und riß die Geister zu höherem Fluge mit sich empor.
Des Alten Fritzen blaues Königsauge maß den alten Turmrecken
mit prüfendem Feldherrnblick, nachdem er schon sechs Jahre im
Heldenkampfe siegreich einer Welt von Feinden Trotz geboten und
neuen Lorbeer um seine kriegs- und siegesmüde Stirn geflochten.
Humboldt, der die Welt umwanderte und neu als Kosmos in seinen
Werken erstehen ließ, Goethe, der eine Welt in seinem Herzen trug,
und neue Geisteswelten schuf und deutschen Geistes stolze Stirn zu
den Sternen hob, sie schauten empor zum alten Turm, der wie etwas
Zeitloses am Wege steht und mit stummer Sprache raunt von ewigen
Dingen.
Theodor Körner im Bergkittel sang zu ihm seine Burschen- und
Bergmannslieder empor und trug seine begeisterte Seele von hier
wie einen lodernden Opferbrand ins Morgenrot der Freiheit.
An ihm schritt der Handwerksbursche vorbei, die Wahrzeichen der
Stadt sich noch einmal bedenkend, hinaus, wo ihm das Leben und
die Zukunft lachte.
Der Bergmann zog vorüber mit Glückauf zur Schicht in schwarzer
Tiefe, zum Schacht anfahrend, dessen Glöckchen traulich
herüberklang.
Die Wogen und Wellen der Zeit und der Menschen strömten dahin.
Das Tor und die Mauern fielen zum Teil. Der alte, graue, riesige
Wächter aber blieb und sah sinnend, wie zu seinen Füßen buntes
Bürgerleben hinausquoll über Wälle und Gräben, wie die frische
neue Jugend hinausdrängte in Gärten und Grün, in Wälder und
Berge, zu Sport und Spiel, in Sonnenglück und stählende Winterlust,
wenn sie Gott oder ihrer eignen Seele tiefste Sehnsucht fühlten im
Wehen der Halme, im Rauschen der Bäume, im weißen Glanz der
Winterpracht, in den Wundern der Weite, als sie die Heimat fanden
und immer wieder suchten in Sehnsucht und in der Heimat die Seele
und die Kraft, welche sie gesund und reich macht.
Goldene Volkslieder klingen empor zu ihm wie aus dem
Zauberbrunnen der Märchenzeit, die süßen Wunderweisen von
Schubert und Silcher. Sehnsuchtsklänge von Herrmann Löns und
erzgebirgischer Heimatsang von Anton Günther ranken sich mit
Lautenklang um die mondscheinumflimmerten Mauern des Turmes
und der alten Stadt.
Der alte graue Landsknecht aber, mit seinen mächtigen breiten
Schultern, der alte getreue Ekkehard und Hüter der Stadt schaut
hernieder und lächelt über das bunte Getriebe, über das Lieben und
Leiden, das Eilen und Weilen, das Hasten und Rasten, das Jagen und
Plagen der Ameisen zu seinen Füßen.
Wie um seine Stirn die Dohlen schreien und flattern, abstreichen
und heranschweben, so eilen und ändern sich Geschichte,
Geschlechter und Geschicke; Seelen und Gedanken flattern und
schweben. Warum? Wohin?
Der Donatsfriedhof, der Gottesacker mit seinen rätselhaften
Schollen, die Jahrhundert für Jahrhundert immer aufs neue
umgestürzt werden, ist so nah, in dem von Ewigkeit so viel
gesprochen wird, und die Vergänglichkeit so grausam uns ins Antlitz
starrt, in dem die Blumen der Hoffnung und die Dornen der
Verzweiflung dicht nebeneinander wachsen, welken und immer
wieder sprießen, in dem die Fragen und die Rätsel keimen, und die
bangende Seele Antwort und Lösung pflücken will und sucht, bis ihr
hier draußen die Antwort wird, wenn einst hinter dem dunklen Tor
sich ihr die letzten Rätsel lösen.
Wohin rinnt der Strom des Lebens, der unaufhaltsam durch die
Jahrhunderte fließt, an dessen Ufer der alte Turm wie ein Felsen
unerschüttert steht? Über ihn spannt sich des Himmels unendliches
dunkles Gewölbe mit seinen Myriaden flimmernder Welten. Ein Stern
schießt seine leuchtende Bahn in weitem Bogen und ist
verschwunden. Warum? Wohin?
Weltall und Ewigkeit – unfaßbare Gedanken nicht auszudenkender
Gewalt! Menschenseele! nicht faßbares Wunder von unerklärlicher
Größe! Leben und Vergänglichkeit, Menschenseele und Ewigkeit, die
Rätselfragen alles Seins, schweben empor über die
mondscheinumflimmerten Dächer. Nie gestillte, nie erfüllte dürstende
Sehnsuchtsgedanken wandern in den dunklen Abgrund des Weltalls,
in die schweigenden dunkelblauen Fluren der Unendlichkeit.

Selig sind, die da Heimweh haben,


Denn sie sollen nach Hause kommen.
––––––––––
Die anderen Tore schienen wohl auch für die Ewigkeit gebaut zu
sein. Doch was durch Jahrhunderte feindlichen Stürmen Trotz
geboten und der Stadt und ihren Bürgern als Schutz und Hort
gedient hatte, das mußte unter der Spitzhacke dieser Bürger fallen.
So sank ein prächtiger, wehrhafter Torbau nach dem andern, ein
malerisches Bild alter Stadtherrlichkeit nach dem andern dahin.
Wenn man die alten Darstellungen der Tore betrachtet, so könnte
man glauben, jene Zeit der Spitzhacke, des Meißels und Brecheisens
sei blind und gefühllos gewesen gegen die reizvolle Schönheit und
gegen den Zauber der Geschichte, welcher die alten Türme und
Mauern mit ihren Ranken umsponnen hielt. 1846 fiel z. B. das
Erbische Tor, das einen Ludwig Richter zu einer entzückenden
Kupferradierung begeistert hatte. Wie ein Blick auf das Juwel
mittelalterlicher Stadtschönheit, auf Rothenburg ob d. Tauber, wirkt
dieser Ausschnitt aus Alt-Freibergs verlorener alter Herrlichkeit. Aus
tiefem Wallgraben rauschen die Baumwipfel empor, aber höher
steigen die trotzigen Türme und Mauern, über welche Giebel und
Dächer schauen, und zwischen ihnen der Torturm des Erbischen
Tors, feingegliedert, auf vierkantigem Unterbau achteckig aufragend.
Acht große ovale Schießluken für die schweren Geschütze und
darüber, getrennt durch ein glattes Gesimsband, acht schmale
horizontale Schießschlitze sind der wirksame und zweckvolle
Schmuck des wuchtigen Bauwerkes. So friedlich und gar nicht
kriegerisch mehr schaut das Tor darein.
Die vier letzten, alten, eisernen Kanonen, welche einst grimmig
von hier oben hinabdrohten, wurden 1802 verkauft und der Erlös
wurde zur Stärkung der Laternenkasse verwendet, die zur
Einrichtung einer öffentlichen Beleuchtung gegründet war. – Liegt
nicht darin die ganze Behaglichkeit des Spießbürgers, den Krieg und
Kriegsgeschrei nicht stört, weil er meint, ihm sei der Friede sicher
und der Krieg dahinten weit in der Türkei so fern, so fern, und doch
stand Mars schon drohend am Himmel und die apokalyptischen

You might also like