(Latest patch versions in github history and at the top of Change Log) - note that they are not noted with a version number until that version is totally complete
Newest Version: 0.18A
- 0.18A
- 0.17A
- 0.16.3A
- 0.15.1A
- 0.14A
- 0.13.3A
- 0.12.5A
- 0.11.12A
- 0.10.1A
- 0.9.2A
- 0.8A
- 0.7A
- 0.6.2A
- 0.5.3A
- 0.4A
- 0.3.1A
- 0.2A
- 0.1A
- Restructured code
- Preparing for LLVM update
- Added ! (not)
- Added || and && for expressions
- Added || and && for conditions
- Changed a lot of examples
- Added jumpif and jumpnif (inner parts of the compiler)
- Updated while and if to use jumpifs
- Updated README documentation
- Updated arcs to explain the existance of config files
- Fixed argument alignment - hopefully for the last fricking time
- Updated strlib
- Fixed argument alignment
- Temporarily disabled argument alignment for 32 bit
- Fixed issues to do with argument alignment
- Fixed multiple arguments for 32 bit (causing issue with 64 bit multiple arguments)
- Fixed multiple arguments for 64 bit
- Fixed a large portion of 32 bit generation - arguments not being correctly accepted, etc.
- Removed UUID dependency cuz why the fuck did I have it in the first place?
- Sped up compile time by a TON (no need to generate stupid UUIDs)
- Added -i flag for quicker including
- Added cfg support with lighthouse for the examples architectures
- Various bug fixes
- Added binary operators << >> | &
- Added todos for ~ operator
- Added mathlib.spl
- Changed expressions
- Fixed bugs to do with expressions
- Added local buffers
- Added @goto and @makelabel
- Restructured internal local variable handling (now its not copying extensively the more scopes you have for compiling!)
- Fixed issue with makelabel and made it so there is an _ between each of the character numbers
- Minor changes
- Mostly contributed to writting sopl libs
- Added ability to have more than 4 or whatever amount of registers you specified for passing arguments
- Added a better system for passing arguments
- Moved libs to libs folder
- Started strlib.spl
- Added arbitrary memory access to be able to dereference and reference data
- Added BAND operand to be able to get the memory location of a local variable
- Added Paren evaluation in expressions: c*(a+b) (WARNING there might be some issues, and if you find any, please do report them!)
- Changed CStrings to now be automatically in place of sized strings. AKA "Hello" is no longer a sized string but instead a normal cstring.
- Added ability to have the 's' letter after the string to make it sized
- Fixed minor bugs. Added 'result of' so now conditions are typechecked
- Removed all contents of std.spl as it is outdated
- Fixed minor bugs to do with 64 bit division and multiplication
- Added examples for euler problems.
- Added while loops
- Added the ability to have expressions inside while loop conditions
- Added the ability to have expressions inside if loop conditions
- Added 'euler' folder for future euler problem examples
- Added 'result' as part of OfP
- Fixed bugs and minor issues
- Updated examples to now include 'result' instead of = RAX
- Made 'return' actually return a value from a function now (you are forced to return if you specify return value!)
- Removed return stack - it was never really something that was planned to stick around, but was more like a temporary patch for returning back when we were migrating over to C x86 standards
- More examples comming soon :D
- Added +=, -=, *=, /= as SETOperations
- Added evaluation (updated examples)
- Added expressions
- Added expression evaluation
- Fixed ifs and added condition (conditions still don't get typechecked nor can they be evaluated with expressions (yet) - only with ofps: constants,local variables and registers)
- Moved +, -, *, / to a new Token type 'Operand'
- Added TEMPORARY if statements
- Added else statements
- Added boolean operations
- Fixed testing
- Added local variables to scopes
- Implemented the rest of the float32 registers
- Added ability to assign strings (only cstrings currently), to variables
- Also fixed bug related to ^ where strings wouldn't be counted as 'used' if assigned to variable
- Fixed architecture examples
- Added obj-extension for architectures
- Added flags for architectures
- Added DLL importing (currently only works as extern)
- Added DLL exporting (currently only works as global)
- Removed auto-exporting of functions (you need to do dll_export to make them global now, although this was reverted later on)
- Fixed a few bugs to do with string UUID overloading
- Added pointers with types (*char, **int, etc.)
- Added macros for type checking
- Changed local variables to now be on the stack
- Merged parameters and local variables
- Made big changes in terms of how things are handled
- Preparing for the introduction of if else elif scopes
- Removed OfP::PARAM and replaced it with Localvariable
- Changed flags to be less frustrating and more flexible (checkout README)
- Soft disabled return stack (for the upcomming revamp of returning)
- removed -noRaxWarn
- Added build to usage (It was added before but I forgot to add it to usage, sorry :|)
- Slowly transitioning towards the new modern syntax
- Added a few windows 'headers'
- Added types for constant definitions
- Added constant overwritting
- Made constant overwritting be allowed only if they are the same type (its pretty unreasonable to overwrite something with a different type unless its local which is still yet to be implemented)
- Removed a lot of 'comment out' comments
- Moved a lot of the TODO comments at the end of the file for easier tracking
- After a lot of consideration I have decided to remove the stack oriented out of sopl
- Changed a lot of the main source code for easier use
- Added testing
- Fixed examples
- Fixed function parameters (still not done with returning)
- Added typechecking for externals and functions
- Fixed arguments for main
- Fixed examples:
- Updated argstest.spl
- Updated typecheck.spl
-
Made a lot of dramatic changes in terms of function/external syntax.
-
Added support for the rest of the registers in x86 64
-
Changed a lot of examples
-
Broke some of the examples
-
Broke dynamic functions like printf and scanf
-
Added mundane folder for examples that are not very interesting
-
List of entirely fixed examples:
- Updated constants.spl
- Updated cstring.spl
- Updated helloWorld.spl
- Updated localvars.spl
- Updated name.spl
Mundane:
- Updated basicHelloWorld.spl
- Updated fHelloWorld.spl
- Updated negative.spl
- Updated helloC.spl
- Updated stack_test.spl
- Updated stdio_files.spl
-
List of partially broken examples (hopefully fixed in next Change log): - Broken argstest.spl - arguments to functions are still yet to be implemented with the new standard - Broken div.spl - broken because of a lot of other stupid reasons regarding the usage of idiv - Broken functions.spl - for obvious reasons, functions are yet to be fixed with the new syntax - Broken functions2.spl - for obvious reasons, functions are yet to be fixed with the new syntax - Broken typecheck.spl - broken because typechecking for arguments isn't implemented yet
-
Migrated to x64 and its style of syntax
-
Added architectures:
[NOTE]: Checkout examples of architectures here
- Added built in architectures:
- windows_x86/win_x86
- windows_x86_64/win_x86_64
- linux_x86
- linux_x86_64
- If not specified with the -arc flag, the compiler would try to default to the current OS architecture, if it doesn't find it, it will inform you and prompt you to specify the architecture
- Made externals to use HashMap instead of Vector to reduce O(n) situation for finding externals
- Entirely changed the way scopes are handled! Broke a lot of examples with IF statements which are expected to be fixed in the next patch (NOTE: They are not fixed yet)
- Prepared to add local variables, constants and more to scopes
- HUGE OPTIMIZATION because string system in rust is bad
- fixed copying the entire string every time you get a single char
- cut compile time by 18 TIMES
- Added benchmarks for everything
- Optimized Strings (No benchmarks cuz I forgot :<)
- Temprarily disabled chars
-
Optimized Lexer Word processing and re-wrote basically the entirety of the lexer that isn't about strings and chars (planned for next update)
-
Huge optimization to Lexer cutting compile time in half as shown in benchmark
-
Using shared references (Rc's) for locations which makes it so there are a lot less clones for locations
-
Preparation for optimization of everything in the near future:
- strings in Lexer
- chars in Lexer
- currentFunction
-
Benchmarking is now officially a constant part of this project and information on performance is going to be shown there
-
Changed versions.md manual to display newest of sub minor versions at the top instead of the old minor version
-
Pin pointed causes of slow downs :D
- Changed all versions from sub minor to minor (0.0.1A -> 0.1A).
- Changed all previous instances of sub-minor versions
- Added Linux folder
- Added Linux/syscalls.spl
- Added Linux/systable.txt
- Improved performance by removing unnecessary clones
- Started working on deprecating the currentFunction system to improve it and prepare for the near future changes (Inspired by another project of mine by the name STAP)
- Started preparing for optimzation and finishing some TODOs
- Added -callstack flag for specifying the amount of space needed for localvars.
- Benchmarking to find out that defining a lot of constants leads to a lot of time taken for compiling (resolved in 0.9A, // The issue was actually with the lexer and not with the constants).
- At 350+ constants it takes roughly 10-8ms to evaluate which is a long time for such a simple thing.
- Added project resources - Added benchmarks
- Added C stdio.spl
- Added C stdlib.spl
- Added helloC.spl example
- Added comments.spl example
- Fixed Comments
- Changed README.md version syntax
- *Added optimization to remove any strings that were declared inside of functions that didn't end up in the final build
- Added optimization for unused functions
- Changed the flag -nuw to now be -nou with parameters for (all, funcs, externs, strings) to disable specific warnings from being shown
- Updated README.md flags
- Changed -r to now run the program as well as build it
- Added named parameters
- type checking for local variables
- redid the entire function system to no longer use a callstack to make it more compatible with C
- Fixed the majority of the errors to do with pop and remade them to use manual instructions I.E. sub rsp, 8 to expand the stack and move in the value by hand
- Introduced 'rs' keyword for the return stack. Now you can do rs push and then the value (only works for registers currently)
- Added examples for function parameters: functions.spl argstest.spl
- Fixed examples to now use new function syntax as well as cstrings
- Changed version.md syntax
- Added new test cases: basicHelloWorld.spl
- Changed compiler build to now include information of const definition declaration, external location declaration and more
- Added '-nuw' flag for disabling unused warnings when running in release.
- Changed version.txt to version.md for easier reading
- Fixed including to now include constant definitions.
- Added basic type checking (without any branching!)
- -ntc (No Type Checking) flag
- Updated the macros to be more flexible with loc_display()
- Changed "".to_string() to String::new() in most places
- added Unused externals for release to be folded and for constant strings that were never used (for constants)
- Added interrupts
- Added usage
- Added optimization for unused strings as well as debug information for assembly
- Added cstrings,
- -release flag
- documentation for when everything was added up to this point
- Added release support for weather or not the callstack should be added in nasm build
- Added versions.txt, Updated the README and added the Manual