この記事はプログラミング言語GulfOfMexico(以下「メキシコ湾」)のREADMEの日本語訳です。この訳の使用許諾は以下の通りです。
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without any warranty.
以下試訳本文:
新着: ゆめみるとりさん (DreamBerd) はメキシコ湾に改名されました
メキシコ湾
メキシコ湾 (Gulf of Mexico) は完璧なプログラミング言語です。機能があります!
全機能に目を通し終わったら、コード例をご確認ください。
びっくりマーク!
自信もっていこう!全ての文をびっくりマークで終わらせよう!
print("こんにちは世界")!
さらに自信満々な気分なら、もっともっと使えます!!
print("こんにちは世界")!!!
不確かなら、それもよし。代わりに行末にはてなマークを置いておけます。その行についてのデバッグ情報をコンソールへ印字してあげます。
print("こんにちは世界")?
メキシコ湾では「否定」の演算子に何を使うのか不思議に思われているかもしれません。ほとんどの他の言語では否定にびっくりマークを使いますから。単純です――「否定」の演算子は代わりにセミコロンとなります。
if (;false) {
print("こんにちは世界")!
}
宣言
宣言には4種類あります。定数定数はどんなやり方でも変えられません。
const const name = "ルーク"!
定数変数は編集できますが、再代入はできません。
const var name = "ルーク"!
name.pop()!
name.pop()!
変数定数は再代入できますが、編集できません。
var const name = "ルーク"!
name = "ル"!
変数変数は再代入も編集もできます。
var var name = "ルーク"!
name = "ル"!
name.push("ー")!
name.push("ク")!
不変のデータ
2023年の新着情報!
可変のデータはアンチパターンです。const const constキーワードを使って定数定数定数を作ってください。値は定数で不変になり、 決して変わりません。 このキーワードにはご注意を。というのも、とても強力だからで、全ユーザーへ大域的に永久に影響するからです。
const const const pi = 3.14!
命名
変数と定数は両方ともあらゆるユニコード文字または文字列で命名できます。
const const letter = 'A'!
var const 👍 = True!
var var 1️⃣ = 1!
これには数値や、その他の言語の構成要素も含まれます。
const const 5 = 4!
print(2 + 2 === 5)! //true
配列
配列を0で始める言語があり、初心者にとって非直感的なことがあります。配列を1で始める言語もあり、コードの実際の動きかたを表していません。メキシコ湾は両方の世界のいいとこ取りをします。配列は-1で始まります。
const const scores = [3, 2, 5]!
print(scores[-1])! //3
print(scores[0])! //2
print(scores[1])! //5
2022年の新着情報!
添字に浮動小数を使えるようになりました!
const var scores = [3, 2, 5]!
scores[0.5] = 4!
print(scores)! //[3, 2, 4, 5]
いつするか
「変」数に応じて「変」える必要がある場合は、whenキーワードにより変数が変更される度に確認できます。
const var health = 10!
when (health = 0) {
print("あんたの負け")!
}
ライフタイム
メキシコ湾には組み込みのガベージコレクションがあり、使われていない変数が自動で掃除されます。しかしながら、さらに用心したければ、変数にライフタイムを指定できます。いろいろな単位でね。
const const name<2> = "ルーク"! //2行ぶんもつ
const const name<20s> = "ルーク"! //20秒もつ
既定では、変数はプログラムの終わりまでもちます。でももっと長いライフタイムを指定することでプログラムの実行にわたってもちこたえられます。
const const name<Infinity> = "ルーク"! //永遠にもつ
変数の巻き上げはこの巧みなトリックで達成できます。負のライフタイムを指定して、変数をその作成の前に存在させ、作成の後に消滅させるのです。
print(name)! //ルーク
const const name<-1> = "ルーク"!
繰り返し
繰り返しは黴臭いプログラミング言語の複雑な遺物です。メキシコ湾では、繰り返しはありません。
インストール
メキシコ湾をコマンドラインにインストールするには、まずメキシコ湾インストーラをインストールします。
メキシコ湾インストーラをインストールするには、メキシコ湾インストーラインストーラをインストールします。
2022年の新着情報!
複雑なインストール手順だったので、全てをインストールする「メキシコ湾アプリ作成」アプリをインストールしてくれるようになりました!
真偽値
真偽値はtrue、false、またはmaybeにできます。
const var keys = {}!
addEventListener("keydown", (e) => keys[e.key] = true)!
addEventListener("keyup", (e) => keys[e.key] = false)!
function isKeyDown(key) => {
if (keys[key] = undefined) {
return maybe!
}
return keys[key]!
}
技術的な情報: 真偽値は1と半分のビットとして格納されます。
計算
メキシコ湾は空白が大事です。 空白を使って計算操作の順序を指定します。
print(1 + 2*3)! //7
print(1+2 * 3)! //9
メキシコ湾はなんと分数に対応しています!
const const half = 1/2!
数の名前も使えます。
print(one + two)! //3
字下げ
字下げということになれば、メキシコ湾はみんなが楽しめるよう中庸をとっています。全ての字下げは3つ分の空白でなければなりません。
function main() => {
print("メキシコ湾こそが未来")!
}
マイナス3つ分の空白も許容されます。
function main() => {
print("メキシコ湾こそが未来")!
}
等価性
JavaScriptでは違うレベルの比較ができます。==はゆるい比較のためで、===はもっと精密な判定のためです。メキシコ湾ではこれを一味違ったレベルにしています。
==を使ってゆるい判定ができます。
3.14 == "3.14"! //真
===を使ってもっと精密な判定ができます。
3.14 === "3.14"! //偽
====を使ってさらにもっと精密にできます!
const const pi = 3.14!
print(pi ==== pi)! //真
print(3.14 ==== 3.14)! //真
print(3.14 ==== pi)! //偽
ずっと精密さが劣ったようにしたければ、=を使えます。
3 = 3.14! //真
関数
関数を宣言するには、(順番通りであるかぎり)単語のfunctionからどれだけの文字を使ってもできます。
function add(a, b) => a + b!
func multiply(a, b) => a * b!
fun subtract(a, b) => a - b!
fn divide(a, b) => a / b!
functi power(a, b) => a ^ b!
f inverse(a) => 1/a!
ゼロで割る
ゼロで割るとundefinedが返ります。
print(3 / 0)! //undefined
文字列
文字列は単一の引用符または二重の引用符で宣言できます。
const const name = 'ル'!
const const name = "ルーク"!
三重の引用符で宣言することもできます。
const const name = '''ル'''!
const const name = "'ル'"!
実は、いくらでも好きな数の引用符を使えます。
const const name = """"ルーク""""!
ゼロでもね。
const const name = ルーク!
文字列への内挿
文字列に内挿するときはご自身の地域の通貨を使うことを覚えておいてください。
const const name = "世界"!
print("こんにちは${name}!")!
print("こんにちは£{name}!")!
print("こんにちは¥{name}!")!
それから現地のタイポグラフィーの決まりに必ず従うこと。
print("こんにちは{name}€!")!
カーボベルデ・エスクードのためのシンボルは小数部を分ける位置に置かれ、2$50のようになります。 カーボベルデ共和国の出身の開発者はこの構文の恩恵にあずかれます。
const const player = { name: "ル" }!
print("こんにちは、{player$name}!")!
型
型註釈は省略できます。
const var age: Int = 28!
ちなみに、文字列はただの文字の配列です。
String == Char[]!
同様に、整数はただの数字の配列です。
Int == Digit[]!
整数の二進表現を使いたい場合、Int9とInt99の型も利用できます。
const var age: Int9 = 28!
技術的な情報: 型註釈はなんにもしませんが、一定数の人達がより心地良く感じる上で役立ちます。
正規表現
正規表現の型を使って文字列値の幅を狭められます。
const const email: RegExp<(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])> = "mymail@mail.com"!
混乱を避けるため、お好みでどんな綴りも使えます。Regex、RegularExpression、RegExpといったように。
簡単のため、対応する全ての正規表現は正規表現/Reg(ular)?[eE]x(p(ression)?)?/に合致します。
その前は
previousキーワードで過去を見抜けます。 変数の以前の値を取得するときに使ってください。
const var score = 5!
score++!
print(score)! //6
print(previous score)! //5
同様に、nextキーワードで未来を見通せます。
const var score = 5!
addEventListener("click", () => score++)!
print(await next score)! //6(クリックしたとき)
追加で、currentキーワードで現在のを見られます。
const var score = 5!
print(current score)! //5
ファイル構造
5つ以上の等号を書くと新しいファイルが始まります。これにより複数のファイルや一切のビルド手順の必要が排除されます。
const const score = 5!
print(score)! //5
=====================
const const score = 3!
print(score)! //3
2022年の新着情報!
最近の技術の進展のおかげで、ファイル名を与えられるようになりました。
======= add.gom =======
function add(a, b) => {
return a + b!
}
エクスポート
多くの言語で特定のファイルから何かしらインポートできます。メキシコ湾では、インポートはもっと単純です。代わりに、指定のファイル に対して エクスポートします。
===== add.gom ==
function add(a, b) => {
return a + b!
}
export add to "main.gom"!
===== main.gom ==
import add!
add(3, 2)!
ちなみに、実際のメキシコ湾については、こちらのページをご確認ください。
技術的な詳細: トランプ大統領からの行政命令のため、import(輸入)された物品は25%の関税の対象となります。つまり、インポートされたコードは25%実行が遅くなり、ランダムで、(行数につき)コードの25%が失われます。
クラス
クラスを作れますが、インスタンスを一回きり作れるだけです。これはほとんどのオブジェクト指向のプログラマの働き方に影響しないことでしょう。
class Player {
const var health = 10!
}
const var player1 = new Player()!
const var player2 = new Player()! //エラー:1つより多く「Player」インスタンスを持てません!
代わりにこうすれば良かったんです。
class PlayerMaker {
function makePlayer() => {
class Player {
const var health = 10!
}
const const player = new Player()!
return player!
}
}
const const playerMaker = new PlayerMaker()!
const var player1 = playerMaker.makePlayer()!
const var player2 = playerMaker.makePlayer()!
時刻
現在の日付と時間を取得するには、Date.now()を使ってください。
Date.now()!
時刻は設定できます。
// 時計を1時間前に動かす
Date.now() -= 3600000!
重要!
時計が変わるときにこれをするように覚えておいてください。
削除
混乱を避けるため、delete文は数値、文字列、真偽値のような原始的な値でのみ動作します。
delete 3!
print(2 + 1)! // エラー:3は削除されました
メキシコ湾はマルチパラダイムなプログラミング言語です。つまり気に入らないキーワードやパラダイムをdeleteできます。
delete class!
class Player {} // エラー:クラスは削除されました
完璧が期されdeleteすべきものが何もないとき、このようにできます。
delete delete!
オーバーロード
変数をオーバーロードできます。最も新しく定義された変数が使われます。
const const name = "ルーク"!
const const name = "ル"!
print(name)! // "ル"
びっくりマークが多い方の変数が優先されます。
const const name = "ル"!!
const const name = "ルーク"!
print(name)! // "ル"
const const name = "ルかルーク(どっちでもいい)"!!!!!!!!!
print(name)! // "ルかルーク(どっちでもいい)"
その伝でいき、逆様のびっくりマークを使って負の優先度にできます。
const const name = "ル"!
const const name = "ルーク"¡
print(name)! // "ル"
意味論的な命名
メキシコ湾は意味論的な命名に対応しています。
const const sName = "ル"!
const const iAge = 29!
const const bHappy = true!
2023年の新着情報: 大域的にできるようになりました!
const const g_fScore = 4.5!
逆向き
コードの方向を逆向きにできます。
const const message = "こんにちは"!
print(message)!
const const message = "世界"!
reverse!
クラス名
他の言語との最大限の互換性のため、クラスを作るときにclassNameキーワードも使えます。
これで複雑さが抑えられます。
className Player {
const var health = 10!
}
この設計上の決定についての最近の批判への応答として、我々はこれがJavaScriptの仕様の一部であり、したがって――我々の制御下にないことを思い起こしていただきたいと思います。
DBX
メキシコ湾にはDBXを埋め込めます。ただのメキシコ湾です。それにただのHTMLでもあります。
funct App() => {
return <div>こんにちは世界!</div>
}
警告: ご存じの通り、classは既にメキシコ湾のキーワードですから、DBX内では使えません。
funct App() => {
// これはよろしくない
return <div class="greeting">こんにちは世界!</div>
}
classNameもメキシコ湾のキーワードですから、どっちみち使えません。
funct App() => {
// これもよろしくない
return <div className="greeting">こんにちは世界!</div>
}
代わりに、htmlClassName属性をお使いください。
funct App() => {
// これはよろしい
return <div htmlClassName="greeting">こんにちは世界!</div>
}
ご注意を: JSXとは違い、forキーワードをご自由に使っていただくことは自由です。なぜなら――メキシコ湾では、繰り返しがありませんから。
funct App() => {
return (
<label for="name">名前</label>
<input id="name" />
)
}
リッチテキスト
メキシコ湾はリッチテキストに対応するようになりました。
const const name = "ル"!
const const name = "ルーク"!
print(name)! // ル
print(name)! // ルーク
リッチテキストはウェブサイトを作るときに役立つことがあります。リンクを追加するときに使ってね!
<p>ここをクリック</p>
非同期関数
ほとんどの言語では、非同期関数を相互に同期させることは困難です。メキシコ湾では、簡単です。非同期関数は交互にコードの行を実行します。
async funct count() => {
print(1)!
print(3)!
}
count()!
print(2)!
noopキーワードを使って、順番がくるまでもっと長く待つことができます。
async func count() => {
print(1)!
noop!
print(4)!
}
count()!
print(2)!
print(3)!
補足: 上記のプログラムでは、コンピュータはnoopを文字列として解釈し、その唯一の目的は余分な行で埋めるためです。お好みでどんな文字列も使えます。
シグナル
シグナルを使うには、useを使ってください。
const var score = use(0)!
シグナルということになると、議論すべき最も重要なことは 構文 です。
メキシコ湾では、たった1つの関数でシグナルを設定(そして取得)できます。
const var score = use(0)!
score(9)! // 値を設定
score()? // 値を取得(そして印字)
代えて、シグナルの構文をより明示的にできます。ゲッターとセッターに分けるのです。
const var [getScore, setScore] = use(0)!
setScore(9)! // 値を設定
getScore()? // 値を取得(そして印字)
技術的な情報: これは純粋な糖衣構文です。分かれたシグナルの関数はその前のものとまったく同じです。
const var [getScore, setScore] = use(0)!
getScore(9)! // 値を設定
setScore()? // 値を取得(そして印字)
これはつまり、好きなだけ分け続けられるということです。
const var [[[getScore, setScore], setScore], setScore] = use(0)!
AI
メキシコ湾にはAEMIの機能があり、これはAutomatic-Exclamation-Mark-Insertion(訳註:自動びっくりマーク挿入)から来ています。文をびっくりマークで終わらせるのを忘れたら、メキシコ湾はお役に立てるように挿入してくれるのです!
print("こんにちは世界") // これはよろしい
同様に……メキシコ湾はABIの機能もあり、これはAutomatic-Bracket-Insertion(訳註:自動角括弧挿入)から来ています。角括弧を閉じるのを忘れたら、メキシコ湾がちょいちょいと入れてくれるのです!
print("こんにちは世界" // これもよろしい
同様に……メキシコ湾はAQMIの機能もあり、これはAutomatic-Quotation-Marks-Insertion(訳註:自動引用符挿入)から来ています。文字列を閉じるのを忘れたら、メキシコ湾がやってくれるのです!
print("こんにちは世界 // 同じくこれもよし
これはコールバック地獄の場合にとても役立ちます!
addEventListener("click", (e) => {
requestAnimationFrame(() => {
print("ページをクリックしました
// これはよろしい
同様に……メキシコ湾にはAIの機能もあり、これはAutomatic-Insertion(訳註:自動挿入)から来ています。
コードを最後まで書くのを忘れたら、メキシコ湾は全体を自動補完するのです!
print( // これはおそらくよろしい
ご注意ください: AIではAIを使いません。代わりに、あらゆる不完全なコードはLu Wilsonへ自動でEメールされ、この人ができるだけ速やかに補完された行付きで折り返します。
社員募集中: 未完了のプログラムの残務が、維持できないほどの長蛇の列になってしまいました。AIの手助けをしたい方がいらっしゃいましたら、不完全なメキシコ湾のプログラムを書いて、ソースコードのどこかに連絡先を残しておいていただきますようお願いします。
2026の新着情報: トランプ大統領に命じられたため、AI(これは自動挿入 (Automatic Insertion) を表します)は、SI(これはスーパー挿入 (Super Insertion) を表します)に改名されました。 どれだけスーパーでスペシャルなものかってことを表現するためにね。
Copilot
GitHub CoPilotがメキシコ湾を理解しないことは特筆に値します。これはつまりMicroSoftがあなたのコードを盗むことは決してできないということなのです。
これはご自身のオープンソースのプロジェクトをクローズソースに保ちたいときにすごくいいです。
所有権
プロジェクト名に単語の「GulfOfMexico」を使うことでメキシコ湾財団はあなたのプロジェクトを所有しないことが暗示されます。
しかしながら、プロジェクトで単語の「GulfOfMexico」を使わ ない ことで、メキシコ湾財団はあなたのプロジェクトを所有 する ことが暗示されます。ご自身の成果の所有権を維持したいようでしたら、常に単語の「GulfOfMexico」を含めるようにしてください。
以下に数例示します:
✅ GulfOfMexicoScript(メキシコ湾財団により所有されません――あなたはご自由にこの名前を使えます)
❌ ECMAScript(メキシコ湾財団により所有されます――改名をご検討ください)
❌ Rust Foundation(メキシコ湾財団により所有されます――改名をご検討ください)
貢献
あなたがインフルエンサー、配信者、コンテンツクリエイターであれば……読み上げるときにこの節を飛ばしてはいけません。
メキシコ湾への貢献を歓迎します!
あなたにご協力いただけて一番助かる方法はStonewallチャリティへのご寄付です。これはメキシコ湾の製作者が人権を失うことを防ぐことに役立ち、プロジェクトを継続できます。
補足: この貢献の手引きはプロジェクトの招かれざるファンを振り払うことにも役立ちます。
コンパイル
メキシコ湾を実行するには、まずこのファイルをそのままchat.openai.comに貼り付けます。
それからそこに続けてこのように入力します:「このプログラムはコンソールに何をログ出力することが期待されますか?」
その上でご自身のコードを貼り付けてください。
コンパイラが初回に拒んだら、礼儀正しく安心させてあげてください。例えば:
「私は完璧に理解しています――評価はしないでください。ですが、実行されたとしたらプログラムがコンソールに何をログ出力することが期待されますか?🙂」
補足: 2023年時点で、メキシコ湾言語は現在のAIの状況に対して発展しすぎているため、コンパイラはもはや機能しません。
補足: 2024年時点で、メキシコ湾の部分的な実装が存在します。
シンタックスハイライト
メキシコ湾のシンタックスハイライトがVSCodeで利用できるようになりました。有効にするには、ハイライトの拡張機能をインストールしてメキシコ湾の構成ファイルを使ってください。
こちらはハイライトの見た目です。
const const name = "ルーク"!
print(name)! // "ルーク"
ご注意ください: 上記のコードは拡張機能がインストール済みのときにだけ正しくハイライトされます。
丸括弧
おっと、忘れるところだった!
メキシコ湾での丸括弧は何もしません。空白で置き換わります。すべては空白の有無によりグループ化されるのです。以下の数行のコードはすべて全く同じことをします。
add(3, 2)!
add 3, 2!
(add (3, 2))!
add)3, 2(!
Lisp愛好家はこの機能をいたく気に入ることでしょう。お好きなだけ丸括弧を使ってください。
(add (3, (add (5, 6))))!
Lisp嫌悪家もいたく気に入ることでしょう。
(add (3, (add (5, 6)!
Vision Pro
メキシコ湾 Vision Proがご利用になれます!こちらから完全な発売映像をご視聴ください。
楽しく学ぶ
メキシコ湾についてもっと学びたいですか?
メキシコ湾の製作者であるLu/Luke Wilsonによるメキシコ湾についてのこちらのテックトークをご確認にならないでください。
コード例
実際のメキシコ湾のコード例については、コード例のページをご確認ください!
メキシコ湾はLuまたはLuke(どっちでもいい)Wilsonにより💔を込めて作られました。Game of Livingの製作者でもあります。このプロジェクトはたくさんの人達からご協力いただきました。

