Skip to content

A programming language designed around supporting ASCII animation based code golfing challenges.

Notifications You must be signed in to change notification settings

tkellehe/noodel

Repository files navigation

Noodel

<script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> <script src="noodel-latest.js"></script> <script type="text/javascript" src="docs.js"></script>

Noodel is a programming language that has the main focus of assisting ASCII Animation code golfing challenges. Noodel has its own 256 character set. There also is an editor designed for Noodel that utilizes its JavaScript parser here.



Since the language is for challenges visit the issues page and post challenges where Noodel was used. This will allow others to learn how to Noodel as well as notice features that could be added to assist with challenges (Learn more). This language is still under construction and since I like to code for Noodel from the online editor things may randomly break in the prototyping editor, features disappear/change, zero comments made on commits, or random issues appear for myself. If there is a need to use an older version of Noodel that was good enough before, visit the release directory for a list of all of the versions.

Introduction

Noodel has three main data types: NUMBER, STRING, and ARRAY. ARRAY objects are always passed-by-reference, but the others are passed-by-value (...)

A "Hello World" in Noodel is pretty simple: Hello,¤World!

The STRING literal is created and placed onto the stack which can be done with any of the printable characters. At the very end, whatever is on the top of the stack gets printed. Therein, the Hello,¤World! gets printed. But what happened to the ¤? The ¤ is used to represent a space when handling STRING types. This allows for the space character to act as a NOP to seperate commands. The same was done with the line feed character which is represented by (...)



The Memory Model

Noodel is a stack-based language with a slight twist. The perspective of the stack can be changed. A simple example of this is if you need to store an object for later but do not want it to be operated on, you can move the top of the stack down. For example: noodelʠsome¤workƥ



The literal noodel gets pushed onto the stack, then the top of the stack gets moved with the ʠ command. Then the STRING literal some¤work gets pushed onto the stack. The command ƥ moves the top of the stack back up, therein noodel is on top and is printed.

Now that is kind of cool, but it gets more interesting when there are arrays involved. Let us take this script: ¤noodel¤ȷçıḷẹḍe



It produces the same output as the script ¤noodel¤ḷçẹḍe, but takes advantage of the fact that ARRAY types are pass-by-reference. So, first ¤noodel¤ is pushed onto the stack. Since the stack is merely an ARRAY, we call the ȷ command which jumps out of the current stack and into the containing stack. The top of this new stack is the stack with the STRING literal. So, we print it to the screen using ç therein the ARRAY object is sitting in the stdout. Then we call ı command to jump into the ARRAY at the top of the stack to make it the current stack. This allows us to now start operating on the STRING live. Instead of jumping out, printing, and then jumping back we can use Ð which pushes the current stack to stdout: ¤noodel¤Ðḷẹḍe