20
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Googleが開発途中の言語 Runeを触ってみた

Last updated at Posted at 2022-12-06

この記事は DeNA 23 新卒 Advent Calendar 2022 の7日目の記事です。

Googleが開発中の言語 Runeを簡単に触ってみました。
執筆時点(2022年12月)では、まだ日本語のドキュメントや記事が見つからなかったため、簡単な使い方と文法についてまとめます!

Runeとは

RuneはPythonにインスパイアされた静的型付け言語で、メモリ安全性、秘密の定時間処理など、多くのセキュリティ機能を備えています。
ファイル拡張子はrnで、主にCやC++のライブラリとうまく相互作用するように設計されています。
Structure-of-Array (SoA) メモリ管理により、メモリ集約的なアプリケーションにおいては、C++よりも高速であることを目指しているそうです。

GitHubリポジトリを見る限り、最初のコミットは2021年11月で、まだ開発されたばかりの言語ということがわかります。
image.png

文法

実装されていない箇所やドキュメントにない文法などもあるので簡単にまとめます。

  • 文字列
  • 数値
  • bool型
  • 動的配列
  • 静的配列(タプル)
  • 関数ポインタ

数値はデフォルトでu64として扱われるようになっています。

変数

Pythonのように変数を定義できます。

str = "Hello, World!"

int = 1234

array = ["1", "2", "3", "4"]

boolean = true

関数

関数は以下のように宣言でき、タイプヒンティングを行うこともできます。

// タイプヒンティングなし
func Add(a, b) {
  return a + b
}

// タイプヒンティングあり
func Add(a: u8, b: u8) {
  return a + b
}

クラス

クラスは命名のみPythonライクな書き方となっており、キャメルケースでの実装になっています。
クラス定義の最上部列がPythonでいう__init__メソッドになっています。

class Person(self, name) {
	self.name = name

	func helloWorld(self) {
		println "Hello, world, from ", self.name, "."
	}
}

relation DoublyLinked Human:"Mother" Human:"Mothered" cascade
relation DoublyLinked Human:"Father" Human:"Fathered" cascade

Runeでは、クラスの関係性(Relationships)をrelationで定義でき、クラス同士で紐づくデータを高速、かつ、簡単に表現できます。
以下は使用できるRelationshipsです。

ArrayList
DoublyLinked
Hashed
HeapqList
LinkedList
OneToOne

コメント

コメントは、C言語ライクな書き方をします。

// This is a single-line comment.
/*
  This is a block comment.
  Note that /* embedded comments */ do not end the comment block.
*/

演算子

!    !=   &=  :     <=  >>=   []  |=
!+   %    ()  <     <>  >>>=  ^   ||
!+=  %=    +  <<    =   @     ^=  ||=
!-   &    +=  <<<   ==  @=    /    ~
!-=  &&    ,  <<<=  >   @@    /=
!<   &&=   -- <<=   >=  @@=   |

代入演算子

!+=  !=  &&=  +=  <<<=  <=  ==  >>=   @=   ^=  ||=
!-=  %=  &=   -=  <<=   =   >=  >>>=  @@=  |=

実行方法

ここでは、Hello, World!を表示させてみたいと思います。

$ echo 'println "Hello, World!"' > hello.rn
$ rune -g hello.rn
$ ./hello
Hello, World!

rune -gコマンドでファイルを指定し、バイナリを生成すると実行できるようです。

ちなみに、コンパイルエラーはrune -gコマンド実行時にエラー元を表示してくれるようになっています。
(以下は、文字列の1と数値(u64)の1を演算できないというエラーです)

$ rune -g hello.rn
Error: Non-equal types passed to binary operator
File hello.rn, line 24: println "1" + 1
Stack trace:
Exiting due to error...

実行環境について

Runeは執筆時点だとmacOSやWindowsのサポートはしてないようなので、私はUbuntuサーバーを用意し実行環境を構築しました。

mattnさんによるとWindowsであれば、中身をいじると動くようです。

まとめ

一通り触ってみましたが、特段Python味は感じなかったです。
(私がPython歴が長くないのもあるかもしれませんが、、)

まだ開発され始めたばかりのため、色々整ってはいないなど、まだまだこれからな部分があると感じました。
Rustなどが流行り、セキュリティやメモリ安全が話題になっている中で、今後Runeが言語としてどのようなポジションになっていくのかが楽しみです!

20
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?