あいさつ
こんにちは、開発者になりたいkarumaruです
今日からプログラミング言語を作ってみようと思います
なんでかって?それは聞いちゃいけないよ()
1.名前
なんかよさげな名前ないかなーと風呂に入っていたら、ビビビーっと湧いてきたのが
Hyper-Nova
意味を調べてみたところ
極超新星
という意味だそうで、ちょうどいいので採用することにしました
2.if文
プログラミングと言ったらif文(?)なのでif文から定義することにしました
// if文
if 条件式:
処理
// if-else文
if 条件式:
条件がtrueの時の処理
else:
条件がfalseの時の処理
// if-elif-else文
if 条件式1:
条件1がtrueの時の処理
elif 条件式2:
条件1がfalseで条件2がtrueの時の処理
else:
どちらの条件もfalseの時の処理
中括弧だと人によって可読性がすんごくわるいコードを書く人がいるのでインデントを採用しようと思います、ちなみに私はTab派です
3.ループ
// 回数指定forループ(カウンター変数iが自動提供)
for 5:
print(i) // 一旦ここではprintで出力
// リストでforループ
image_files = ["a.jpg", "b.jpg", "c.jpg"]
for image_files:
print(i)
// whileループ
count = 0
while count < 5:
print("現在のカウントは " + count)
count = count + 1
forループは簡単に書きたいので変数名や数字で繰り返せるように、リストの変数 or int型変数じゃなかったら弾く(実装できるかな...)
4.変数定義
一番大事なの忘れてました、ループのところにも出てきていましたが、簡単に定義できるようにします
// 型推論を使用(推奨)
age = 18
// 明示的型指定(非推奨だが可能)
int8: son = 18
// 定数宣言
const PI = 3.14159265
5.コメント
散々コメントを書いてましたが一応
// このスラッシュ二回で一行コメント
"""
ダブルクオーテーションで複数行コメント
"""
'''
シングルクオーテーションでも可
'''
6.関数定義
関数定義大事なのに忘れてた...
fn test:
if score == 10:
print("Nice!")
elif score > 1:
print("OK")
else:
print("...")
7.オブジェクト指向
っぱオブジェクト指向っしょ
// クラス(親)
class animal:
fn eat:
print("もぐもぐ")
fn animalsound:
print("わんわん")
// 親クラスの中で子クラス(継承)を作成
class human:
fn hello:
print("こんにちは")
// 子クラス(継承)を作成
class cat(animal):
fn animalsound:
print("にゃんにゃん")
fn gorogoro:
print("ゴロゴロ")
// 呼び出し
animal.animalsound() // 出力:わんわん
cat.animalsound() // 出力:にゃんにゃん
human.hello() // 出力:こんにちは
8.データ型
// int型 intbは任意精度、intは自動でint32
int8, int16, int32, int64, intb, int
// uint型 (符号なし整数)
uint8, uint16, uint32, uint64
// float型 floatは自動でfloat32
float8, float32, float64, float128, float
// その他の基本型
Decimal, string, char, boolean
// コレクション型
list, map, enum
// bit指定
// 例
8bit16: register_value = 0xFF // 8ビット16進数
// 進数は2, 4, 6, 8, 10, 12, 14, 16進数を指定可
// 大きさbit進数で書く
9.演算子
// 算術演算子
+ // 加算 - // 減算
* // 乗算 / // 除算
% // 剰余 ^ // 累乗
++ // インクリメント
-- // デクリメント
// 比較演算子
== // 等号 <> // 不等号
> // より大きい < // より小さい
>= // 以上 <= // 以下
=== // 型が同じ
// 論理演算子
&& // and || // or
! // not !& // nand
^^ // xor
// 代入演算子
= // 代入 += // 加算して代入
-= // 減算して代入 *= // 乗算して代入
/= // 除算して代入
// あとで出てくるメモリ関連
~ // 借用 ^ // 参照
@ // アドレス指定
10.メモリ
GCを採用しますがなぜかメモリ指定しないと動かない時があった(C++)ので一応メモリを書けるように
// 借用(又貸し可能)(pointは大元)
point ~ name @2000
// 参照(読み取り専用)
x ^ @2000 // 直接アドレス指定
x ^ @name // 変数経由
// 所有者解放
drop name // 全参照が無効化
// 範囲指定借用
int64: big_number = 9223372036854775807
point ~ big_number @2000.2007 // 8byte借用
今日はおしまい
ここまで見てくださりありがとうございました
今日は疲れたのでここまでにしたいと思います、
今見直していて気が付いたんですけど、ほぼPythonじゃないかと思っています、まあコレほか言語のいいとこどりができたらなーという風に思ってたので...
僕はJSやPythonをたくさん書いてるからこうなってしまったのかな、次はインラインアセンブリとか、並列処理とか、正規表現(ちょー簡単に書けたらいいなー)とか、いろいろ書きたいと思います、あと引数と戻り値書き忘れてるので次に
この記事は有益な記事じゃないけどコンパイラ実装の時とかは有益なものを見せられるといいな...
たぶん2週間以内にPart 2を配信するのでお楽しみに