Stove
The Stove programming language
Install / Use
/learn @asxez/StoveREADME
🚀 The Stove programming language
<a href="./ReadMe_CN.md">中文文档</a>
The Stove programming language is an object-oriented, interpreted language.
🛠️ Build Instructions
On windows, download the source code and go to the source code folder:
make n
now you will get a file called stove.exe, then:
.\stove.exe test.stv
if you can look a string on console, the string is "this is a test code for Stove.", so that's ok now.
💻 Using Stove
- It's if-else statement
if (condition) {
statement
} else {
statement
}
- It's for loop statement, the
1..10is a range(like python's range() object) object.
for i (1..10) {
System.print(i)
}
- It's while loop statement, you should know that you can's use
++to self-add.
var num = 0
while (num < 10) {
System.print(num)
num = num + 1
}
- You can's use
definekeywords to define a method and a maximum of 16 argument are supported.
define test_fun(arg) {
System.print(arg)
return "stove"
}
var ans = test_fun("hello world")
System.print(ans)
- You can define a list object literally, or you can define it using the underlying method.
var a = []
var b = List.new()
It's List class's method and args:
var a = []
var arg = a.append(arg) //add a element and return this arg
a.clear() //clear list
var count = a.count //return length of list
var element = a.insert(index, element) //insert the element at the index and return this element
var element = a.removeAt(index) //remove index element and return this element
var element = a[index] //return index element
a[index] = element //modify the value of the element at the index
- You can define a map object in the form of literals or underlying method.
var a = {"key": "value"}
var b = Map.new()
It's Map class's method and args:
var a = {}
a.clear() //clear map
var bool = a.containsKey(key) //check whether a key exists in the map object and return bool
var count = a.count //return the number of key-value pairs in a map object
var value = a.remove(key) //remove key's value and return this value
var value = a[key] //you can refer to the index value of the Python dictionary
a[key] = value //if a key already exists, modify the value, otherwise add a key-value pair
- You can define a range object in the following way:
var range = 1..10
It's Range object's method and args:
var range = 1..10
var from = range.from //return range's from
var to = range.to //return range's to
var max = range.max //return range's max value
var min = range.min //return range's min value
var iterate = range.iterate(arg) //return range's arg element
var iteratorValie = range.iteratorValue(arg) //return iterator
- It's Num object's method and args:
/* It's the four arithmetic and comparison of numbers */
num1 + num2
num1 - num2
num1 * num2
num1 / num2
num1 % num2
num1 > num2
num1 < num2
num1 >= num2
num1 <= num2
/* This is a bit operation of numbers */
num1 & num2
num1 | num2
num1 >> num2
num1 << num2
~num
Num.pi //3.14159265358979323846
Num.fromString(arg) //convert string to num
num.abs //it's abs() method of c lang
num.acos //it's acos() method of c lang
num.asin //it's asin() method of c lang
num.atan //it's atan() method of c lang
num.ceil //it's ceil() method of c lang
num.sin //it's sin() method of c lang
num.cos //it's cos() method of c lang
num.tan //it's tan() method of c lang
num.floor //it's floor() method of c lang
num.sqrt //it's sqrt() method of c lang
num.atan() //it's atan2() method of c lang
num.fraction //return the decimal part of this number
num.truncate //return the integet part of this number
num.isInfinity //judge if the number is infinite
num.isInteger //judge if the number is integer
num.isNan //judge if the number is nan
num.toString //convert num to string
- It's String object's method and args:
String.fromCodePoint(arg) //create string from code point
string.contains(arg) //check if the string contain arg and return bool
string.startsWith(arg) //check if the string start with arg and return bool
string.endsWith(arg) //check if the string end with arg and return bool
string.indexOf(arg) //check where the substring starts in the string and return this index
string.iterate(arg) //an iterator that returns the next UTF-8 character, arg must be positive integer
string.iteratorValue(arg) //return the value corresponding to the iterator
string.toString //itself
string.count //return length of string
- It's Thread object's method and args:
Thread.new(arg) //create a instance of thread
Thread.abort(error) //exit the thread with the error message as a argument
Thread.suspend() //suspend thread
Thread.yield() //give up the CPU without argument
Thread.yield() //give up the CPU with argument
Thread.current //return current thread
thread.call() //switch to next thread without argument
thread.call(arg) //switch to next thread with argument
thread.isDone //return whether the current thread has run completely
- It's System class's method and args:
System.print(arg) //output arg
System.print() //without arg will output "\n"
System.gc() //garbage collection runs automatically, but you can also start it manually
System.clock //it's return timestamp
🔧 Debug Stove
You can use this command when building:
make d
🦾 Use the command line
You can use the command line using the following commands:
.\stove.exe
you should know It only supports a single line of code, for example:

❓ Existing problems
- The for loop statement fails to iterate, for example:
for i (1..10) {
System.print(i)
}
it will output:
<br>

- There is a problem with the way the class is constructed:
class Test {
var name
var age
new(a, b) {
name = a
age = b
}
say() {
System.print("I am" + name + "," + age + "years old.")
}
}
var t = Test.new("stove", "0")
t.say()
it will output an error:
<br>

🤝 Contribute to the stove
You can create an issue or pull request, if you pull request, you should bring your test code and effects.
Related Skills
node-connect
344.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
99.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
