Discuss Scratch

mikann-260
Scratcher
11 posts

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

とりあえずプログラミングの画面と中を開かずに計算を行うプログラムを作ってみようと思います。

Last edited by mikann-260 (July 19, 2024 14:53:03)

mikann-260
Scratcher
11 posts

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

一応数字表示と入力(数字のみ)は作れました。
プロジェクトはこちらです。
追記:今バグ中でうごかないです

Last edited by mikann-260 (July 20, 2024 13:49:37)

livestudio
New Scratcher
2 posts

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

現在私がホストしているForge (1.x系)(以下 Forge)というOSプロジェクトで、
ユーザーまたはユーザーによって作成されたアプリが任意の処理を実行できるよう、開発された言語についてここに書いてみようかなと思います。
レビュー、ご感想頂けると大変うれしいです。
1. 構文
1-1. 例
本言語では、シェルスクリプトに近い構文を採用しています。以下は一例。
詳細はREADMEをご参照ください。
declare num = 10;
println %{1+2-3*4/${num}};
今後、オブジェクト指向を取り入れていく動きもありますが、現時点では言語というよりかは、batファイルのような印象を受けるはずです。
1-2. ブロック
構文での一例を見ればわかる通り、コードは通常半角スペースで区切られますが、「{}」で囲んであげることで、内部の文字列に関係なく、一つのブロックとしてみなされます。「{}」の他にも、変数ブロック「${変数名}」、演算ブロック「%{数式}」、入れ子のブロックをコンパイルしない定数ブロック「#{}」といった特殊ブロックの概念があります。
2. 技術的概要
2-1. 実行フロー
本言語は、Forgeに組み込まれたものという性質上、Forgeのコンポーネントという位置づけをされています。
それに伴い、コードの実行リクエストから実行までに次のようなフローをたどることになります。
1. 生のコードと実行名前空間のセットをForge.Runtimeのpoolに追加(Forge.Runtimeはpoolを上から順に実行)。
2. Forge.Runtimeのパーサーによってビルド(ここでは、構文解析とコンパイル)が行われる。
3. ビルド後、Forge.RuntimeよりForge.Commandに実行可能形式のコードが渡され、Forge.Commandが実際の処理を実行。
2-2. セキュリティー性能
上にも記述のある通り、コードは必ず実行名前空間とセットでビルド、実行されます。ForgeによってOSレベルで名前空間ごとに権限が管理されており、他名前空間へのアクセスなどを実行しようとした場合、ユーザーはユーザーアカウント制御のオーバーレイから許可するかどうかを選択することができます。
2-3. 演算エンジン
1-2. ブロックで紹介した演算ブロックをコンパイルするために、Forgeには高度な演算エンジンが内蔵されており、数値演算、真偽値演算まで様々な演算を行うことができます。以下は出力の一例。
println %{1 + 4 / 2} : 3
println %{5 != 2 + 3} : false
println %{Hello == World} : false
この演算エンジンについては、ほんとよく完成させたなと思います笑
おわり
Forge及び本言語は継続的に更新を行っています。これまで通り、安定性を向上させることは勿論、これからははじめに書いた通りオブジェクト指向を取り入れた言語設計に注力していきたいと考えています。
また、いつか、Forgeをリミックスしたディストリビューション、または本言語の実行環境やForgeカーネルを使用したOSが開発されればいいなと思っています。
再度になりますが、レビュー、ご感想いただけるととても喜びます。ありがとうございました m(_ _)m

Last edited by livestudio (July 22, 2024 09:47:46)

pupon
Scratcher
100+ posts

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

お久しぶりです。
新しく言語を作ろうと思うので紹介します。
名前は「$igns」です。

文法
#コメント#
#複数行も
可能#

#print(自動で改行)
$"Hello, World"

#変数は最初に代入した時に作成される
動的型付け
右結合#
a=b=1
let c="定数"

#型#
1 #整数#
0.1 #小数#
"foo" #文字列#
true #真偽値#
[1, 2, 3] #配列#
{a, b : a+b} #ラムダ式#

#if#
?a==1{
}else?a==2{
}else{
}

#while#
while a > 5 {
}

#for#
for i <- 1..10 {
}

#配列#
arr=[1, 2, 3]
arr@0 = 100
$arr #[100, 2, 3]#

#特殊な演算子#
true ? "true" : "false"
1..10 #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]#

Last edited by pupon (Oct. 16, 2024 02:21:28)

Qudamono
New Scratcher
16 posts

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

