[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Perlang 0.8.0 released



Hi,

Today, I am happy to present Perlang 0.8.0, the eight public release of 
Perlang. Below are the release notes (also available at 
https://gitlab.perlang.org/perlang/perlang/-/releases/v0.8.0), but first 
some words about this release.

I had hoped to come a bit further on the macOS support (which I wrote 
about to the mailing list previously). Unfortunately, it was a bit hard 
to accomplish at the moment. I'm hoping to give this a new attempt 
sometime during the 0.9.0 release cycle; perhaps Claude Code can help me 
resolving some of the remaining CppSharp issues (I think there's only 
left, in fact).

Another topic that I intend to work on is support for error handling (as 
in "throwing exceptions"). Right now, there is no (standard) way to 
return an error/throw an exception from Perlang code. This - the area of 
how to handle errors in programs - is of course a hotly contested area, 
with strong opinions from both the "pro-exception" and "anti-exception" 
crowds. I have some ideas here on how to strike a balance between these 
opposing world views, but I think I'll keep them to myself for now. Stay 
tuned. :-)

Anyway, here are the release notes. Have a great weekend, everybody.


## [0.8.0] - 2026-04-10
- The eighth public release of Perlang. For the easiest way to install 
this on your machine, see
   https://perlang.org/download/ (currently Linux-only).
- This release continues rewriting the `PerlangScanner` class in Perlang 
([#505][505]). Other useful features like
   `switch` statements, `in` and range expresions were also added in 
this release cycle. For the full details, see the
   list below.
- The website (https://perlang.org) has been significantly updated, both 
in terms of layout (switching to
   MkDocs/Material) and in terms of making the content be more 
up-to-date. For more details on the MkDocs migration, see
   [#515][515].
- This is the first version of Perlang to be licensed under the LGPL 
(v2.1) license. For more details about this change,
   see https://gitlab.perlang.org/perlang/perlang/-/issues/419.
- This is also the first version of Perlang to have ben partially 
developed using the Claude Code LLM tool.
- All changes below were made by @perlun

### Perlang compiler/`perlang_cli`
- Add error message for unknown array types [[!631][631]]
- Rewrite Token class in Perlang [[!639][639]]
- Rewrite some `Scanner` methods in Perlang [[!642][642]]
- Add CppSharp binding patch infrastructure [[!644][644]]
- Fix `Token` debugger crash [[!645][645]]
- Turn some clang compiler errors into warnings instead [[!646][646]]
- Move more `Scanner` methods to Perlang implementation [[!647][647]]
- Rewrite the scanner `Match()` method in Perlang [[!649][649]]
- Fix formatting of generated `if` statements [[!650][650]]
- Fix `get_type()` support for more expressions [[!653][653]]
- Improve error handling when running `clang` [[!661][661]]
- Add `IHasFullName` interface [[!663][663]]
- Improve error handling for invalid binary/octal/hex literals [[!673][673]]
- Fix error reporting for preprocessor directives [[!682][682]]
- Improve error recovery for certain broken programs [[!683][683]]
- Fix `\uXXXX` escape sequence handling bug in strings [[!685][685]]
- Minor indentation fix in generated code: ef639ac

### Language
- Make `enum` types be real Perlang types [[!633][633]]
- Add `object` data type [[!634][634]]
- Support `char` + `char` in comparison operators [[!640][640]]
- Support `static` methods in classes [[!641][641]]
- Support arrays of all existing value types [[!656][656]]
- Add `in` expression [[!657][657]]
- Add range expression [[!660][660]]
- Implement `switch` statement [[!662][662]]
- Support ranges in `switch` case conditions [[!664][664]]
- Support switching on `string` values [[!665][665]]
- Fix `print` without arguments to print an empty line [[!679][679]]

### `stdlib`
- Fix `get_type()` to return correct results [[!637][637]]
- Add `perlang::Char` C++ data type [[!638][638]]
- Implement explicit bounds checking in `UTF16String` [[!648][648]]
- Add `perlang::Char::to_upper` and `to_lower` methods [[!651][651]]
- Add `ASCIIString.as_utf16()` method [[!680][680]]
- Add `as_ascii()` method for all string types [[!684][684]]

### Maintenance
- Regenerate CppSharp bindings: e9b7c21, d9a80a2
- Fix memory leak in integration test [[!632][632]]
- Fix build issues on gcc 13 (Debian Trixie) [[!636][636]]
- Remove stale comment: 21c81b6
- Minor formatting improvement [[!654][654]]
- Fix minor typo in exception messages [[!655][655]]
- Upgrade to .NET 10 [[!658][658], 404bc1b, 7544ec0, 6d258a1]
- Bump minimum CMake version to 3.10 [[!659][659]]
- Minor cleanup: 87a7da5
- Add repo-specific agent guidelines: 897f768
- Add Agent note about `make release`: b6d417b
- Clarify commit rules for agents: e22d938
- Add `CLAUDE.md` pointing to `AGENTS.md`: 734b9cc

### CI
- Ensure CppSharp bindings are always up-to-date [[!643][643]]
- Add `docs-build` CI job [[!666][666]]
- Minor cleanup: 29289e3

### Tests
- In this release, the total number of tests is 2114 (counted by the 
`test: []` CI job).
- Fix some tests to not be skipped anymore [[!652][652]]

### Docs, website and installer
- Fix typo in 'the Perlang language' page: 0526d3b
- Fix `perlang-install` to show error on macOS and Windows: 33c0d00
- Update Contributing page: 170f02a
- Fix TLS and cipher warnings on newer curl versions: ff800f4
- Minor README improvement: 07ad62a
- Migrate website docs from DocFX to MkDocs Material [[!667][667]]
- Update license info on web page: 44705e2
- Fix `highlight.js` dark mode colours: 16af170
- Fix live reload in MkDocs: c06b79c
- Fix typos in website [[!668][668]]
- Update website content to be up-to-date [[!669][669]]
- Fix auto-linking of bare URLs in MkDocs [[!670][670]]
- Add `switch` documentation [[!671][671]]
- Update keyword list in Perlang syntax highlighting [[!672][672]]
- Support more number styles in Perlang syntax highlighting [[!674][674]]
- Add docs for integer types [[!675][675]]
- Cleanup "null" section in documentation [[!677][677]]
- Improve website front page [[!678][678]]
- Fix syntax highlighting of identifiers with digits [[!681][681]]
- Add `string` documentation [[!686][686]]
- Add `char` documentation [[!687][687]]
- Add docs for floating-point types [[!688][688]]
- Fix syntax highlighting of `float` variables [[!689][689]]
- Minor docs adjustment: c44d2b9

[505]: https://gitlab.perlang.org/perlang/perlang/-/issues/505
[515]: https://gitlab.perlang.org/perlang/perlang/-/issues/515
[631]: https://gitlab.perlang.org/perlang/perlang/merge_requests/631
[632]: https://gitlab.perlang.org/perlang/perlang/merge_requests/632
[633]: https://gitlab.perlang.org/perlang/perlang/merge_requests/633
[634]: https://gitlab.perlang.org/perlang/perlang/merge_requests/634
[636]: https://gitlab.perlang.org/perlang/perlang/merge_requests/636
[637]: https://gitlab.perlang.org/perlang/perlang/merge_requests/637
[638]: https://gitlab.perlang.org/perlang/perlang/merge_requests/638
[639]: https://gitlab.perlang.org/perlang/perlang/merge_requests/639
[640]: https://gitlab.perlang.org/perlang/perlang/merge_requests/640
[641]: https://gitlab.perlang.org/perlang/perlang/merge_requests/641
[642]: https://gitlab.perlang.org/perlang/perlang/merge_requests/642
[643]: https://gitlab.perlang.org/perlang/perlang/merge_requests/643
[644]: https://gitlab.perlang.org/perlang/perlang/merge_requests/644
[645]: https://gitlab.perlang.org/perlang/perlang/merge_requests/645
[646]: https://gitlab.perlang.org/perlang/perlang/merge_requests/646
[647]: https://gitlab.perlang.org/perlang/perlang/merge_requests/647
[648]: https://gitlab.perlang.org/perlang/perlang/merge_requests/648
[649]: https://gitlab.perlang.org/perlang/perlang/merge_requests/649
[650]: https://gitlab.perlang.org/perlang/perlang/merge_requests/650
[651]: https://gitlab.perlang.org/perlang/perlang/merge_requests/651
[652]: https://gitlab.perlang.org/perlang/perlang/merge_requests/652
[653]: https://gitlab.perlang.org/perlang/perlang/merge_requests/653
[654]: https://gitlab.perlang.org/perlang/perlang/merge_requests/654
[655]: https://gitlab.perlang.org/perlang/perlang/merge_requests/655
[656]: https://gitlab.perlang.org/perlang/perlang/merge_requests/656
[657]: https://gitlab.perlang.org/perlang/perlang/merge_requests/657
[658]: https://gitlab.perlang.org/perlang/perlang/merge_requests/658
[659]: https://gitlab.perlang.org/perlang/perlang/merge_requests/659
[660]: https://gitlab.perlang.org/perlang/perlang/merge_requests/660
[661]: https://gitlab.perlang.org/perlang/perlang/merge_requests/661
[662]: https://gitlab.perlang.org/perlang/perlang/merge_requests/662
[663]: https://gitlab.perlang.org/perlang/perlang/merge_requests/663
[664]: https://gitlab.perlang.org/perlang/perlang/merge_requests/664
[665]: https://gitlab.perlang.org/perlang/perlang/merge_requests/665
[666]: https://gitlab.perlang.org/perlang/perlang/merge_requests/666
[667]: https://gitlab.perlang.org/perlang/perlang/merge_requests/667
[668]: https://gitlab.perlang.org/perlang/perlang/merge_requests/668
[669]: https://gitlab.perlang.org/perlang/perlang/merge_requests/669
[670]: https://gitlab.perlang.org/perlang/perlang/merge_requests/670
[671]: https://gitlab.perlang.org/perlang/perlang/merge_requests/671
[672]: https://gitlab.perlang.org/perlang/perlang/merge_requests/672
[673]: https://gitlab.perlang.org/perlang/perlang/merge_requests/673
[674]: https://gitlab.perlang.org/perlang/perlang/merge_requests/674
[675]: https://gitlab.perlang.org/perlang/perlang/merge_requests/675
[677]: https://gitlab.perlang.org/perlang/perlang/merge_requests/677
[678]: https://gitlab.perlang.org/perlang/perlang/merge_requests/678
[679]: https://gitlab.perlang.org/perlang/perlang/merge_requests/679
[680]: https://gitlab.perlang.org/perlang/perlang/merge_requests/680
[681]: https://gitlab.perlang.org/perlang/perlang/merge_requests/681
[682]: https://gitlab.perlang.org/perlang/perlang/merge_requests/682
[683]: https://gitlab.perlang.org/perlang/perlang/merge_requests/683
[684]: https://gitlab.perlang.org/perlang/perlang/merge_requests/684
[685]: https://gitlab.perlang.org/perlang/perlang/merge_requests/685
[686]: https://gitlab.perlang.org/perlang/perlang/merge_requests/686
[687]: https://gitlab.perlang.org/perlang/perlang/merge_requests/687
[688]: https://gitlab.perlang.org/perlang/perlang/merge_requests/688
[689]: https://gitlab.perlang.org/perlang/perlang/merge_requests/689

-- 
Per Lundberg
Perlang author and maintainer