Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/pr-builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ jobs:
with:
name: sources

- uses: actions/setup-node@v4
with:
node-version: 20
cache: yarn

# Do a dummy build to see if there are errors
- name: Install dependencies
run: yarn install --frozen-lockfile
Expand Down
4 changes: 2 additions & 2 deletions courses/GettingHelp/Browsing/Browsing.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ been checked before publication.

Every Rascal library project also represents one _course_. Each module produces
one _concept_ and encapsulates what is defined and documented within. In particular
the [standard library]((Library)) is interesting to browse. The package hierarchy
the [standard library]((Library:Index)) is interesting to browse. The package hierarchy
of the library is mapped one-to-one to the concept hierarchy of the corresponding course.

#### Code examples
Expand All @@ -44,5 +44,5 @@ Most pages are indexed carefully, for example using the appropriate keywords and

Nevertheless the search box on the website will produce
results in all courses, like [Help]((GettingHelp)) (this course)
and [Recipes]((Recipes)) or ((Library)).
and [Recipes]((Recipes)) or ((Library:Index)).

6 changes: 3 additions & 3 deletions courses/GettingHelp/FurtherReading/FurtherReading.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ keywords:
1. To understand the terminology used in Rascal and by Rascal programmers ((Rascalopedia)) is a focused encyclopedia of meta programming.
1. To understand error messages produced by Rascal, there is information on all ((RunTimeErrors)) and ((CompileTimeErrors)).
1. To know everything about every detail of Rascal syntax and semantics, the [Rascal reference manual]((course:Rascal)) applies.
1. The full standard ((Library)) is documented [here]((Library)).
1. The full standard ((Library:Index)) is documented [here]((Library:Index)).

#### Packages

Rascal can be extended by loading different (third-party) [packages](/docs/Packages). For example:

* [flybytes](/docs/Packages/Flybytes) enables JVM bytecode analysis, transformation and generation in Rascal.
* [typepal](/docs/Packages/Typepal) is a generic name and type analysis framework for programming languages and textual DSLs.
* [flybytes](/docs/Packages/org.rascalmpl.flybytes) enables JVM bytecode analysis, transformation and generation in Rascal.
* [typepal](/docs/Packages/org.rascalmpl.typepal) is a generic name and type analysis framework for programming languages and textual DSLs.

24 changes: 12 additions & 12 deletions courses/Packages/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,20 +39,20 @@ The currently available packages are grouped in two categories: language support

| Language name | Package | Note |
| ------------- | ------- | ----- |
| C and C++ | [clair](/docs/Packages/Clair) | |
| Java | [rascal](/docs/Rascal) | To be factored out of the standard library soon |
| PHP | [php-analysis](/docs/Packages/PhpAnalysis) | |
| Python | [python-air](/docs/Packages/PythonAir) | |
| JVM bytecode | [flybytes](/docs/Packages/Flybytes) | Forward and Reverse |
| C and C++ | [clair](/docs/Packages/org.rascalmpl.clair) | |
| Java | [java-air](/docs/Packages/org.rascalmpl.java-air) | used to be part of standard library |
| PHP | php-analysis | currently not building will be released as soon as possible |
| Python | python-air | currently not building will be released as soon as possible |
| JVM bytecode | [flybytes](/docs/Packages/org.rascalmpl.flybytes) | Forward and Reverse |

### Generic Libraries

