Giter Site home page Giter Site logo

danielkreck / analysis-of-purescripts-compilation-process Goto Github PK

View Code? Open in Web Editor NEW
3.0 1.0 1.0 1.6 MB

Understanding concepts of functional languages ​​(ADT's, type classes, functors, monads, ...) by looking at how they are implemented. The source language is PureScript which compiles to JavaScript. The paper was written in German during a semester university project. Maybe it helps anyone on his road to functional programming as well.

License: MIT License

TeX 100.00%
analysis functional-languages purescript javascript algebraic-data-types type-classes recursion higher-order-functions functors applicative-functors

analysis-of-purescripts-compilation-process's Introduction

Zielsetzung und Vorgehen

Diese Ausarbeitung ist Ergebnis einer Projektaufgabe des Moduls Kernel-Architekturen in Programmiersprachen, im Fachbereich MNI der Technischen Hochschule Mittelhessen. Im Kern geht es darum sich Konzepten funktionaler Sprachen (ADT's, Typklassen, Funktoren, Monaden, ...) zu nähern und diese zu verstehen, indem man sich anschaut, wie sie implementiert sind. Es stellte sich heraus, dass die Hürde am Anfang vergleichweise groß ist, um die grundlegenden Konzepte zu verstehen (z.B. bei der Verwendung von Typklassen bereits bei einer simplen Addition von Ganzzahlen) und es anschließend bei fortgeschritteneren Konzepten (z.B. Funktoren oder Monaden) leichter wird über diese zu reden und sie zu begreifen, sind die grundlegende Konzepte erst einmal verinnerlicht. Deshalb empfiehlt es sich, je nach Wissenstand, dort einzusteigen wo Wissen fehlt, im Zweifel am Anfang, und diese Ausarbeitung streng der Reihenfolge nach zu lesen.

Kontext

Im Rahmen des Moduls Kernel-Architekturen in Programmiersprachen beschäftigen wir uns mit Sprachen dieser Art. Dies sind Sprachen, welche aus einem kleinen Sprachkern aufgebaut und meist funktionaler Natur sind.

Problem

Als individuelle Projektaufgabe soll sich mit einer Kernel-basierten Sprache beschäftigt und ihr Übersetzungsmechanismus beschrieben werden. Das dient dem Zweck zu ergründen wie dieser aussieht und aufgebaut ist, welche Sprachkonstrukte zur Abbildung genutzt werden und damit auch zu erforschen, wie eine sich in der Praxis befindliche Kernel-basierte Sprache strukturiert ist und im Kern funktioniert. Es geht also nicht um weniger, als zu erforschen, wie gut man sich einer fremden Sprache unter einem potentiell fremden Paradigma nähern kann, wenn man den Zielcode analysiert, der auf ein bereits bekanntes Paradigma aufsetzt.

Aufgabe

Dem Problem wird mit der Programmiersprache Purescript, welche nach Javascript kompiliert, begegnet. Ziel ist es Muster in der Übersetzung von PureScript nach JavaScript zu erkennen sowie zu beschreiben und sich dadurch der Sprache PureScript zu nähern.

Der Beschreibungsprozess ist wie folgt aufgebaut. Die aufgegriffenen Spachelemente von Purescript werden erklärt und damit wird kein Wissen in der Sprache selbst vorausgesetzt, um sie zu verstehen. Im Anschluss wird die Übersetzung nach Javascript aufgezeigt und diese Abbildung beschrieben. Das hat zur Folge, dass die Kapitel thematisch aufeinander aufbauen müssen. Als erstes steht bspw. das Modulkonzept von PureScript, gefolgt von Funktionen, ohne Typdeklarationen einzuführen. Diese werden erst genutzt, wenn Typen im nächsten Kapitel eingeführt wurden. Allgemeine Begriffe oder Definitionen der Informatik, insbesondere der Softwareentwicklung, werden allerdings vorausgesetzt.

Um im Vorgehen systematisch zu sein, wird sich anhand der Gliederung des Buches "PureScript by Example" von Phil Freeman orientiert. Die größten und wichtigsten Themenblöcke bilden in dieser Ausarbeitung die Kapitel. Kleinere oder von ihrer Abbildung her uninteressantere Themenbereiche fließen entweder innerhalb eines Kapitels am Rande ein oder werden nicht betrachtet. Ein Beispiel für einen wichtigen Themenblock, der ein Kapitel aufspannt, sind Typen, untergliedert in einfache Typen, Algebraische Typen und Typklassen. Ein Beispiel für einen Themenbereich, der nur am Rande einfließt, wäre bspw. Pattern Matching.

Pictures

The LICENSE doesn't hold for all content in folder "Pictures". Except for the two fold illustrations, for all pictures "Copyright Manning Publications, drawn by adit.io" holds. The fold illustrations are from the official Haskell Wiki and are protected by their corresponding license.

analysis-of-purescripts-compilation-process's People

Contributors

danielkreck avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Forkers

denkspuren

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.