Jump to content
IGNORED

FastBasic 4.5 - 2021 release


Recommended Posts

THEN is used when there's only one possible outcome, otherwise you use IF...ENDIF (with optional ELIF and/or ELSE) which allows you to span multiple lines of code.

 

Simple thing to do is never use THEN and you'll get to grips with it a lot faster.

 

 

  • Like 1
Link to comment
Share on other sites

Atari BASIC also has the construct GOTO <expression> and GOSUB <expression>, where <expression> can evaluate to a line number at runtime.  So in Atari BASIC you could write something like:

 

100 INPUT OPTION: GOSUB OPTION * 1000

 

where "trimix" starts at line 1000, "mod" starts at 2000, "end" starts at 3000, "min_od" starts at 4000 and so on.

  • Like 1
Link to comment
Share on other sites

11 hours ago, MrFish said:

 

I'd say it's a good one to add. TBXL uses it (as well as ON GO# -- line label), and even Atari BASIC has ON GOTO & GOSUB (which means TBXL has these too).

 

Either that or add some type of SWITCH/CASE type structure.

 

CASE would be good one to have. Working with BBC Basic on RISC OS I've found it nice and easy to work with. 

  • Like 1
Link to comment
Share on other sites

There's also a little trick that's useful for writing ten liners.

 

IF a=1 THEN b=2:c=1

 

In this line c will equal 1 regardless of what value a has because the colon acts as a completely new line, unlike Atari BASIC where it acts as an extansion to the current line.

 

IFa=1t.b=2:c=1

IFa=1:b=2:e.:c=1

 

As you can see, it save 2 bytes over using IF..ENDIF :)

 

 

 

Link to comment
Share on other sites

13 hours ago, Preppie said:

IF a=1 THEN b=2:c=1

In this line c will equal 1 regardless of what value a has because the colon acts as a completely new line, unlike Atari BASIC where it acts as an extansion to the current line.

I always mentor my junior colleagues to not do that in their C/C++ code.
It leads to the next guy thinking that c=1 is also conditional when it isn't.

Of course, when trying to bum every byte then you do what you need to do - but it's still gross.

  • Like 1
Link to comment
Share on other sites

Hi all, and thank you for all responses!

 

On 8/16/2021 at 2:31 PM, MrFish said:

Isn't this a job for:

 

ON option EXEC trimix, mod, (etc.)

 

Or is it not part of the language?

 

Not currently, as Vitoco said, FastBasic currently does not support the "ON/EXEC" statement.

 

On 8/16/2021 at 4:37 PM, MrFish said:

