読者です 読者をやめる 読者になる 読者になる

Boa 言語

妄想

仕事で Visual Basic を嫌々書いている。
VB は本当に f*ck'in な言語であり、どうしてこんな言語でみんな発狂せずにコードを書けるのか不思議なくらいだ。
こんなにしつこく過保護な言語を他に視たことがない。
本当に必要なものをかわいそうな VB 話者から隠蔽し、彼らの頭が無視しがたい現実に直面して脳みそが破裂し、
会社の壁に汚らしく溶けた脳みそをぶちまけたりしなくてもいいように配慮をしてくれているが、私に言わせればそのような配慮は全く必要ない。
っていうか私には VB を喜んで使う者がいることが信じられない。

それに、キーワードをアッパーキャメルにするという Visual Studio のやり方は私には合っていない様に感じる。
キーワードはすっきりと頭に入ってくる様な単語を使わなければいけない。
inherits はいいとして、問題は mustinhritsmustoverridenoinheritable だ。なんだよ must なんとかって?!

☛('ω')☚ 頭大丈夫ですか〜?

なんでそんなに持って回った言い方をしなければいけないんだ?なぜ abstractvirtual を使わなかった?!
Visual Basic 開発班の悪意を感じるのは私だけだろうか?
そして、C# の方がサポートが優れていることをひしひしと感じる。
Visual Studio 2010 では VB 設定にすると対象フレームワークや対象プラットフォームの設定をするためのコンボボックスは注意深く隠されている。
これは優しさではない。過保護が行き届いているのだ。
確かに VB 話者にはあまり必要とされない設定かもしれないが、彼らにも門戸を開いて欲しい。

えーっと何が言いたいかって言うと、VB はあなたの脳みそをクラッシュさせる。
仕事のために Visual Basic を覚えなきゃいけないなんていうのは嘘っぱちだ。
VB を書いている人間は彼女(VB)のことをあまり良く知らない。
私は VB のことを仕事で VB を書くうちに学び、すぐに VB がよくない言語であることを知った。
VB で脳みそをクラッシュさせてしまった人々は毎朝ドロドロの脳みそを頭蓋骨に収めたまま出勤し、ドロドロの脳みそで物事を考えている。
そして、夜遅くに家に帰り、ドロドロの脳みそが何か彼らの知らない理由でこぼれ落ちないように慎重に頭を枕に乗せ、眠りにつくのだ。

かく云う私も脳みそがドロドロになってきているのを感じる。
VB を書くことで溜まるストレスを別の言語を考えて軽減している。

それが PythonLisp を合わせて Ruby で割った言語、Boa だ。
Boa でへろーわーるどを行うにはこのように書く:

println "Hello, World!"

関数の呼び出しには括弧は必要ないがこの様に書いてもいい:

println( "Hello, World!" )

Boa では、あらゆるものが式だ。

try
    Interpretor.open_and_eval (shift ARGV)
catch SyntaxError => se
    puts " *おおっと!* しんたっくすえらー!!", $stderr
    puts (to_s  se), $stderr

インデント指向であり、言語機能としてオブジェクト指向はサポートされていない。
printlnputs は文ではなく、関数である。

次のコードは Boa 言語で書いた echo コマンドである:

import std
# std.io モジュールから stdout を使います。
import stdout from std.io
# getopt.long モジュールからは OptionParser クラスを使います。
import OptionParser from getopt.long

# new 演算子はありません。
# new はクラスメソッドになっています。
parser = OptionParser.new

const SPACE = " "
const NEWLINE = "\n"

defun main
    # 引数を取らないメソッドは括弧を添える必要はありません。
    parser.parse

    s = string:empty
    # Range クラスのリテラルを作成し、
    # step メソッドを使ってイテレートしています。
    step (0..(count parser.args)), (i) ->
        # if 式の後置もできます。
        s += SPACE if i > 0
        s += parse.at i

    stdout.writeln s