cooky言語という、高速を目指した言語を開発中です。
ほかにも、@puponさんとか、@nekogakure さんも浮上してくるのではと思います。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1081049916/
Qudamono
New Scratcher
16 posts

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

高速化にあたって、伝授したいことがあります。
それは、endに対応する節をリストで保存することです。
1.if(3=8)|(7<7)
2.・・print('あ')
3.end
とした場合、
ifの中はワープする形で、実行すると早くなるはずです。
ですから、1のところで、trueだったらそのまま流す、falseだったら、endまでワープという感じです。
みんなに書いてほしいから、rubyをもとにしようと思ってます。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1081049916/
Qudamono
New Scratcher
16 posts

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

リストを用いたアルゴリズム押しです。
リストを使えば、普通の2乗だけ効率化できます。
Qudamono
New Scratcher
16 posts

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

入子型についてですが、if文やwhile文はただendにループするだけでいいですが、n回繰り返すなどの場合は、中身を展開する形がいいと思います。
n~mまでを展開する定義を作るなど
tabakenn
Scratcher
100+ posts

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

あらかじめ構文解析を行って中間形式に変換し、実行するときは構文解析を行わないと速くなると思います。
一度しか実行しない行は意味ないですが、whileでループするときなどに毎回解析しなくて済みます。

ちなみに、構文解析→中間形式 の変換プログラムを、Scratchではなくcookyで書くと面白いかもです。
(ブートストラップ問題(最初の変換は誰がするのか問題)が発生するので、Scratchのプログラムを捨ててはダメです。(または手動
pupon
Scratcher
100+ posts

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

$igns v0.1を共有しました。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1080100013/
まだ型は文字列型しか存在せず、printしかできない上演算子もありません。
azinomoto-20
Scratcher
85 posts

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

こんなのを作ってます
まだ計算はできません
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1081026876/
kktoo
Scratcher
7 posts

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

ちょっと新しい「⌘CommandC」という言語を共有しました。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1080997908/
コマンドを直接キーボードで入力して、プログラムを入力します。
「runc」で実行できます。すみません。まだテスト実行してません。
pupon
Scratcher
100+ posts

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

$ignsの関数呼び出し
$ignsをアップデートし、変数、定数、if文などを実装しました。
関数呼び出しですが、
関数 ~ 引数1 ~ 引数2
のような形にすることにしました。
カリー化みたいな感じです。

引数がない関数は
'関数
で呼び出します

Last edited by pupon (Oct. 20, 2024 04:18:04)

Qudamono
New Scratcher
16 posts

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

print((7=8)?(7+8)7+9)
と書けるようになりました。
まだ共有はしてません
Qudamono
New Scratcher
16 posts

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

最初に構文解析するようにし高速化しました(^▽^)/!
else文を、
{ 条件文 } {trueの時の実行} {falseの時の実行}
((10=7)|(7=7))? print(true) : print(false) :
と書いてください。
((10=7)|(7=7))?print(true):print(false): と書きます
url https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1083801290/
Qudamono
New Scratcher
16 posts

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

else文を省略化できる(参考演算子的)にできるということです。
普通に、
if(7=8)
実行1
else
実行2
end
とも書けます
(^▽^)/
いまループ文や変数を作ってます
HARINEZUMINOKETU
Scratcher
73 posts

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

リスプっていう言語があるらしい
()しか使わないとか
(多分ほんと)
abee
Scratcher
1000+ posts

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

LISPはFORTRANやCOBOLと並んで最も古いプログラミング言語のひとつです。
カッコしか使わないのではなく、カッコで定義されたリストというデータ構造を使います。
Scratchで作られたLISPのインタプリタがあるので試してみると雰囲気が分かると思います。
aiueo-san
Scratcher
9 posts

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

#897から発想を得て、(と)と,と"と0~9の数字だけで成り立つ言語を作成しようかな…と考え中です。作成中です。
brainf**kみたいになりそうですね

Last edited by aiueo-san (Oct. 20, 2024 08:07:15)

pupon
Scratcher
100+ posts

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

$igns v0.4
v0.3で配列、範囲演算子、for文、
v0.4でラムダ式が追加されました。

クロージャ、再帰などにも対応してます。

構文
#引数なし#
{^内容}

#引数1つ#
{引数名 : 内容}

引数が2つ以上のラムダ式も対応させたいです

Last edited by pupon (Oct. 20, 2024 10:05:28)

Powered by DjangoBB