Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
68
Lang/Rascal/00-LANG.txt
Normal file
68
Lang/Rascal/00-LANG.txt
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
{{language|Rascal
|
||||
|site=http://www.rascal-mpl.org/
|
||||
|exec=interpreted
|
||||
|strength=strong
|
||||
|safety=safe
|
||||
|express=partially implicit
|
||||
|checking=dynamic
|
||||
|parampass=value
|
||||
|gc=yes
|
||||
}}
|
||||
|
||||
Rascal is a [http://www.rascal-mpl.org/Rascal/RascalDomain domain specific] language for source code analysis and manipulation a.k.a. meta-programming. It is currently being developed and tested at [http://www.cwi.nl/ CWI]. No formal release has been made yet, but alpha quality "previews" are available on the [http://www.rascal-mpl.org/Rascal/Download Download] page.<ref name="The Rascal Project Website">http://www.rascal-mpl.org/</ref>
|
||||
[[Image:RascalLogo.png|200px|thumb|right|The Rascal logo]]
|
||||
|
||||
==Why Rascal?==
|
||||
Rascal is a new language for ''meta-programming'', this is the activity of writing meta-programs<ref name="The Rascal Project Motivation">http://tutor.rascal-mpl.org/Courses/Rascal/Rascal.html#/Courses/Rascal/Motivation/Motivation.html</ref>. Using Rascal you create programs that read, analyse, transform, generate and/or visualize other programs.
|
||||
Meta-programs are programs that analyze, transform or generate other programs. Ordinary programs work on data; meta-programs work on programs.
|
||||
|
||||
The ''range of programs'' to which meta-programming can be applied is large: from programs in standard languages like C and Java to domain-specific languages for describing high-level system models or applications in specialized areas like gaming or finance. In some cases, even test results or performance data are used as input for meta-programs.
|
||||
|
||||
The ''range of kinds of meta programs'' that can be applied is also large. There are simple meta programs that generate boilerplate code from a list of items. There are complex meta programs that reverse engineer and statically analyse a big software system before visualizing the results. The point of Rascal is that in all these kinds of meta programs one needs similar operations and similar data-types.
|
||||
|
||||
The ''point of Rascal'' is to provide a reusable set of primitives to build and manipulate program representations. The point is not to be or provide a unified representation of programs to let generic algorithms operate on. In meta programming the devil is often in the details. Rascal makes sure to not a priori abstract from the important details programming language syntax and semantics.
|
||||
|
||||
Rascal is a ''domain specific programming language''. We emphasize programming here because Rascal is intended as an engineering tool for programmers that need to construct meta programs. Rascal programs allow running, inspecting, debugging, tracing, profiling, etc. just as normal programs do. The skills of any good programmer are enough to easily write good Rascal programs.
|
||||
===Examples===
|
||||
Typical applications of Rascal are:
|
||||
#Refactoring of Java source code.
|
||||
#Analyzing PHP code.
|
||||
#Searching for buffer overflows in C code.
|
||||
#Analyzing the version history of a large software project.
|
||||
#Implementing a domain-specific language (DSL) for describing games or business processes.
|
||||
|
||||
All these cases involve a form of meta-programming: software programs (in a wide sense) are the objects-of-interest that are being analyzed, transformed or generated. The Rascal language is designed for meta-programming following the [http://tutor.rascal-mpl.org/Courses/EASY/EASY.html EASY] paradigm. It can be applied in domains ranging from compiler construction and implementing domain-specific languages to constraint solving and software renovation.
|
||||
|
||||
Since representation of information is central to the approach, Rascal provides a rich set of built-in data types. To support extraction and analysis, parsing and advanced pattern matching are provided. High-level control structures make analysis and synthesis of complex datastructures simple.
|
||||
|
||||
===Benefits===
|
||||
#'''Familiar syntax''' in a what-you-see is-what-you-get style is used even for sophisticated concepts and this makes the language easy to learn and easy to use.
|
||||
#'''Sophisticated built-in data types''' provide standard solutions for many meta-programming problems.
|
||||
#'''Safety''' is achieved by finding most errors before the program is executed and by making common errors like missing initializations or invalid pointers impossible.
|
||||
#'''Local type inference''' makes local variable declarations redundant.
|
||||
#'''Pattern matching''' can be used to analyze all complex datastructures.
|
||||
#'''Syntax definitions''' make it possible to define new and existing languages and to write tools for them.
|
||||
#'''Visiting''' makes it easy to traverse datastructures and to extract information from them or to synthesize results.
|
||||
#'''Templates''' enable easy code generation.
|
||||
#'''Functions as values''' permit programming styles with high re-use.
|
||||
#'''Generic types''' allow writing functions that are applicable for many different types.
|
||||
#'''Eclipse integration''' makes Rascal programming a breeze. All familiar tools are at your fingertips.
|
||||
|
||||
===Pitfalls===
|
||||
#Rascal programs are not yet highly optimized so execution maybe slow for some programs.
|
||||
#At the time of writing, this checking is done during execution, but we are working on this.
|
||||
|
||||
==Facts==
|
||||
Here's a list of facts<ref name="The Rascal Project Website Facts">http://www.rascal-mpl.org/Rascal/Facts</ref> about Rascal that you might find interesting:
|
||||
|
||||
# Rascal is the successor of the [http://www.meta-environment.org/ ASF+SDF Meta-Environment].
|
||||
# Like [http://www.asfsdf.org/ ASF+SDF], it fully supports embedded concrete syntax fragments for "syntax safe" matching and construction of source code.
|
||||
# Like [http://www.stringtemplate.org/ StringTemplate], it supports recursive string templates for code generation in the absence of a context-free grammar.
|
||||
# [http://www.tobiasart.eu/ Tobias Baanders] designed the Rascal logo.
|
||||
# It employs a parsing architecture inspired by Scott and Johnstone's GLL parsing.
|
||||
# It's fundamental run-time data representation and manipulation API (pdb.values) is a part of [http://www.eclipse.org/imp/ Eclipse IMP].
|
||||
# PDB.values was inspired (mostly) by the [http://www.meta-environment.org/Meta-Environment/ATerms ATerm library] and [http://www.meta-environment.org/twiki/login/Meta-Environment/RScript?origurl=%2FMeta-Environment%2FRScript RScript].
|
||||
# We used Rascal itself to transform its Java-based interpreter from the Visitor design pattern to the Interpreter design pattern automagically.
|
||||
|
||||
==References==
|
||||
<references/>
|
||||
2
Lang/Rascal/00-META.yaml
Normal file
2
Lang/Rascal/00-META.yaml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
from: http://rosettacode.org/wiki/Category:Rascal
|
||||
1
Lang/Rascal/99-bottles-of-beer
Symbolic link
1
Lang/Rascal/99-bottles-of-beer
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/99-bottles-of-beer/Rascal
|
||||
1
Lang/Rascal/Algebraic-data-types
Symbolic link
1
Lang/Rascal/Algebraic-data-types
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Algebraic-data-types/Rascal
|
||||
1
Lang/Rascal/Anagrams
Symbolic link
1
Lang/Rascal/Anagrams
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Anagrams/Rascal
|
||||
1
Lang/Rascal/Best-shuffle
Symbolic link
1
Lang/Rascal/Best-shuffle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Best-shuffle/Rascal
|
||||
1
Lang/Rascal/Create-an-HTML-table
Symbolic link
1
Lang/Rascal/Create-an-HTML-table
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Create-an-HTML-table/Rascal
|
||||
1
Lang/Rascal/Dot-product
Symbolic link
1
Lang/Rascal/Dot-product
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Dot-product/Rascal
|
||||
1
Lang/Rascal/Empty-string
Symbolic link
1
Lang/Rascal/Empty-string
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Empty-string/Rascal
|
||||
1
Lang/Rascal/Ethiopian-multiplication
Symbolic link
1
Lang/Rascal/Ethiopian-multiplication
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Ethiopian-multiplication/Rascal
|
||||
1
Lang/Rascal/Even-or-odd
Symbolic link
1
Lang/Rascal/Even-or-odd
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Even-or-odd/Rascal
|
||||
1
Lang/Rascal/Factorial
Symbolic link
1
Lang/Rascal/Factorial
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Factorial/Rascal
|
||||
1
Lang/Rascal/FizzBuzz
Symbolic link
1
Lang/Rascal/FizzBuzz
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/FizzBuzz/Rascal
|
||||
1
Lang/Rascal/Greatest-common-divisor
Symbolic link
1
Lang/Rascal/Greatest-common-divisor
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Greatest-common-divisor/Rascal
|
||||
1
Lang/Rascal/Greatest-element-of-a-list
Symbolic link
1
Lang/Rascal/Greatest-element-of-a-list
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Greatest-element-of-a-list/Rascal
|
||||
1
Lang/Rascal/Guess-the-number
Symbolic link
1
Lang/Rascal/Guess-the-number
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Guess-the-number/Rascal
|
||||
1
Lang/Rascal/Hello-world-Graphical
Symbolic link
1
Lang/Rascal/Hello-world-Graphical
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Hello-world-Graphical/Rascal
|
||||
1
Lang/Rascal/Horners-rule-for-polynomial-evaluation
Symbolic link
1
Lang/Rascal/Horners-rule-for-polynomial-evaluation
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Horners-rule-for-polynomial-evaluation/Rascal
|
||||
1
Lang/Rascal/Increment-a-numerical-string
Symbolic link
1
Lang/Rascal/Increment-a-numerical-string
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Increment-a-numerical-string/Rascal
|
||||
1
Lang/Rascal/Jensens-Device
Symbolic link
1
Lang/Rascal/Jensens-Device
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Jensens-Device/Rascal
|
||||
1
Lang/Rascal/List-comprehensions
Symbolic link
1
Lang/Rascal/List-comprehensions
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/List-comprehensions/Rascal
|
||||
1
Lang/Rascal/Logical-operations
Symbolic link
1
Lang/Rascal/Logical-operations
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Logical-operations/Rascal
|
||||
1
Lang/Rascal/Matrix-multiplication
Symbolic link
1
Lang/Rascal/Matrix-multiplication
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Matrix-multiplication/Rascal
|
||||
1
Lang/Rascal/Matrix-transposition
Symbolic link
1
Lang/Rascal/Matrix-transposition
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Matrix-transposition/Rascal
|
||||
1
Lang/Rascal/Maze-generation
Symbolic link
1
Lang/Rascal/Maze-generation
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Maze-generation/Rascal
|
||||
1
Lang/Rascal/Metaprogramming
Symbolic link
1
Lang/Rascal/Metaprogramming
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Metaprogramming/Rascal
|
||||
1
Lang/Rascal/N-queens-problem
Symbolic link
1
Lang/Rascal/N-queens-problem
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/N-queens-problem/Rascal
|
||||
1
Lang/Rascal/Number-reversal-game
Symbolic link
1
Lang/Rascal/Number-reversal-game
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Number-reversal-game/Rascal
|
||||
1
Lang/Rascal/Order-two-numerical-lists
Symbolic link
1
Lang/Rascal/Order-two-numerical-lists
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Order-two-numerical-lists/Rascal
|
||||
1
Lang/Rascal/Palindrome-detection
Symbolic link
1
Lang/Rascal/Palindrome-detection
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Palindrome-detection/Rascal
|
||||
1
Lang/Rascal/Power-set
Symbolic link
1
Lang/Rascal/Power-set
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Power-set/Rascal
|
||||
1
Lang/Rascal/QR-decomposition
Symbolic link
1
Lang/Rascal/QR-decomposition
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/QR-decomposition/Rascal
|
||||
1
Lang/Rascal/Random-number-generator-included-
Symbolic link
1
Lang/Rascal/Random-number-generator-included-
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Random-number-generator-included-/Rascal
|
||||
1
Lang/Rascal/Reverse-a-string
Symbolic link
1
Lang/Rascal/Reverse-a-string
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Reverse-a-string/Rascal
|
||||
1
Lang/Rascal/Rock-paper-scissors
Symbolic link
1
Lang/Rascal/Rock-paper-scissors
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Rock-paper-scissors/Rascal
|
||||
1
Lang/Rascal/Sort-an-integer-array
Symbolic link
1
Lang/Rascal/Sort-an-integer-array
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Sort-an-integer-array/Rascal
|
||||
1
Lang/Rascal/Sorting-algorithms-Gnome-sort
Symbolic link
1
Lang/Rascal/Sorting-algorithms-Gnome-sort
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Sorting-algorithms-Gnome-sort/Rascal
|
||||
1
Lang/Rascal/Sorting-algorithms-Insertion-sort
Symbolic link
1
Lang/Rascal/Sorting-algorithms-Insertion-sort
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Sorting-algorithms-Insertion-sort/Rascal
|
||||
1
Lang/Rascal/Sudoku
Symbolic link
1
Lang/Rascal/Sudoku
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Sudoku/Rascal
|
||||
1
Lang/Rascal/Towers-of-Hanoi
Symbolic link
1
Lang/Rascal/Towers-of-Hanoi
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Towers-of-Hanoi/Rascal
|
||||
1
Lang/Rascal/User-input-Graphical
Symbolic link
1
Lang/Rascal/User-input-Graphical
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/User-input-Graphical/Rascal
|
||||
1
Lang/Rascal/User-input-Text
Symbolic link
1
Lang/Rascal/User-input-Text
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/User-input-Text/Rascal
|
||||
1
Lang/Rascal/Variables
Symbolic link
1
Lang/Rascal/Variables
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Variables/Rascal
|
||||
1
Lang/Rascal/Walk-a-directory-Non-recursively
Symbolic link
1
Lang/Rascal/Walk-a-directory-Non-recursively
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Walk-a-directory-Non-recursively/Rascal
|
||||
1
Lang/Rascal/Walk-a-directory-Recursively
Symbolic link
1
Lang/Rascal/Walk-a-directory-Recursively
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Walk-a-directory-Recursively/Rascal
|
||||
1
Lang/Rascal/XML-DOM-serialization
Symbolic link
1
Lang/Rascal/XML-DOM-serialization
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/XML-DOM-serialization/Rascal
|
||||
1
Lang/Rascal/XML-Input
Symbolic link
1
Lang/Rascal/XML-Input
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/XML-Input/Rascal
|
||||
1
Lang/Rascal/XML-Output
Symbolic link
1
Lang/Rascal/XML-Output
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/XML-Output/Rascal
|
||||
1
Lang/Rascal/XML-XPath
Symbolic link
1
Lang/Rascal/XML-XPath
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/XML-XPath/Rascal
|
||||
1
Lang/Rascal/Yin-and-yang
Symbolic link
1
Lang/Rascal/Yin-and-yang
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Yin-and-yang/Rascal
|
||||
1
Lang/Rascal/Zig-zag-matrix
Symbolic link
1
Lang/Rascal/Zig-zag-matrix
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../Task/Zig-zag-matrix/Rascal
|
||||
Loading…
Add table
Add a link
Reference in a new issue