---
title: MoonBitをC# にTranspileする
tags: 
author: [Akito Inoue](https://image.docswell.com/user/akeit0)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/47MYXRM97W.jpg?width=480
description: MoonBitをC# にTranspileする by Akito Inoue
published: June 02, 26
canonical: https://image.docswell.com/s/akeit0/ZQ29WV-2026-06-02-165448
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/47MYXRM97W.jpg)

超dotnet new (2026/5/29)
MoonBitをC# にTranspileする
akeit0


# Page. 2

![Page Image](https://bcdn.docswell.com/page/P7R9NRV9E9.jpg)

自己紹介
名前: akeit0
読み方:あけいと
https://github.com/akeit0
https://x.com/Akeit0_
株式会社バーチャルキャスト2025年新卒（？）入社
Unity x VR をしながら、趣味もC#。
最適化、言語実装周りなどでOSS活動をしている。
公開しているものは実験的なものが多い
最近はjs engineとかブラウザとか


# Page. 3

![Page Image](https://bcdn.docswell.com/page/PJXQNRZ37X.jpg)

MoonBitとは
&gt; MoonBit はクラウドおよびエッジコンピューティング向けの
エンドツーエンドなプログラミング言語ツールチェーンであり、
wasm、wasm-gc、js、native バックエンドに対応しています。
MoonBit ドキュメント — MoonBit v0.9.3 ドキュメント より引用
見た目はrustに近い
●
●
●
型は後置
voidではなくUnit
pipeline演算子はF#のような第1引数に入れていく形式


# Page. 4

![Page Image](https://bcdn.docswell.com/page/3JK9NR8NJD.jpg)

何したの？
MoonBitからC#へのtranspilerつくったよ
公式のオープンソースのコンパイラが一年更新されていない
パーサーも安定せず、最新に追従おそい
なのでparserから実装
変換手順としては moonbitでirのjsonを作ってC#/RoslynでC#生成
実験的なので実用段階ではないがシンプルなライブラリはそのまま動く
今回の説明に用いる C#コードは自動生成
akeit0/moonbit2csharp


# Page. 5

![Page Image](https://bcdn.docswell.com/page/LE3WV82ZE5.jpg)



# Page. 6

![Page Image](https://bcdn.docswell.com/page/8EDK8MZ47G.jpg)

structを宣言しよう
structでも自動的に参照型、つまりclass
#valtypeでbackend次第で一応値型に
これはmutだからclassでsetterがある


# Page. 7

![Page Image](https://bcdn.docswell.com/page/V7PK8RDVJ8.jpg)

traitをC#で書こう(今回のメイン)
traitはinterfaceのようなもの。ただし後付可能


# Page. 8

![Page Image](https://bcdn.docswell.com/page/2JVVNR1RJQ.jpg)

traitをC#で書こう
C#で表現するとこう
generic math!!!


# Page. 9

![Page Image](https://bcdn.docswell.com/page/5EGLKM26JL.jpg)

traitを実装する
普通に実装...


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4JQYNRP27P.jpg)

型制約
●
●
traitはあとから付け足せる
ので実装を別にする
trait 制約が増えれば指定
する実装も増える


# Page. 11

![Page Image](https://bcdn.docswell.com/page/K74WG8YPE1.jpg)

traitオブジェクト
C#でも
ってするよね
moonbitだとこう


# Page. 12

![Page Image](https://bcdn.docswell.com/page/LJ1YD26XEG.jpg)

trait オブジェクトをC#で
●
●
インスタンスと実装が別
実装用インスタンスを用意


# Page. 13

![Page Image](https://bcdn.docswell.com/page/GJWGYRWK72.jpg)

trait オブジェクトをC#で
●
●
実装インスタンスはgeneric
cache
アロケーションを減らすにはこ
れが現時点ではよさそうだが検
討の余地あり


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4EZLXR5N73.jpg)

Char
●
●
●
●
●
●
Charはunicodeコードポイントなのでint32
C#で言えばRune
現代的...!
traspile後はintに
StringをiterateするとCharが返ってくる
Stringの内部はUTF-16でC#へのtranspile的にはありがたい。


# Page. 15

![Page Image](https://bcdn.docswell.com/page/Y76W4R997V.jpg)

バイナリなど
●
immutableなBytes型がある
●
実行時のリフレクションなどが ない
ので自由
●
裏ではただのbyte[]
●
ReadOnlyArray[T]なども裏ではT[]


# Page. 16

![Page Image](https://bcdn.docswell.com/page/G75MQ8ND74.jpg)

enum
●
●
enumはpayloadを持てる
なければそのままenum
●
payloadあればprivate closedなパターンの
abstractなclassとenumを生成して、
matchではtagでswitch+Unsafe.As &lt;T&gt;でcast
●
C#実装は煩雑なので省略


# Page. 17

![Page Image](https://bcdn.docswell.com/page/9J29PK8MER.jpg)

愚痴
C#にblock 式欲しいなあ
(来ないと思うけど)


# Page. 18

![Page Image](https://bcdn.docswell.com/page/DEY45N6PJM.jpg)

最後に
MoonBitはいいぞ
来月1.0がリリースされるらしい


