Updates from the Repl.it team about the product

← Back to all posts
Announcing Basic Language With Graphics (Beta)
amasad (2406)

Hey everyone!

I've been working on a classic BASIC language inspired by Microsoft Atari Basic. It comes with a 50x50 display by default and makes it really easy to draw things and make games. The language is still in Beta and I'll be improving it over the coming weeks. For now here is the documentation and a sample snake game that I found on the internet and modified to make it work here. Please let me know what you think.

If you're curious you can find the source code for the interpreter here (https://repl.it/@amasad/pg-basic). Feel free to fix bugs and send patches.

[update] Docs moved here: https://docs.repl.it/misc/basic

[update 2] Changelog:

  • You can now use variables with multiple letters
  • LET is optional. You can define variables like so 10 X = 1
  • TEXT lets you draw text on the screen (refer to docs)
  • Display is now automatically focused after the program is run
  • GETCHAR handles long-presses better

[update 3] Changelog:

  • You can now create multidimensional arrays ARRAY a, 2
  • You can now draw an entire grid with one call DRAW
  • Refer back to docs
Commentshotnewtop
[deleted]

It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration - Edsger W. Dijkstra

amasad (2406)

@TaylorLiang I learned on Basic and I'm still alive!

Dijkstra was a major grump btw

Warhawk947 (510)

@amasad are you sure about that

[deleted]

@amasad just a fun quote i decided to share. Dont completely agree with it. One of my other favorite quotes to share is: "OOP is so bad, that it could have only originated form california"

SixBeeps (2378)

@TaylorLiang Okay, so I did some research.
That quote came from the 70's, when BASIC was a lot more different than what we know it to be. There weren't things like GOSUB implemented, so code was often really messy compared to other languages.

[deleted]

Somebodys going to make DOOM in this

amasad (2406)

FYI: just updated with clearing functions

MrEconomical (2197)

@amasad incredible language! I could never imagine making something as complex as an interpreter. love the old classic BASIC retro feel!

TambiJalouqa (1)

Love this. You brought back so many memories of BASIC but also a chance to re-learn it!

Pygrammar (2)

You know what would be cool; AI for the snake..
Anyways impressive.

Coder100 (3171)

Yay!
When will TI-basic come out? Will be nice to do maths on repl.it :)

tharlynnhtetong (44)

This is gonna be great.

ChezCoder (1467)

If you press D then A it goes straight backwards and kills itself.

TristanMisja (34)

If I were to run the interpreter, which file would I need to execute?

amasad (2406)

@TristanMisja basic.js is the main file but you need to instantiate it in index.js

Verdinc (0)

Hi, I don't know how else to contact repl.it. I'm new and trying to buy into repl.it if it supports Dart+Flutter for desktop apps (& other platforms later). I need that info and related main help resources.

LiamDonohue (280)

