Changelog & News
Citrine Programming Language
Citrine Roadmap
These are ideas for future versions of Citrine. This roadmap is just here to give you some idea of what I intend to do in the future, it might change at any time.
Next version is: Citrine 0.9.5: Sorghvliet Edition.
For details, please consult the Citrine 0.9.5 Roadmap.
Expected Alpha Release: 1 October 2022.
Expected Beta Release: 1 November 2022.
Expected Final release: 5 January 2023.
Long-term Citrine Roadmap 2023 and beyond
The long-term Citrine Roadmap for 2023 and beyond is just an estimation. This long-term roadmap may change at any moment due to circumstances. This is just an indication of how I think the Citrine Project will evolve. Note that I personally will probably only develop the core language itself. I will (most likely) not create all possible plug-ins, compilers, embedded versions, bindings and/or transpilers myself, this has to be done by the community. Otherwise the project would be far too big for me. I only focus on the core programming language and I assist those who help me create the rest. So for instance, instead of creating bindings for every currently popular programming language (PHP, Java), I will simply build to tools to do so (ACET). Instead of wrapping every currently popular library myself, I will simply build a tool to make this process easier (EcoGEN). The same applies to all the other elements of a programming language ecosystem.
Period | Features |
---|---|
2023 |
|
2024 |
|
2025 - 2026 |
|
2027 - 2029 |
|
2030 - 2035 |
|
2035 - 2045 |
|
2045 - 2065 |
|
Changelog
2022 Citrine 0.9.4 - Koekamp
- Support for localized commas (Arabic comma)
- Support for localized colons (Armenian)
- Add lozenge symbol to macro package as replacement marker
- Add fat arrow symbol to macro package as replacement marker
- Refine build/installation scripts - thanks Tirifto!
- Improve readme-file - thanks Tirifto!
- Allow program memory to be set in megabytes instead of bytes
- Add Citrine EN_US for American English (EN will be Brittish English)
- Clean up dictionary files
- Add support for Papiamento (Citrine/PAP)
- Improve performace of string splitting
- Use refs instead of literals internally to improve performance
- Introduce additional core unit test system to test core [DONE]
- Environment variables for memory management [DONE]
- Add password input
- Always flush buffer on Stop message
- Fix File list
- Fix O2 Warnings
- Add support for Haiku
- Add AST-Export
- make-script for plug-ins (make plugin)
- Clean-up Project website
2021 Citrine 0.9.3 - Solleveld
- Localized quotes like ‘’ and “ ”
- Quote counting, no need to escape quotes
- Localized numbers like 1,234.56
- Slimmed down core (Regex in plug-in, low level functions)
- Now uses official localized math symbols × ⋅ ÷
- Support for single character keyword message: (+: is now also allowed)
- Sending message ‘object’ to a string will now unserialize string into object
- Qualifications are now copied automatically from Number-objects
- No more out-of-bound errors with Lists, just return Nil
- Consistency: String offset:,from:length:,upper,lower,trim now change object itself instead of returning a new object
- New Path object to create file path without platform specific notation
- Moment copy now takes into account the time zone
- Add object ≠
- Separate macro files for Geany with different quotes
- Automatic recursion detection/prevention (use recursive message to override)
- New Command object to create external command without platform specific notation
- Simplify implementation of literals
- Add Brazillian Portugese language (PT_BR)
- Improved Dutch, Czech, Hindi and Marathi language files
- Add XX and XX2 as pseudo languages for testing purposes
- English Citrine is now called Citrine/EN instead of Citrine/US
- Time objects now reset minor components upon changing major components
- Issues with time zones and daylight saving have been fixed
- Citrine now refuses to read incomplete dictionary files
2020 Citrine 0.9.2 - Wapendal
- Support for Windows (thanks Aavesh Jilani)
- Support for 109 human languages
- Turn Citrine into a 1-indexed language
- Use real Dutch ij instead of surrogate ij in Dutch Citrine
- Allow to translate end of line marker (dot) with for example Danda (।)
- Improve portability (less reliance on BSD-lib)
- Improve OOP: Only bind self to receving object in user-defined methods [done]
- Fix Object copy [done]
- Improve sandbox security [done]
- Fix Array delete issue [done]
- Fix div. by zero memory error
- Improve Makefile [done]
- Clean-up: Remove inflection methods Clock Object
- Numeric localization (decimal separators)
- Allow localized grouping of numbers/thousands seperators
- Improve garbage collector
- Allow parsing international numbers
- Forbid eval, only allow 'Program use' to include code
2019 Citrine 0.9.0/1 - Van Leydenhof
- Romanian language support (Citrine/RO)
- Lithuanian language support (Citrine/LT)
- Hindi language support (Citrine/HI)
- Improved support for macOS
- Fixed JSON plugin
- Fixed buffer overflows in String Object
- Language improvements
2018 Citrine 0.7.5-0.8.4
- Added translation checks
- Localized error messages
- Localized plug-ins
- New Pool Memory Allocator
- First prototype for Windows version (contributed by Twiggler)
- Added icon macros for Geany
- Fixed critical buffer overflows in translator
- Fixed various issues with garbage collector
- Language improvements
2017 Citrine 0.6.1-0.7.4
- Added support for Regular expressions
- Added Hash Feature
- Generic responses (a.k.a. magic methods)
- Sandboxing for online demo purposes
- Added Serialization Feature
2016 Citrine 0.4-0.6
- Implemented Stack Traces
- Introduced Memory Allocator
- Implemented Automatic Garbage collector
- Added support for Dynamic Plug-ins
- Simplified Object Inheritance
- Switch to Abstract Syntax Tree
History
Around 2009/2010 I started a project called PenelopePHP. The purpose of this project was to make PHP code more readable by adding wrapper objects. The project tried to turn PHP into a Smalltalk-like programming language. In 2012 I decided to make the project more generic, rewriting it as a classic interpreter in C. Because of the JavaScript hype, I did another rewrite to turn the system into a JavaScript transpiler. Those projects were called DinkyScript. In 2014/2015 I decided to plan a major rewrite of the system again in C using an AST-parser instead of a classic parser. In 2016 I released the first official version of Citrine.
Inspiration
The inspiration for the Citrine Programming Language comes from Smalltalk (message-based, pure object oriented programming), JavaScript (prototypal inheritance), and BASIC (dynamic scope). The name Citrine refers to the yellow coloured gem and honours the short lived tradition to name programming languages after shiny minerals like Pe(a)rl and Ruby.
Plug-ins
Want to help contribute to Citrine? The Citrine Programming Language can be easily extended using plug-ins. If you like, you can support the project by implementing one of the plug-ins on the wishlist:
- Big Number Library [TODO]
- FastCGI/WEB plug-in [TODO]
- PostgreSQL/DATABASE plug-in [TODO]
- MySQL/MariaDB/DATABASE plug-in [TODO]
- SQLite/DATABASE plug-in [TODO]
- Crypto plug-in [TODO]
- E-Mail plug-in [TODO]
- Math plug-in [TODO]
- Support for alternative number systems [TODO]
PLEASE CONTACT ME before you begin, I might help you to get started in a better way.
The following plug-ins have been implemented already:
- Demo plug-in [DONE]
- SCGI/CGI/WEB plug-in [DONE]
- JSON plug-in [DONE]
Other tasks to be done:
- Windows Version [Work in progress...]
- MacOS port maintenance
- Performance improvements