| Library Name | Package | Note |
| ------------ | ------- | ----- |
| Dr Ambiguity | [drambiguity](/docs/Packages/DrAmbiguity) | Interactive UI based on Salix for detection, diagnostics and fixing of ambiguity context-free grammars. |
| Salix | [salix-core](/docs/Packages/SalixCore) | User interface framework for Rascal |
| Salix Contrib | [salix-contrib](/docs/Packages/SalixContrib) | Useful extensions for Salix |
| Rascal GIT | [rascal-git](/docs/Packages/RascalGit) | Accessing GIT from Rascal |
| Rascal LSP | [rascal-lsp](/docs/Packages/RascalLsp) | LSP for Rascal and LSP generator for DSLs in Rascal |
| Typepal | [typepal](/docs/Packages/Typepal) | Generic name and type analysis framework; to be factored in to the standard library soon |
| Rascal Tutor | [rascal-tutor](/docs/Packages/RascalTutor) | Rascal source code documenter and manual authoring tool; to be factored into the standard library soon |
| Dr Ambiguity | drambiguity | Interactive UI based on Salix for detection, diagnostics and fixing of ambiguity context-free grammars. Currently documentation is not building, will be released as soon as possible |
| Salix | [salix-core](/docs/Packages/org.rascalmpl.salix-core) | User interface framework for Rascal |
| Salix Contrib | [salix-contrib](/docs/Packages/org.rascalmpl.salix-contrib) | Useful extensions for Salix |
| Rascal GIT | [rascal-git](/docs/Packages/edu.appstate.cs.rascal-git/) | Accessing GIT from Rascal |
| Rascal LSP | [rascal-lsp](/docs/Packages/org.rascalmpl.rascal-lsp/) | LSP for Rascal and LSP generator for DSLs in Rascal |
| Typepal | [typepal](/docs/Packages/org.rascalmpl.typepal/) | Generic name and type analysis framework |
| Rascal Tutor | rascal-tutor | Rascal source code documenter and manual authoring tool, documentation not released yet due to changes in tutor infrastructure |
2 changes: 1 addition & 1 deletion courses/Rascal/Declarations/Function/Function.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ we can define canonicalization functions. The same holds for ((Syntax Definition

This definition implies a default function for t(), f() and neg(B):

```rascal-shell,continue
```rascal-shell
data B = t() | f() | neg(B);
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Unless it is called with an argument of a wrong type:
triple([1,2,3])
```
We can define a new version of `triple` function that accepts lists:
```rascal-shell,continue
```rascal-shell
list[int] triple(list[int] L) = [3 * x | x <- L];
triple([1,2,3]);
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Calling the undeclared function `triple` gives an error:
triple(5)
```
We can remedy this by declaring the function:
```rascal-shell,continue
```rascal-shell
int triple(int n) = 3 * n;
triple(5)
```
Expand Down
2 changes: 1 addition & 1 deletion courses/Rascal/Statements/Throw/Throw.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ if (size(aList) == 3) {
}
```

Here we throw a constructor of ((Exception-RuntimeException)):
Here we throw a constructor of ((data:Exception-RuntimeException)):
```rascal-shell,error
import Exception;
// highlight-next-line
Expand Down
2 changes: 1 addition & 1 deletion courses/Recipes/BasicProgramming/CodeModels/CodeModels.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ The core language independent model can be found here: [analysis::m3]((Library:a

Extensions for representing facts about specific languages:

* [lang::java::m3]((Library:lang::java::m3)).
* [lang::java::m3]((lang::java::m3)).

#### Examples

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ A typical example of how to use M3 to analyze Java classes.


First we import the basic data types for representing Java. The model is called _M3_, and its definition is split acros a generic
language independent module called ((Library:module:analysis::m3::Core)) and a Java specific part called ((Library:module:lang::java::m3::AST)). Have a look at the documentation
language independent module called ((analysis::m3::Core)) and a Java specific part called ((lang::java::m3::AST)). Have a look at the documentation
of these modules later. For now we will go through using them in a few examples.

```rascal-prepare
Expand Down
4 changes: 2 additions & 2 deletions courses/Recipes/Metrics/MeasuringJava/MeasuringJava.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ These are a number of recipes for measuring different things about Java:


First we import the basic data types for representing Java. The model is called _M3_, and its definition is split acros a generic
language independent module called ((Library:module:analysis::m3::Core)) and a Java specific part called ((Library:module:lang::java::m3::AST)). Have a look at the documentation
language independent module called ((analysis::m3::Core)) and a Java specific part called ((lang::java::m3::AST)). Have a look at the documentation
of these modules later. For now we will go through using them in a few examples.

```rascal-prepare
Expand Down Expand Up @@ -71,7 +71,7 @@ You can use this code to extract a classpath if the project is a Maven project:

```rascal-shell,continue
import util::Reflective;
cp = getProjectPathConfig(|tmp:///snakes-and-ladders|).javaCompilerPath;
cp = getProjectPathConfig(|tmp:///snakes-and-ladders|).libs;
```

and then pass it into the M3 extractor (this project does not have dependencies)
Expand Down
4 changes: 2 additions & 2 deletions courses/WhyRascal/UseCases/CodeAsData/CodeAsData.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ Code analysis has many motivations. In this example we will see how we can resol

#### Parsing=Turning Code into Data

In this example we use Rascal's JDT library, which wraps Eclipse's Java Development Toolkit compiler for Java and makes its information available as Rascal data types. This intermediate model is called _M3_, and its definition is split acros a generic
language independent module called ((Library:module:analysis::m3::Core)) and a Java specific part called ((Library:module:lang::java::m3::Core)).
In this example we use the ((org.rascalmpl.java-air)) package, which wraps Eclipse's Java Development Toolkit compiler for Java and makes its information available as Rascal data types. This intermediate model is called _M3_, and its definition is split acros a generic
language independent module called ((analysis::m3::Core)) and a Java specific part called ((lang::\java::m3::Core)).

```rascal-prepare
import IO;
Expand Down
71 changes: 35 additions & 36 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,19 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<rascal-maven-plugin.version>0.28.9</rascal-maven-plugin.version>
<rascal.version>0.40.17</rascal.version>
<rascal-tutor.version>0.19.9</rascal-tutor.version>
<clair.version>0.13.1</clair.version>
<rascal-git.version>0.1.15</rascal-git.version>
<flybytes.version>0.2.8</flybytes.version>
<typepal.version>0.14.8</typepal.version>
<salix-core.version>0.2.7</salix-core.version>
<salix-contrib.version>0.2.7</salix-contrib.version>
<rascal-lsp.version>2.21.0-2</rascal-lsp.version>
<drambiguity.version>0.3.5</drambiguity.version>
<php-analysis.version>0.2.4</php-analysis.version>
<python-air.version>0.0.8</python-air.version>
<rascal-maven-plugin.version>0.30.2</rascal-maven-plugin.version>
<rascal.version>0.41.2</rascal.version>
<clair.version>0.13.3</clair.version>
<rascal-git.version>0.1.17</rascal-git.version>
<flybytes.version>0.2.10</flybytes.version>
<typepal.version>0.15.5</typepal.version>
<salix-core.version>0.2.9</salix-core.version>
<salix-contrib.version>0.2.9</salix-contrib.version>
<drambiguity.version>0.3.8</drambiguity.version>
<java-air.version>1.0.1</java-air.version>
<rascal-lsp.version>2.22.0-RC3</rascal-lsp.version>
<!--php-analysis.version>0.2.4</php-analysis.version> -->
<!--<python-air.version>0.0.11</python-air.version> -->
</properties>

<build>
Expand Down Expand Up @@ -111,15 +111,6 @@
<includes>docs/**/*.*</includes>
<excludes>docs/index.value</excludes>
</artifactItem>
<artifactItem>
<groupId>org.rascalmpl</groupId>
<artifactId>rascal-tutor</artifactId>
<version>${rascal-tutor.version}</version>
<outputDirectory>${project.basedir}</outputDirectory>
<includes>docs/**/*.*</includes>
<excludes>**/examples/,**/questions/</excludes>
<excludes>docs/index.value</excludes>
</artifactItem>
<artifactItem>
<groupId>org.rascalmpl</groupId>
<artifactId>clair</artifactId>
Expand Down Expand Up @@ -160,21 +151,29 @@
<includes>docs/**/*.*</includes>
<excludes>docs/index.value</excludes>
</artifactItem>
<artifactItem>
<!--<artifactItem>
<groupId>org.rascalmpl</groupId>
<artifactId>php-analysis</artifactId>
<version>${php-analysis.version}</version>
<outputDirectory>${project.basedir}</outputDirectory>
<includes>docs/**/*.*</includes>
<excludes>docs/index.value</excludes>
</artifactItem>
<artifactItem>
</artifactItem> -->
<!--<artifactItem>
<groupId>org.rascalmpl</groupId>
<artifactId>python-air</artifactId>
<version>${python-air.version}</version>
<outputDirectory>${project.basedir}</outputDirectory>
<includes>docs/**/*.*</includes>
<excludes>docs/index.value</excludes>
</artifactItem> -->
<artifactItem>
<groupId>org.rascalmpl</groupId>
<artifactId>java-air</artifactId>
<version>${java-version}</version>
<outputDirectory>${project.basedir}</outputDirectory>
<includes>docs/**/*.*</includes>
<excludes>docs/index.value</excludes>
</artifactItem>
</artifactItems>
</configuration>
Expand All @@ -196,6 +195,7 @@
<isPackageCourse>false</isPackageCourse>
<enableStandardLibrary>false</enableStandardLibrary>
<errorsAsWarnings>false</errorsAsWarnings>
<verbose>true</verbose>
<bin>${project.basedir}</bin> <!-- because tutor appends /docs to this -->
<srcs>
<!--<src>|lib://rascal/org/rascalmpl/library|</src> -->
Expand All @@ -210,9 +210,8 @@
<src>${project.basedir}/courses/Packages</src>
</srcs>
<ignores>
<ignore>|lib://rascal/org/rascalmpl/library/lang/rascal|</ignore>
<ignore>|lib://rascal/org/rascalmpl/library/lang/c90|</ignore>
<ignore>|lib://rascal/org/rascalmpl/library/lang/c90|</ignore>
<ignore>|std:///lang/rascal|</ignore>
<ignore>|std:///lang/c90|</ignore>
</ignores>
</configuration>
</execution>
Expand Down Expand Up @@ -276,12 +275,12 @@
<groupId>org.rascalmpl</groupId>
<artifactId>clair</artifactId>
<version>${clair.version}</version>
</dependency>
</dependency>
<dependency>
<groupId>org.rascalmpl</groupId>
<artifactId>rascal-tutor</artifactId>
<version>${rascal-tutor.version}</version>
</dependency>
<artifactId>java-air</artifactId>
<version>${java-air.version}</version>
</dependency>
<dependency>
<groupId>org.rascalmpl</groupId>
<artifactId>salix-core</artifactId>
Expand All @@ -302,15 +301,15 @@
<artifactId>drambiguity</artifactId>
<version>${drambiguity.version}</version>
</dependency>
<dependency>
<!--<dependency>
<groupId>org.rascalmpl</groupId>
<artifactId>php-analysis</artifactId>
<version>${php-analysis.version}</version>
</dependency>
<dependency>
</dependency> -->
<!--<dependency>
<groupId>org.rascalmpl</groupId>
<artifactId>python-air</artifactId>
<version>${python-air.version}</version>
</dependency>
</dependency>-->
</dependencies>
</project>
15 changes: 13 additions & 2 deletions release-notes/rascal-0-41-x-release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sidebar_position: 87

In this post we report on the Rascal release 0.41.x

## Release 0.41.0 - September, 2025
## Release 0.41.0 & 0.41.1 - December, 2025

Welcome to Rascal 0.41.0! This release comes with great improvements in usability (parse error recovery, loading speed)
and enormous progress with type-checking and compilation. Numerous additions to the standard library and a _big change_ in the Java language support setup...
Expand Down Expand Up @@ -43,9 +43,19 @@ Nothing else has changed w.r.t. Java analysis. The same module names, functions

If you are interested in bringing `java-air` up to JLS-17, 19, 21, 23, ...; This is an example of something where we welcome help from the community. Please have a look at https://github.com/usethesource/java-air/.

:::info
For students close to a deadline: VS Code allows you to downgrade your extension, so you can always go back to a version of the VS Code extension with an older release of rascal packaged.

- find the extension in the extensions bar
- click on the cogwheel in the corner
- clock "Install Specific Version..."

:::

### Parser improvements (the Error Recovery Mode)

The generated parsers now support an "error recovery" mode. In this mode the parser is **robust** against errors in the _input_. This is extremely useful for interactive editing situations, where sometimes a file is under development and we still want syntax-directed and semantics-directed features. Examples of downstream features that can work well with a recovered parse:

* highlighting,
* autocompletion,
* type-checking,
Expand Down Expand Up @@ -138,8 +148,9 @@ including the advanced terminal support and loading LSP extensions for DSLs.
Also it lowers our maintenance costs and increases the speed of our release cycles.

* The Debug Adapter Protocol (DAP) implementation (an extension to the Language Service Protocol) was moved to the Rascal project.
* Several core features of the Language Service Protocol server for Rascal (and DSLs written in Rascal) moved along with it.
* Several core infrastructure features of the Language Service Protocol server for Rascal (and DSLs written in Rascal) moved along with it.
For example: mapping UTF16 characters (LSP editors) to UTF32 (Rascal parsers) and back.
* the REPL extensions in VS Code (such as automatic reloading of modules) got moved to the generic rascal REPL.

### Type checker improvements

Expand Down
Loading