<commit_before>---
subject: 'Programming Languages'
title:  |
 Linear Typing for Go
date: 20.12.2017
subtitle: |
 A loose adaption of capabilities for sharing \
 \
 Masterarbeit
documentclass: scrreprt
classoption: BCOR=0.5cm
secnumdepth: 2
toc-depth: 1
header-includes:
 - \usepackage[]{graphicx}
 - \usepackage[ngerman,english]{babel}
 - \usepackage{amsmath,amsthm,mathtools,amssymb}
 - \usepackage{lstgolang}
 - \usepackage{xcolor}
 - \usepackage{fancyref}
 - \usepackage{ stmaryrd }
 - \lstset{language=Go,basicstyle=\small\ttfamily,commentstyle=\ttfamily\itshape\color{gray},columns=fullflexible,keepspaces=true,breaklines=true,basewidth={0.5em,0.5em},frame=tb}
links-as-notes: true
toc: true
listings: true
highlight-style: monochrome - \fontfamily{lmvtt}\selectfont
author: |
 <NAME> \
 &nbsp;\
 Philipps-Universität Marburg \
 Fachbereich Mathematik und Informatik \
 &nbsp;\
 Betreuer: Prof. Dr. <NAME>
reference-section-title: References
abstract: |
 Go is a programming language aimed at writing highly-concurrent software.
 In concurrent programs, exchanging data between concurrent
 calculations (goroutines) is essential.

 Go embraces a culture of "Don't communicate by sharing memory, share memory
 by communicating." (<NAME>), that is, sending pointers to memory between
 goroutines. It does not, however, provide a way to validate that there is
 no other reference to the same memory location, which could result in two
 goroutines trying to write to the same location in parallel, for example.

 This thesis tries to approach the problem by introducing annotations for
 linearity into Go programs, effectively allowing a programmer to state that
 a given memory location can only be referenced by exactly one reference, which
 can then be moved between goroutines as needed.

 \begin{otherlanguage}{ngerman}
  \vskip3cm
   Auf Deutsch:

   Go ist eine Programmiersprache, welche auf das Schreiben von nebenläufiger
   Software abzielt. In nebenläufigen Programmen ist Datenaustausch zwischen
   nebenläufigen Berechnungen (goroutine in Go) essenziell.

   Eines von Go's Mottos ist "Don't communicate by sharing memory, share memory
   by communicating." (<NAME>), was so viel heißt wie: Pointer werden zwischen
   den Berechnungen verschickt. Es gibt aber keine Möglichkeit auszuschließen,
   dass es keine andere Referenz auf den gleichen Speicherbereich gibt, was dazu
   führen kann das zwei goroutinen z.B. gleichzeitig auf den gleichen Speicherbereich
   schreiben.

   Diese Arbeit versucht das Problem anzugehen durch die Einführung von Annotationen
   für Linearität in Go. Dies ermöglicht es einen Programmierer anzugeben, das ein
   bestimmter Speicherbereich nur genau eine Referenz haben kann. Diese Referenzen
   können verschoben werden, sodass die Kommunikation zwischen Goroutinen ermöglicht
   wird.
 \end{otherlanguage}
---
<commit_msg>docs/meta.yaml: Fixup german abstract a bit<commit_after>---
subject: 'Programming Languages'
title:  |
 Linear Typing for Go
date: 20.12.2017
subtitle: |
 A loose adaption of capabilities for sharing \
 \
 Masterarbeit
documentclass: scrreprt
classoption: BCOR=0.5cm
secnumdepth: 2
toc-depth: 1
header-includes:
 - \usepackage[]{graphicx}
 - \usepackage[ngerman,english]{babel}
 - \usepackage{amsmath,amsthm,mathtools,amssymb}
 - \usepackage{lstgolang}
 - \usepackage{xcolor}
 - \usepackage{fancyref}
 - \usepackage{ stmaryrd }
 - \lstset{language=Go,basicstyle=\small\ttfamily,commentstyle=\ttfamily\itshape\color{gray},columns=fullflexible,keepspaces=true,breaklines=true,basewidth={0.5em,0.5em},frame=tb}
links-as-notes: true
toc: true
listings: true
highlight-style: monochrome - \fontfamily{lmvtt}\selectfont
author: |
 <NAME> \
 &nbsp;\
 Philipps-Universität Marburg \
 Fachbereich Mathematik und Informatik \
 &nbsp;\
 Betreuer: Prof. Dr. <NAME>
reference-section-title: References
abstract: |
 Go is a programming language aimed at writing highly-concurrent software.
 In concurrent programs, exchanging data between concurrent
 calculations (goroutines) is essential.

 Go embraces a culture of "Don't communicate by sharing memory, share memory
 by communicating." (<NAME>), that is, sending pointers to memory between
 goroutines. It does not, however, provide a way to validate that there is
 no other reference to the same memory location, which could result in two
 goroutines trying to write to the same location in parallel, for example.

 This thesis tries to approach the problem by introducing annotations for
 linearity into Go programs, effectively allowing a programmer to state that
 a given memory location can only be referenced by exactly one reference, which
 can then be moved between goroutines as needed.

 \begin{otherlanguage}{ngerman}
  \vskip3cm
   Auf Deutsch:

   Go ist eine Programmiersprache, welche auf das Schreiben von nebenläufiger
   Software abzielt. In nebenläufigen Programmen ist Datenaustausch zwischen
   nebenläufigen Berechnungen (goroutine in Go) essenziell.

   Eines der Go Sprichwörter ist "`Don't communicate by sharing memory, share memory
   by communicating."' (<NAME>), was so viel heißt wie: Pointer werden zwischen
   den Berechnungen verschickt. Es gibt aber keine Möglichkeit auszuschließen,
   dass es keine andere Referenz auf den gleichen Speicherbereich gibt, was dazu
   führen kann das zwei goroutinen z.B. gleichzeitig auf den gleichen Speicherbereich
   schreiben.

   Diese Arbeit versucht das Problem anzugehen durch die Einführung von Annotationen
   für Linearität in Go. Dies ermöglicht es einen Programmierer anzugeben, das ein
   bestimmter Speicherbereich nur genau eine Referenz haben kann. Diese Referenzen
   können verschoben werden, sodass die Kommunikation zwischen Goroutinen ermöglicht
   wird.
 \end{otherlanguage}
---

{'fraction_non_alphanumeric': 0.06881051175656985, 'fraction_numerical': 0.005878284923928077, 'mean_word_length': 4.8082329317269075, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4688600', 'n_tokens_mistral': 1759, 'n_tokens_neox': 1700, 'n_words': 637}