Discuss Scratch

pupon
Scratcher
100+ posts

プログラミング言語を作ろう(合作ではないです)

$igns v0.7
v0.5で複数引数のラムダ式
v0.6でクラス、連結リスト
v0.7で継承、計算型プロパティ(Swift参考)
が追加されました。

構文
class クラス名: 親クラス {
メンバ定義、コンストラクタ
get 計算型プリパティ = {^ 内容}
}

a = [^ 1, 2, 3]
a.append~4 #4を追加
a.remove~2 #2番目を削除
a.insert~1~100 #1番目に100を挿入

Last edited by pupon (Nov. 7, 2024 10:13:42)

akku--n11
Scratcher
1000+ posts

プログラミング言語を作ろう(合作ではないです)

お久しぶりです
最近Panzoid風のFPSIイントロみたいなアニメーション用のエンジン作りたいなーとか
ScratchにWASM移植したいなーとか思いつつ何も出來てない人です
WASMをもうちょっと勉強してから実装してみたいと思います
pupon
Scratcher
100+ posts

プログラミング言語を作ろう(合作ではないです)

新たな言語Fsm+
お久しぶりです。
新たにFsm+という言語を作っています。名前の由来はFunctionのFとCsm(自作言語)のsmです。
純粋関数型言語です。そして一番の特徴が「(トランス)コンパイル言語であること」です。
自作のアセンブリ言語?に変換して実行します。(ちなみにそのアセンブリ言語はスタックベース)

<構文>
コメントは//です。複数文はないです。


静的型付けです。型推論はそれなりに(?)できます。
3 //Int
1.2 //Float
true //Bool
"Hello" //String
\x -> "hello"+x //String -> String
\x -> x*x //<a': Num> a' -> a'
\x -> x //a' -> a'
[1, 2, 3] //[Int] == Array<Int>
(3, "foo") //(Int, String)

演算子など
(四則演算、論理演算、比較演算などは略)
join "Hello" "World" //関数適用 並べるだけ

print $ 1+2 //Haskellの$と同じ
[1, 2] |> map (\x -> x*2) //パイプライン演算子
f << g //関数合成 \x -> f $ g x
f >> g // g << f と同じ

["a", "b"]@0 //配列の要素取得

関数
関数は引数が複数あるものはカリー化されます。(糖衣構文)
\a b -> a+b
↕︎
\a -> \b -> a+b

let式
let a: Int = 5 in
let b = 3 in
a+b
それだけ。

入出力
do {
print "Hello"
x <- input
print x
}

print "Hello" >>= (\_ ->
input >>= (\x ->
print x
)
)

Last edited by pupon (July 2, 2025 09:28:18)

pupon
Scratcher
100+ posts

プログラミング言語を作ろう(合作ではないです)

Fsm+の型定義

構造体
struct 型名 = {フィールド名: 型, …}

struct Point = {x: Int, y: Int}
struct Line = {start: Point, end: Point}
@main {
    let a = Point 1 2 //この書き方は部分適用も可能
    let b = Point {x: 5, y: 8}
    let c = a |> set y 4
 
    print (a |> get x) //1
    print c //Point {x: 1, y: 4}
    let d = Line {start: Point {x: 1, y: 3}, end: Point {x: 5, y: 1}}
    print (d |> get start.x) //1
    let e = d |> set end.x 10
    print e //Line {start: Point {x: 1, y: 3}, end: Point {x: 10, y: 1}}
}

列挙型
enum 型名 = 名前 | 名前 | …
特に説明することない気がする

代数的データ型
data 型名 = 値コンストラクタ 型 型 … | …

data Maybe<T> = just T | nothing
data List<T> = cons T List<T> | nil
@main {
    let a = Maybe.just 3
    let b = match a {
        .just x => x;
        .nothing => 0
    }
    print b //3
    let c: List<Int> = .cons 1 (.cons 2 3)
    match a {
        cons x _ => print x;
        nil => print "nil"
    }
    //1
}

Last edited by pupon (March 18, 2025 12:08:11)

pupon
Scratcher
100+ posts

プログラミング言語を作ろう(合作ではないです)

Fsm+が静的型付けなので、Hindley–Milner(Algorithm J)の型推論を作りました。
(結構大変でした)
https://scratch.mit.edu/projects/1133240451/

Last edited by pupon (March 24, 2025 04:39:36)

hikari2014
Scratcher
1 post

プログラミング言語を作ろう(合作ではないです)

ここ1年間(2年かも)言語もどきしか作っていない人です、ちょくちょく参加します!最新型:https://scratch.mit.edu/projects/1229618777/ AVPLCX(Advanced Programm langauge(もどき) Code:Xclauc)です

Last edited by hikari2014 (Oct. 17, 2025 05:45:03)

Powered by DjangoBB