BASIC (Beginners' All-purpose Symbolic Instruction Code) is a family of general-purpose, high-level programming languages whose design philosophy emphasizes ease of use. The original version was designed by John G. Kemeny and Thomas E. Kurtz and released at Dartmouth College in 1964. They wanted to enable students in fields other than science and mathematics to use computers. At the time, nearly all use of computers required writing custom software, which was something only scientists and mathematicians tended to learn.
In addition to the language itself, Kemeny and Kurtz developed the Dartmouth Time Sharing System (DTSS), which allowed multiple users to edit and run BASIC programs at the same time. This general model became very popular on minicomputer systems like the PDP-11 and Data General Nova in the late 1960s and early 1970s. Hewlett-Packard produced an entire computer line for this method of operation, introducing the HP2000 series in the late 1960s and continuing sales into the 1980s. Many early video games trace their history to one of these versions of BASIC.
The emergence of early microcomputers in the mid-1970s led to the development of the original Microsoft BASIC in 1975. Due to the tiny main memory available on these machines, often 4 kB, a variety of Tiny BASIC dialects was also created. BASIC was available for almost any system of the era, and naturally became the de facto programming language for the home computer systems that emerged in the late 1970s. These machines almost always had a BASIC interpreter installed by default, often in the machine's firmware or sometimes on a ROM cartridge.
BASIC fell from use during the later 1980s as newer machines with far greater capabilities came to market and other programming languages (such as Pascal and C) became tenable. In 1991, Microsoft released Visual Basic, combining a greatly updated version of BASIC with a visual forms builder. This reignited use of the language and "VB" remains a major programming language in the form of VB.NET.

LiamDonohue (280)

request: add Visual Basic

LiamDonohue (280)

also, is this your personal project?

amasad (2406)

@LiamDonohue sorta. I mostly work on it on the weekend.

[deleted]

You say it comes in a 50x50 display "by default". Does this mean we can change the size of the display?

amasad (2406)

@roylatgnail we were thinking about that. It's easy to add. What would you want it for?

[deleted]

@amasad It would be nice for making art, and games. You could programmatically (for example) limit the size or increase the size of the snake game for increased or added difficulty

21natzil (1118)

Feature request: Either let us set multiple variables on one line or bitwise operations

amasad (2406)

@21natzil how are these features related?

21natzil (1118)

@amasad I could use the AND bitwise operation to extract numbers from one big number, but that's a very hacky way :P

StudentFires (327)

Although many may not fully agree with me, it has always seemed redundant to put parenthesis when calling a parameter-less function, so, since your making the language, can you change this, or are you trying to properly emulate BASIC? The only language I've seen do this is PineCone.
https://pinecone-lang.herokuapp.com

Also... do you support user-defined functions yet?

amasad (2406)

@StudentFires I'm not a big fan of optional syntax because it makes it hard for newbies to know when to use it or when to not use it. The more you add options to a language the harder it is to learn, I think.

StudentFires (327)

@amasad Yeah I thought you'd say something like that, but what about the second part of my question on user-defined functions?

[deleted]

@StudentFires oooh, pinecone. Finally somebody else that knows pinecone

JadenGarcia (37)

@roylatgnail Does Pinecone really not require parenthesis if a function lascks parameters!?

[deleted]

How do you change a variable?

amasad (2406)

@CodeABC123 You can use LET again. But I'm thinking of dropping LET altogether and letting you assign a variable without it -- what do you think?

[deleted]

Cool!

SixBeeps (2378)

If we want to make modifications, how do we send them in?

amasad (2406)

@SixBeeps Until @turbio implements "merge request" I guess GitHub is the easiest thing. The repo is here: https://github.com/amasad/pg-basic

eankeen (1211)

looks cool! the documentation links appears to be broken though

eankeen (1211)

@amasad oh oops, for some reason when you said "for now here is the documentation and a sample snake game" i didn't connect that 'here' means the documentation is 'here on this page', thought it should have been a hyperlink

amasad (2406)

@eankeen how nice is it that the whole spec for the language is a single page?

StudentFires (327)

Came back and re-looked through the language tutorial you made, then I noticed the following:

CLS
CLS clears the console and the display.

CLC
CLC clears the console and the display.

Should CLC clear the display?

Also, this is an interpreted language, not a compiled language, right?

amasad (2406)

@StudentFires Fixed. And yes it is interpreted but it does something like compiling which is it translates basic expression to javascript on the fly. Out of laziness mostly but it's also faster.

Warhawk947 (510)

Aight guys lets make fortnite

TheDrone7 (1006)

Could you use QB64 as the BASIC compiler instead please.

amasad (2406)

@TheDrone7 if you write or find a good JavaScript compiler I will add it (the one we have now has a lot that's missing)

[deleted]

@amasad why javascript?

TheDrone7 (1006)

Can you share the current [email protected] I'll try adding to it.

[deleted]

@Coder100 c++ is faster

TheDrone7 (1006)

Oh, thank you. I'll see what I can do. @amasad

TheDrone7 (1006)

@amasad I almost gave up on working on it after seeing you write tests for everything.

StudentFires (327)

@amasad So, since this was done in JavaScript, I thought It wouldn't be irrelevant to point out that Repl's NodeJs is more outdated than my browser. Can you guys update it, or better yet set, up an automated update script? I've been trying to try out the newest JavaScript features.

TheDrone7 (1006)

Node.js in general has always been behind browser js iirc, you can still use the latest node js version by simply adding node to your package list. @StudentFires

TheDrone7 (1006)

Just search for node in the package manager and add it. @StudentFires

StudentFires (327)

@TheDrone7 How do I search the package manager? Lol, sorry I'm pretty new to Node and NPM.

TheDrone7 (1006)

I'm talking about the repl.it package manager. Node and npm can be confusing for beginners so repl.it provides a gui package manager. click on my profile and see my posts, you'll find a introduction to the repl.it editor post. Thay will give a quick overview of the repl.it editor. @StudentFires

StudentFires (327)

@TheDrone7 But still... wouldn't it be better if Node was already updated, for everyone who uses Repl.it?

StudentFires (327)

@TheDrone7 Hmm, I can't get it to work, I added node 13.12.0, but literally nothing changed. My code still failed. The package.json updated though.

TheDrone7 (1006)
  1. It'll obviously be better if node is updated by default but we always have workarounds until they actually do it. Me and a few other members of the replit discord have constantly been bugging the replit team about this but they do have other more important issues to fix and features to add.
  2. That is weird, repl.it normally installs all dependencies before running so it should not fail. You can try creating a file named exactly .replit with the contents: -
language = "nodejs"
run = "npm i && node index.js"

If it still doesn't, then there is an error in your code.
@StudentFires

StudentFires (327)

@TheDrone7 Hmm, why are we running what's npm i, everything els, from the .replit to && isn't new to me.

StudentFires (327)

@TheDrone7 Uhh, update: My repl was bugged, it didn't save anything past a certain point, it happens to me every once in a while. I'll realize it's not running my current code, but an outdated version, once I spot it, I try to copy my current code because Repl isn't saving an acknowledging my updates. This has resulted in severe data loss before. Also, the Repl crashed.

TheDrone7 (1006)
  1. npm i is short for npm install which basically reads all packages from your package.json file and installs them. && basically indicates the part after it should be executed after the command before it has finished executing. .replit are special replit files for custom commands and stuff.
  2. [email protected]
CodingCactus (2527)

Really cool, I feel like your example for the ATAN is wrong (typo), it says:

10 PRINT TAN(1)

Should it say?:

10 PRINT ATAN(1)

Also, I'm confused about the ASC one, if you write:

10 PRINT "s"

It gives out 115. Why doesn't it just print: s ?

Also, it says in the lowercase section

10 PRINT UPPERCASE("BASIC")

will print "basic", is this a typo? should it be LOWERCASE("BASIC")?

Anyway, this looks really cool Well done!

sugarfi (472)

@CodingCactus the reason 10 PRINT "s" prints out 115 is because that is the ASCII code for s.

CodingCactus (2527)

@sugarfi so why does 10 PRINT "hello" print hello and 10 PRINT "s" print 115
surely they are the same thing?

sugarfi (472)

@CodingCactus not really. hello is more than one character, so it doesn't have one single ASCII value. s, on the other hand, has one value and so that is printed.

CodingCactus (2527)

@sugarfi It was just a typo, it was supposed to be 10 PRINT ASC("s")

sugarfi (472)

@CodingCactus ok. just out of curiosity, how do you know it was a typo? Is the source for this implementation available somewhere?

CodingCactus (2527)

@sugarfi look at the ASC section now, it has been changed

StudentFires (327)

@CodingCactus Does it support Unicode? Can I assign a variable a number with a decimal point?

StudentFires (327)

@amasad Does ASC() work with Unicode characters?

amasad (2406)

@StudentFires yes. I guess that makes the name kind of silly but it relies on JavaScript strings.

StudentFires (327)

@amasad Okay. Good luck with the language!

amasad (2406)

@StudentFires thanks. Are you going to try it?

LiamDonohue (280)

is this THE BASIC? as in Beginners' All-purpose Symbolic Instruction Code?

LiamDonohue (280)

Alright ima go learn basic @amasad

Highwayman (1325)

Reactions in order of occurrence:

Announcing Basic Language With Graphics (Beta)

A NEW LANG!!! :D YAY!

Feel free to fix bugs and send patches.

Holy crap that’s so cool we can help!! woah!

[Syntax Specifications]

Hm...