IDScript adalah bahasa pemrograman berbahasa Indonesia penerus Indonesian Script (IS), dengan interpreter dan compiler VM resmi.
Reason this release was yanked:
Because Has MisInformation
Project description
IDScript
Bahasa pemrograman berbahasa Indonesia dengan interpreter, compiler VM, dan bytecode resmi.
IDScript / IDS = I[n]D[onesian] Script atau ringkasnya I[n]D[o] Script.
Mulai Cepat • CLI • Format File • Sintaks • VM • Lisensi
Tentang
| Info | Nilai |
|---|---|
| Pembuat | Elang MRJ |
| GitHub | Elang-elang |
elangmuhamad888@gmail.com |
|
| Repository | https://github.com/Elang-elang/IDScript |
| Pendahulu | Indonesian Script / IS |
| Status | Prototype / pre-alpha |
| Python | >=3.13 |
Latar Belakang Singkat
IDScript lahir sebagai kelanjutan dari Indonesian Script atau IS, sebuah proyek bahasa pemrograman berbahasa Indonesia yang sebelumnya dibuat sebagai prototype dan kemudian terbengkalai. IS membuktikan bahwa sintaks pemrograman dapat dibuat lebih dekat dengan istilah Indonesia, tetapi proyek tersebut belum memiliki struktur compiler, runtime, dan format bytecode yang cukup rapi untuk dilanjutkan sebagai bahasa yang lebih stabil.
IDScript meneruskan gagasan itu dengan fondasi baru: grammar Lark, AST, interpreter normal, compiler VM resmi, format module .idsm, format compiled bytecode .idsc, builtin runtime, dan CLI publik bernama idscript.
Mulai Cepat
Instalasi Lokal
python -m pip install -e .
Dengan dependency pengembangan:
python -m pip install -e .[dev]
Program Pertama
fungsi utama(): Angka {
println("Halo dari IDScript");
kembalikan 0;
}
Jalankan:
idscript main.ids
CLI idscript
Format utama:
idscript <file> {-m|--module,-c|--bytecode,--both} <outputFile>
Mode Interpreter
Tanpa flag compile, idscript menjalankan interpreter normal dan tidak membuat .idsm atau .idsc.
idscript program.ids
Entrypoint default adalah utama. Entrypoint lain dapat dipilih dengan --main.
idscript program.ids --main jalankan
Mode Module `.idsm`
idscript program.ids -m build/program
idscript program.ids --module build/program.idsm
Jika outputFile tidak punya suffix, CLI otomatis memakai .idsm.
Mode Bytecode `.idsc`
idscript program.ids -c build/program
idscript program.ids --bytecode build/program.idsc
Mode ini menulis .idsc saja dan tidak membuat .idsm sebagai side effect.
Mode Both
idscript program.ids --both build/program
Output:
build/program.idsm
build/program.idsc
Menjalankan Bytecode
File .idsm, .idsc, dan .idbc dapat diberikan langsung ke CLI.
idscript build/program.idsc
Format File
| Format | Fungsi |
|---|---|
.ids |
Source IDScript yang ditulis manusia. |
.idsm |
IDScript Module, format module VM yang masih deskriptif/readable. |
.idsc |
IDScript Compiled, bytecode final yang opcode-nya dikodekan. |
.idbc |
Bytecode legacy dari VMCompiler lama, hanya kompatibilitas baca. |
Alur Compile
program.ids -> program.idsm -> program.idsc -> VM
Contoh:
idscript app.ids --module app.idsm
idscript app.ids --bytecode app.idsc
idscript app.idsc
Aturan Import
| Bentuk Import | Resolusi Path |
|---|---|
dari "./mod.ids" impor ... |
Relatif ke file pemanggil. |
dari "../mod.ids" impor ... |
Relatif ke file pemanggil. |
dari "iterasi.ids" impor ... |
Folder builtin IDScript/builtins. |
dari "atribut.ids" impor ... |
Folder builtin IDScript/builtins. |
dari "./math.ids" impor { var tambah, konstan VERSI };
dari "./math.ids" impor { var tambah sebagai plus };
dari "iterasi.ids" impor { var panjang, var Daftar };
Panduan Sintaks
Bagian ini dibuat sebagai referensi cepat. Buka bagian yang dibutuhkan saja.
Tipe Bawaan
| Tipe IDScript | Makna Runtime |
|---|---|
Teks |
String |
Angka |
Integer |
Float |
Float |
Boolean |
Boolean |
Kosong |
kosong / None |
Apapun |
Nilai bebas |
OBJEK |
Alias object Python untuk kebutuhan builtin |
var nama: Teks = "Budi";
var umur: Angka = 20;
var rasio: Float = 1.5;
var aktif: Boolean = benar;
var nihil: Kosong = kosong;
var bebas: Apapun = [1, "dua", benar];
Komentar
// komentar satu baris
/*
komentar banyak baris
*/
Konstanta `KONSTANTA`
KONSTANTA NILAI: Angka = 10;
publik KONSTANTA VERSI: Teks = "0.1.0";
privat KONSTANTA RAHASIA: Teks = "internal";
Catatan:
KONSTANTAhanya ada di top-level.publikberarti dapat diekspor dari module.- Default visibility adalah privat.
Variabel `var` dan Final `final`
var nilai: Angka = 1;
nilai = nilai + 1;
final total: Angka = 100;
Optional type:
var mungkin: ?Angka = kosong;
Return, Throw, Break, Continue
fungsi ambil(): Angka {
kembalikan 7;
}
fungsi gagal(): Teks {
kesalahan "terjadi kesalahan";
}
fungsi hitung(): Angka {
var total: Angka = 0;
untuk (var angka dari dalam [1, 2, 3, 4]) {
jika (angka == 2) { lanjutkan; }
jika (angka == 4) { berhentikan; }
total = total + angka;
}
kembalikan total;
}
Fungsi
fungsi tambah(a: Angka, b: Angka): Angka {
kembalikan a + b;
}
fungsi kali(final a: Angka, final b: Angka): Angka {
kembalikan a * b;
}
publik fungsi utama(): Angka {
kembalikan tambah(2, 3);
}
Catatan:
- Entrypoint default adalah
fungsi utama(). - Interpreter normal memperketat
utamaagar tidak menerima argumen dan mengembalikanAngkaatau?Angka.
If / Elif / Else
fungsi status(nilai: Angka): Teks {
jika (nilai > 80) {
kembalikan "baik";
} namun jika (nilai > 60) {
kembalikan "cukup";
} jika tidak {
kembalikan "kurang";
}
}
Negasi memakai bukan.
fungsi cek(flag: Boolean): Angka {
jika (bukan flag) {
kembalikan 0;
}
kembalikan 1;
}
Di VM, jika (bukan x) dikompilasi ke TO_BOOL lalu POP_JUMP_IF_TRUE.
Loop `selama` dan `untuk`
fungsi sampai_lima(): Angka {
var angka: Angka = 0;
selama (angka < 5) {
angka = angka + 1;
}
kembalikan angka;
}
fungsi jumlah(): Angka {
var total: Angka = 0;
untuk (var angka dari dalam [1, 2, 3]) {
total = total + angka;
}
kembalikan total;
}
Destructuring target:
fungsi jumlah_pasangan(): Angka {
var total: Angka = 0;
untuk (var (a, b) dari dalam [[1, 2], [3, 4]]) {
total = total + a + b;
}
kembalikan total;
}
Try / Catch / Else / Finally
fungsi aman(): Angka {
var nilai: Angka = 0;
coba {
kesalahan 5;
} tangkap (e) {
nilai = 5;
} jika tidak {
nilai = 99;
} diakhiri {
nilai = nilai + 1;
}
kembalikan nilai;
}
Semantik mengikuti model Python:
- Blok
cobadijalankan lebih dulu. - Blok
tangkapberjalan jika ada error. - Blok
jika tidakberjalan hanya jika tidak ada error. - Blok
diakhiriselalu berjalan, termasuk sebelumkembalikankeluar dari blokcoba.
Catatan VM:
- VM resmi sudah mendukung
coba/tangkap/jika tidak/diakhirimelalui opcodeSETUP_TRY. - Handler pertama menangani error yang dilempar oleh
kesalahanatau exception runtime.
Switch / Match `pilah`
fungsi pilih(x: Angka): Teks {
pilah (x) {
kasus 1:
kembalikan "satu";
kasus 2:
kembalikan "dua";
kasus bawaan:
kembalikan "lain";
}
}
Pattern sequence:
fungsi total_data(): Angka {
var total: Angka = 0;
pilah ([1, 2, 3]) {
kasus [kepala, ...ekor]:
total = kepala + ekor[0] + ekor[1];
}
kembalikan total;
}
Type Alias `tipe`
tipe ID = Angka
tipe Nama = Teks
fungsi ambil_id(): ID {
kembalikan 7;
}
Dynamic alias:
tipe Kotak[T] = daftar[T]
var angka: Kotak[Angka] = [1, 2, 3];
Antarmuka `antarmuka`
antarmuka User {
nama: Teks,
umur: Angka,
}
fungsi ambil_umur(user: User): Angka {
kembalikan user["umur"];
}
Struktur, Turunan, Implementasi, dan Sifat
Struktur:
struktur Orang {
publik nama: Teks,
privat umur: Angka,
}
Turunan:
struktur Makhluk {
publik nama: Teks,
}
struktur Orang {
publik umur: Angka,
} turunan dari Makhluk
Implementasi metode:
implementasi Orang {
publik metode sapa(ini: Orang): Teks {
kembalikan "Halo " + ini.nama;
}
}
Sifat / trait:
sifat BisaSapa {
metode sapa(ini: Orang): Teks;
}
implementasi BisaSapa untuk Orang {
publik metode sapa(ini: Orang): Teks {
kembalikan ini.nama;
}
}
Aturan penting:
- Field default privat.
- Duplicate field saat turunan menghasilkan error.
- Duplicate method saat turunan menghasilkan error.
- Tidak ada override implicit.
- Trait memvalidasi nama argumen, tipe argumen, dan return type.
Enum
Unit variant:
enum Gender {
publik Pria,
publik Wanita,
}
Tuple variant:
enum Data {
publik Nomor(Angka),
publik Pasangan(Teks, Angka),
}
Struct variant:
enum Event {
publik Login { nama: Teks, umur: Angka },
}
Discriminant variant:
enum Kode {
publik Oke = 200,
publik Gagal = 500,
}
Metode enum:
implementasi Kode {
publik metode nilai(ini: Apapun): Angka {
kembalikan ini.value;
}
}
Expression
Literal:
var teks: Teks = "halo";
var angka: Angka = 10;
var pecahan: Float = 3.14;
var flag: Boolean = benar;
var kosong_nilai: Kosong = kosong;
List dan kamus:
var angka: daftar[Angka] = [1, 2, 3];
var user: kamus[Teks, Apapun] = {"nama": "Budi", "umur": 20};
Call, attribute, dan index:
println("Halo");
var nama: Teks = user.nama;
var pertama: Angka = [1, 2, 3][0];
Operator:
var hasil: Angka = 1 + 2 * 3;
var pangkat: Angka = 2 ** 3;
Boolean dan comparison:
jika (benar dan bukan salah) {
println("oke");
}
jika (2 didalam [1, 2, 3]) {
println("ada");
}
identifikasi dan info:
var angka: Angka = 7;
var salin: Angka = identifikasi angka;
jika (info angka == "Angka") {
println("ini angka");
}
Kategori info mencakup Angka, Float, Boolean, Teks, Kosong, Daftar, Kamus, Struktur, Enum, VarianEnum, Tipe, Antarmuka, Fungsi, dan Objek.
Type Annotation Lanjutan
var mungkin: ?Angka = kosong;
var angka: daftar[Angka] = [1, 2, 3];
var data: kamus[Teks, Angka] = {"a": 1};
var operasi: fungsi[[Angka, Angka], Angka];
var hasil_operasi: hasil[Angka, Teks];
var nilai: [Angka, Teks] = 1;
var mode: ["dev", "prod"] = "dev";
Contoh Program Lengkap
Buka contoh
tipe Nama = Teks
struktur Orang {
publik nama: Nama,
publik umur: Angka,
}
sifat BisaSapa {
metode sapa(ini: Orang): Teks;
}
implementasi BisaSapa untuk Orang {
publik metode sapa(ini: Orang): Teks {
kembalikan "Halo " + ini.nama;
}
}
fungsi utama(): Angka {
final budi: Orang = Orang { nama: "Budi", umur: 20 };
println(budi.sapa());
jika (info budi == "Struktur") {
println("Budi adalah struktur Orang");
}
kembalikan budi.umur;
}
Compiler VM
Opcode bergaya Python
VM resmi memakai opcode eksplisit agar mudah dibaca dan didebug.
| Lama | Baru |
|---|---|
CONST |
LOAD_CONST |
LOAD |
LOAD_NAME |
STORE |
STORE_NAME |
STORE_LOCAL |
STORE_FAST |
POP |
POP_TOP |
BINARY |
BINARY_OP |
COMPARE |
COMPARE_OP |
JUMP |
JUMP_ABSOLUTE |
JUMP_IF_FALSE |
POP_JUMP_IF_FALSE |
CALL |
CALL_FUNCTION |
RETURN |
RETURN_VALUE |
Opcode lama tetap didukung sebagai alias untuk kompatibilitas.
Contoh bytecode konseptual if/else
LOAD_NAME pi
TO_BOOL
POP_JUMP_IF_FALSE L_else
LOAD_NAME pi
STORE_NAME Pi
JUMP_ABSOLUTE L_end
L_else:
LOAD_CONST 0
STORE_NAME Pi
L_end:
LOAD_CONST None
RETURN_VALUE
Catatan: label seperti L_else hanya simbol disassembler/compiler. Runtime tetap memakai offset angka.
Struktur Project
| Path | Fungsi |
|---|---|
src/IDScript/__main__.py |
CLI publik idscript. |
src/IDScript/gramm.lark |
Grammar utama IDScript. |
src/IDScript/compile/entrypoint.py |
Entrypoint interpreter normal. |
src/IDScript/compile/ids_ast |
Definisi AST. |
src/IDScript/compile/parser |
Transformer parse tree ke AST. |
src/IDScript/compile/runtime |
Interpreter normal dan runtime model. |
src/IDScript/compile/Compiler |
Compiler VM resmi, bytecode, dan VM runtime. |
src/IDScript/builtins |
Builtin yang ditulis dalam IDScript. |
Verifikasi
Jalankan dari folder src/IDScript/compile:
python -m pytest testing/test_cli.py Compiler/testing/test_compiler.py -q
python -m pytest testing/test_compile.py testing/test_struct_runtime.py -q -k 'not test_compile_example_file'
Catatan:
- Test VM dan CLI berjalan dengan command di atas.
- Test normal runtime penuh masih membutuhkan
Example/main.idspada root project. - Folder
Example/sebaiknya diisi kembali sebelum rilis publik final.
Lisensi
IDScript menggunakan MIT License.
Ringkasan Lisensi
- Kamu boleh memakai, menyalin, memodifikasi, menggabungkan, mempublish, mendistribusikan, sublicense, dan menjual IDScript.
- Kamu boleh memakai IDScript untuk proyek pribadi, pendidikan, riset, maupun komersial.
- Copyright notice dan permission notice MIT harus tetap disertakan pada salinan atau bagian substantial dari software.
- IDScript diberikan apa adanya, tanpa garansi apa pun.
- Pembuat dan pemegang hak cipta tidak bertanggung jawab atas klaim, kerusakan, atau masalah lain dari penggunaan IDScript.
Lihat file LICENSE.md untuk teks lengkap.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file idscript-0.1.3.tar.gz.
File metadata
- Download URL: idscript-0.1.3.tar.gz
- Upload date:
- Size: 117.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75d85adb574d8d8298dda9537ebf1d38c24963d0757cbca0b5f209f1363f28bf
|
|
| MD5 |
17f23ca62a0c4a9c1880038f818f8039
|
|
| BLAKE2b-256 |
b345d0dfba244f8804e1c6b7efe4d326679ea9e63870c91005374c73c44a3dd9
|
File details
Details for the file idscript-0.1.3-py3-none-any.whl.
File metadata
- Download URL: idscript-0.1.3-py3-none-any.whl
- Upload date:
- Size: 124.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c019374a93e02ca688943b083fb43e854a31803fe57b4196c508310098d0b61
|
|
| MD5 |
c3edaea457f2858b293cabae7a02813c
|
|
| BLAKE2b-256 |
0a58db2242eae0676ca596fb920b76f50520cb133e673af1587501b514f7fed6
|