I'd say it's a good one to add. TBXL uses it (as well as ON GO# -- line label), and even Atari BASIC has ON GOTO & GOSUB (which means TBXL has these too).

Yes, it could even make the editor shorter - as currently uses a long string of "IF KEY=*" for processing all keyboard commands.

 

To correctly implement it, I would need a way to count the number of parameters in the parser, basically, the parser needs to transform this:

ON expression EXEC A,B,,,E,F

Into this:

DATA targets() = A,B,0,0,E,F
temp = expression
IF temp > 0 AND temp <= 6 THEN EXEC targets(temp)

This is specially difficult as the parser can't create arbitrary variables (in this case, "targets" and "temp"), so it would be better to define a new token that mixes all the above.
 

i'm currently rewriting the cross-compiler, so the code is in a state of flux, but after that I will see if adding "ON/EXEC" is actually feasible - in the constraints of 8KB for the IDE.

 

On 8/16/2021 at 7:44 PM, FifthPlayer said:

Atari BASIC also has the construct GOTO <expression> and GOSUB <expression>, where <expression> can evaluate to a line number at runtime.  So in Atari BASIC you could write something like:

 

100 INPUT OPTION: GOSUB OPTION * 1000

 

where "trimix" starts at line 1000, "mod" starts at 2000, "end" starts at 3000, "min_od" starts at 4000 and so on.

 That is not possible in FastBasic, as it does not have line numbers. Also, it is a very bad construct from the compiler point of view, as you can't easily predict the control-flow, making some optimizations imposible - in your example it even allows to jump to any line of the code!. I specifically removed "GOTO" from the language to simplify the parser and make the generated code faster.

 

On 8/16/2021 at 4:37 PM, MrFish said:

Either that or add some type of SWITCH/CASE type structure.

 

On 8/17/2021 at 4:44 AM, nebpehtira said:

CASE would be good one to have. Working with BBC Basic on RISC OS I've found it nice and easy to work with. 

 

That would not be as difficult, but IMHO, it does not add anything to the language not possible already, it is fairly easy to just do:

 

X = expression
IF X = 2
  ; Case 2
ELIF X = 5
  ; Case 5
ELIF X = 1234
  ; Case 1234
ENDIF

 

Have Fun!

 

  • Like 2
Link to comment
Share on other sites

5 minutes ago, dmsc said:

i'm currently rewriting the cross-compiler, so the code is in a state of flux, but after that I will see if adding "ON/EXEC" is actually feasible - in the constraints of 8KB for the IDE.

 

Why the constraint of 8 KB?

  

5 minutes ago, dmsc said:

That would not be as difficult, but IMHO, it does not add anything to the language not possible already, it is fairly easy to just do:

 

This was just a suggestion, failing ON/EXEC. Even though it's generally replicated with multi-line IF/ELIF, it's more about code organization and clarity.

 

Link to comment
Share on other sites

Hi!

Just now, MrFish said:

Why the constraint of 8 KB?

It is a self-imposed constraint to limit the growth of the language: Mi intent is for FastBasic to be small, simple and fast. So, every time I add something to the language, it needs to be tough as how to minimally add the feature and justify it's usefulness.

 

Just now, MrFish said:

This was just a suggestion, failing ON/EXEC. Even though it's generally replicated with multi-line IF/ELIF, it's more about code organization and clarity.

Yes, I know. What I was trying to say is that IMHO, the current "IF/ELIF/ENDIF" structure gives good code clarity, without complicating the language.

 

Have Fun!

 

  • Like 3
Link to comment
Share on other sites

27 minutes ago, dmsc said:
Quote

This was just a suggestion, failing ON/EXEC. Even though it's generally replicated with multi-line IF/ELIF, it's more about code organization and clarity.

Yes, I know. What I was trying to say is that IMHO, the current "IF/ELIF/ENDIF" structure gives good code clarity, without complicating the language.

And about clarity and simplicity, it won't be possible to include PROC's parameters in the ON/EXEC list like in the actual EXEC!!!

Link to comment
Share on other sites

Hi!

1 hour ago, vitoco said:

And about clarity and simplicity, it won't be possible to include PROC's parameters in the ON/EXEC list like in the actual EXEC!!!

Yes, you would need to write an "stub" to call PROC's with parameters:

ON x EXEC A,B,C

PROC A
  EXEC P 2, 3
ENDPROC

Also, it could be abbreviated " O. x @ A, B, C ", with only one "@".

Have Fun!

Link to comment
Share on other sites

I just started playing around with FastBasic (V4.52), and decided to see if it would work at 80 columns with my XEP80-II, and Avery's Ultra driver.

 

DSC01815.thumb.JPG.b3260356ce7ee1bf2bb3599aa738a23a.JPG

 

So far so good, although I have much to learn and presently no time, so this will have to go on the back burner for now.

 

Nice to have the extra navigation keys PageUp and PageDown working from my TK-II and a PS/2 keyboard. And I was blown away to see that the IDE works as a full screen editor allowing me to move up and down the pages quite easily very much like being in a word processor. Nice job ?

 

This just gives me the extra incentive I needed to get this project completed :)

 

BTW, can FastBasic be an 8K cart image? Was thinking it would be kinda cool to have it as an alternate Basic in my 576NUC+.

 

  • Like 6
Link to comment
Share on other sites

On 8/18/2021 at 11:19 AM, dmsc said:

It is a self-imposed constraint to limit the growth of the language: Mi intent is for FastBasic to be small, simple and fast. So, every time I add something to the language, it needs to be tough as how to minimally add the feature and justify it's usefulness.

 

Noble cause.

 

On 8/19/2021 at 7:40 PM, mytek said:

BTW, can FastBasic be an 8K cart image? Was thinking it would be kinda cool to have it as an alternate Basic in my 576NUC+.

 

This would be a nice, additional justification for the constraint.

 

  • Like 3
Link to comment
Share on other sites

  • 4 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...