Releases: sjbarag/brs
BRS v0.13.0
So many things I don't even know where to start.
- more parser fixes than I can count
- programmatic error emissions from the lexer, preprocessor, and parser
- support for manifest parsing and conditional compilation directives like
#if
- runtime support for:
FormatJson
/ParseJson
+=
operators (and similar)++
and--
operators- hex literals
- type designators
- the global
LINE_NUM
variable - the
RoRegex
BrightScript component - the
RoTimespan
BrightScript component
❤️ Contributors (sorted by username) ❤️
- @alimnios72 implemented `RoRegex!
- @Dru89 cleaned up an end-to-end test!
- @jweeber implemented
RoTimespan
and improved our runtime error handling - @jwfearn implemented
FormatJson
andParseJson
! - @TwitchBronBron contributed a ton of parser fixes! All of them have made it into https://github.com/TwitchBronBron/vscode-brightscript-language as a result
Thanks for all your help, everyone! I couldn't do this without each and every one of you.
💚 Special Thanks 💚
As with 0.11, @hulu generated some developer time to help accelerate this project's development. Many of this version's contributors are Hulugans — thanks to everyone at work who helped make this happen!
BRS 0.12.0
12 pounds of changes in a 5-pound box!
- Numerous lexer and parser fixes to expand the set of valid code (brings this closer to RBI)
- Support for multiple brightscript files on the commandline!
- A bunch of global functions!
Type
StrToI
- File IO functions (only for the
tmp:
scheme for now, and in an in-memory filesystem)ReadAsciiFile
WriteAsciiFile
(only for thetmp:
scheme for now, and in an in-memory filesystem)ListDir
CopyFile
MoveFile
DeleteFile
DeleteDirectory
CreateDirectory
FormatDrive
(just a stub)
CreateObject
(only"roArray"
and"roAssociateArray"
are supported so far)
- Methods on
roArray
androAssociativeArray
instances! Specifically:- The
ifArray
interface forroArray
- The
ifAssociativeArray
interface forroAssociativeArray
- The
- The
main
function is now automatically executed! - Conditional compilation directives (
#if
,#const
,#error
, etc.) are now supported. There's no support formanifest
files just yet though!
❤️ Contributors ❤️
- @strattonbrazil implemented multiple-file support and added all the File IO functions! Thanks Josh!
- @jweeber implemented
StrToI
,CreateObject
, and all the methods inifAssociativeArray
. Wowzer! Welcome to the project, Jess!
💚 Special Thanks 💚
@hulu (who employs me, @strattonbrazil, and @jweeber) was generous enough to donate a few developer-weeks to this project to accelerate its development. Thank you to everyone involved in letting that happen — we got a ton accomplished!
BRS 0.11.0
brs
0.11.0 is a much smaller release, but includes a much-needed feature that was missing from 0.10.0: the ability to set values in pre-existing arrays and associative arrays! The following is now possible:
a = [1, 2, 3]
a[0] = "one"
b = { foo: "bar" }
b.lorem = [ "ipsum", "dolor", "sit", "amet" ]
Version 0.11.0 also starts exporting some internals for other JavaScript consumers to use! For now that's just the lexer and the internal types, but more will be coming soon 🕛
BRS 0.10.0
brs
0.10 brings some significant improvements:
- A whole bunch of global functions:
Str
StrI
Substitute
Val
Exp
Log
Sqr
Rnd
Atn
Cos
Sin
Tan
Abs
Cdbl
Cint
Csng
Fix
Int
Sgn
- Overloads (and technically multiple dispatch) for standard-library functions
AssociativeArray
literals and indexing into them (both the[]
and.
forms), e.g.:a = { foo: { bar: 1, baz: 2, "requires quotes": 3 } } print a.foo["requires quotes"] ' prints 3
- For-each loops across associative array keys
- Heavily improved type-mismatch error messaging. New error messages look something like this:
brs> UCase(5) [Line 1] Provided arguments don't match UCase's signature. function UCase(s as String) as String: * Argument 's' must be of type String, but received Integer.
- Floating point math closer to the Reference BrightScript Interpreter (RBI)
❤️ Contributors ❤️
@strattonbrazil implemented 19 standard library functions. Wow!
BRS 0.9.0
brs
0.9 is a massive release, including:
- New global string functions
Left
Mid
Right
Len
Instr
- Named functions
- Anonymous functions
- Proper scoping for function bodies
- Array literals
- For-each loops
- Array indexing
- Maybe some other stuff that I've forgotten
I owe a huge thanks to the contributors of this project — you've made a very real impact to this runtime's progress!
❤️ Contributors ❤️
@gincwang implemented the global Left
function!
@peteley implemented the global Len
, Mid
, Right
, and Instr
functions!
Thanks, you two! This project wouldn't be the same without you 😄
BRS 0.8.0
Version 0.8 of brs
introduces a single — but extremely useful — feature: print lists! Instead of having to write several print
statements on multiple lines (which in turn creates multiple output lines), brs
users can now print the results of multiple expressions with a single line of code. For example, this is now valid:
' no separators
print "lorem " 1 "psum"
' arbitrary mixes of separators
print 9; " is equal to"; 3^2
print "column a", "column b", "column c", "column d"
' arbitrary tabbing
print tab(3) "I started at col 3"; tab(25) "I started at col 25"
' print position
print "0123" pos(0)
' calculate tabs based on position, though you'd probably want to just define " " as a variable
print "lorem" tab(pos(0) + 4) "ipsum" tab(pos(0) + 4) "dolor" tab(pos(0) + 4) "sit" tab(pos(0) + 4) "amet"
' suppress trailing newline
print "no newline";
BRS 0.7.0
In version 0.7.0, brs
learned quite a few new things:
- The
Asc(string)
andChr(integer)
global string functions have been added! - Global function calls are now type-checked at runtime! Attempting to call
Asc(false)
orRebootSystem(1, 2, 3, 4, 5)
will gracefully throw an error reporting the type mismatch. - Runtime errors don't throw JavaScript stack traces anymore! At least I think I got them all.
❤️ Contributors ❤️
@strattonbrazil implemented Asc(string)
and Chr(integer)
for [email protected]
. Thanks so much! 😃
BRS 0.6.1
BRS 0.6.0
In version 0.6.0, brs
learned how to call global functions! There's only three starter functions for now, but adding more incrementally should be pretty easy after this:
LCase(string)
: Accepts astring
and returns its lowercase representation.UCase(string)
: Accepts astring
and returns its uppercase representation.RebootSystem()
: Warns you that it does nothing the first time you call it, then does nothing. 🎆