ハチのブログ

日常系、技術系色々

comelang version 0.9.8 リリース

まだヒープシステムにバグがありました。修正。エディッターのほうはたまにSegmentation Faultが出ますね。

ちょっとデバッグしてみます。

 

BoehmGCのサポートをちょっとしてみました。

ライブラリの方はオリジナルのヒープシステムしか用意していません。

BoehmGCで管理すると決めたクラスにBoehmGCを使ってください。

 

 

comelang version 0.9.6リリース

です。

 

ちょっとエディッターのバグが我慢ならないため、BoehmGCを捨てました。

new (GC) intなどでBoehmGCを使うことはできますが

デフォルトではオリジナルのヒープシステムです。

詳細はREADME.mdを見てください。

このアルゴリズムはかなりバグがあったのですが、だいぶバグが減ったと思います。

とりあえず、エディッターは動きました。

オリジナルのヒープシステムはneo-cでも採用していましたが

comelangの方でもだいぶまともになってます。

ソースファイルの方もシンプルで、あんまりバグが入る余地はないかなと思います。

 

とりあえず、version 1.0.0に向けてぼちぼちやっていきます。

Pythonクローンのyappyが動いて、あとはllファイルで型チェックしなくても

コンパイラ側で型チェックしてくれるようにするのが目標ですかね。

 

わかっているバグは関数が複数回定義された場合前回の定義が消されるバグです。

これはllファイルをコンパイルするときにエラーとなりますが

ちょっと予期せぬバグが出るかもしれません。

 

まあ、セグフォも減って親切なコンパイラなり自分的には完璧だと思ったら

version 1.0.0にしますね。

 

しかし、ユーザーはそれほど増えないでしょう。今どきC言語かという感じですよね。

Goを使ったほうが良いでしょう。Rustは僕はあまり好きではないです。

シンプルなコンパイラのほうが生き残るような気がします。

 

僕はあくまで自分で作ったコンパイラで遊んでみたかっただけなので

自己満足です。エディッターはそのコンパイラで作ったものを使ってます。

僕のThinkpadにはvimemacsも入ってません。

つまり自分で作ったコンパイラで作ったエディッターで自分の作ったコンパイラ

自分で作ったエディッターやPythonクローンを修正しています。

そうです。自己完結しております。遊びとしては面白いですね。

まれにC言語が好きで、あくまでC言語に拘り、文字列ライブラリやコレクションや自動freeのヒープシステムが欲しいという、あなた。

そう、そのあなたに僕のコンパイラが届けばいいです。

良かったら試してみてください。

comelang version 0.9.3リリース

ちょっと頻出するバグを修正しました。セグフォ減らしていきます。

型チェックは甘いですけど。llのアセンブラがチェックしてくれますしね。

ll読めないとつらみがあるかもしれませんが、そんなにllを読むのは難しくないとおもます。

 

しばらくPythonクローンを適当に実装していって、バグ減らしていきます。

 

BoehmGCについてですけど、特にバグもなく安定していて速度も速い印象です。

ただ、エディッタが落ちますね。boehmGCのバグなのか、こちらのバグなのかわかりません。

自動freeを行っていた頃は落ちなかったんですけどね。うーむ。

まあ、今後のboehmGCの発展を見込んで、boehmGCを使っていきます。

boehmGCを使うとCでもJavaみたいに気楽にオブジェクトを生成できて

気楽なプログラミングができますね。

逆にバグも減りますし。エディッターの方のバグはなんとかしたいんですけどね。

何回か書いたソースが電子の彼方に消えてます。

valgrindかけたら、特定できますかね。ちょっとわかりませんが。

ちょっとデバッグ粘ってみるかな。インタラクティブなアプリはデバッグが大変ですね。

言語処理系はそのあたりテストが楽なので、言語処理系のほうが作るのは楽かもしれません。

エディッターは結構難易度高いかなぁ、、、、

バグが再現しない。ツラミある。

今更自動freeのシステムのソースを復活させるのはさすがに無理ですし。

まあ、僕しかこのエディッターを使っていないと思いますけど、やっぱバグがあると

デバッグに燃えてしまうのがプログラマーです。

 

Pythonクローンの方はぼちぼちやっていきます。PHPやJSなども実装したいですね。

JSかなぁ、、、JSの闇はよく知ってますけど、まあ、言語仕様の把握が目的なんで

どうでもいいです。僕実装して覚えるタイプで。遠回りな勉強の仕方ですね。

まあ、いいですけど。

 

comelangのほうは結構気に入ってます。C++よりはまだましじゃないでしょうか。

Rustはどうもなって人はGoやってんのかな。まあ、BoehmGCのCコンパイラがあってもいいじゃないですか。

遊んでやってください。

 

https://github.com/ab25cq/comelang

comelang version 0.9.2リリース

です。

 

リファクタリングをちょっと頑張りました。無駄な構造体のフィールドや無駄なコードは消しました。完璧じゃないと思いますが。

 

だいぶソースがシンプルになったと思います。あとファイル名をわかりやすくしました。

comelangのソースがLLVMでのCコンパイラの作成の参考にでもなれば。

 

Thinkpad&Debianの方はだいぶ馴染んできました。最近だとWindowsいりませんね。Linuxで十分っていうか。ビデオチャットなどもでき、Officeがないだけで特に

僕にはWindowsは必要ありませんね。まあ、欲を言えばAndroidのアプリが使いたい

っていうか。それがChromeOSなのかもしれません。

 

僕はvi使いですけど、最近emacsって良いなって思ってます。emacs+gdb

-gオプションでコンパイルしたLinuxをソースファイルを見ながらステップ実行

できるとか。Linuxハッカー目指したいならemacsですね。

そういえば有名なプログラマーemacs多いです。まつもとゆきひろさん

Linusさん(micro emacs自分改造)、ストールマンさんにPythonの作者なども

emacsと聞きます。viって使っていて面白いですけどgdbと連携考えるとemacs

のほうが良いのかもしれませんね。

 

Rustに対するCのアドバンテージですが、Linux自体がC言語で書かれている。

Rustでも低レイヤーを書く場合は変数の寿命の保護の恩恵が得られずめんどくさい。

C言語はRustより言語仕様がシンプルであまり難しくないというところですかね。

 

C言語はメモリの保護がありませんが、-gオプションでコンパイルしてセグフォしたらgdbを実行。不正なメモリのアクセスはvalgrindで検出すれば、それほど難しくありません。特にvalgrindはあまり知られてないと思いますが、C言語ではものすごく頼もしいツールです。valgrindをするとandroidのtermuxでandroidのCライブラリの不正なメモリのアクセスなどが検出できたりします。cursesメモリリークしまくってんなぁとか。

 

第一C言語はメモリ構造が自由にかけて自由度が高く書いていて楽しいです。

クィックソート、ベクター、リスト、マップ、タプル、何でも書けます。

僕はC言語を30年やってますが、マップ、ベクター、リストは諳んじて書けます。

クィックソートは前書いたソースが必要ですが。マージソートも前書いたソースがあれば書けます。

アルゴリズムを本当に学びたいならC言語がベストだと思います。

 

もし、ベクターやリスト、マップなどをその都度書くのはめんどくさいならC++がありますがC++は複雑過ぎて使いづらいです。その点僕のcomelangはシンプルなのでC言語を学びたい人におすすめできます。comelangにはRubyのような文字列処理やC++のようなリスト、ベクター、マップがあり、3.times { puts("HELLO"); }のようなメソッドブロック。[1,2,3].map { return xsprintf("%d", it); } => [ "1", "2", "3" ]のような型推論があります。よかったら使ってみてください。サンプルコードとして僕の愛用するviクローンvinがcomelang/vinに、作りかけのPythonクローンがcomelang/yappyにあります。

感想お待ちしてます。

 

https://github.com/ab25cq/comelang

また再開しました

QiitaとZennを追われて、はてなに行き着きました。はてなは京都にあるそうで、僕も京都在住で、親近感があるので、ここで、続けられたらなと思います。

clover2を開発していた頃に書いてたみたいで記事が懐かしいですね。

 

やっているSNSFaceBook, twitterです。twitterは下ネタなど何でもありで適当に書いてます。FaceBookは真面目に書いています。

 

ここでは日記形式で日常や今作っているCコンパイラの拡張言語のcomelangの開発についてかければいいなと思います。

ただ、日常系はtwitterで書いちゃうので、あんまり書かないかもしれません。

 

最近Thinkpad x250を中古で手に入れてDebianを入れました。これがまた最高で。xfceで使っているんですが、快適ですね。Linuxのデスクトップ環境もついにここまで来たかと感動しています。Linuxのデスクトップは2000頃に使っていたんですが、不具合も多く、すごくめんどくさいもんでした。その後何回か、トライしましたが毎回期待を裏切られてMacBook使ってました。今回(2022年)時点では僕の需要は完全に満たしている感じです。僕はパソコンではtwitter, コンパイラ開発, ブラウザ, ssh, ビデオチャットが主な使用目的で、それさえ満たせば何でもいいので、あまりこだわりがありません。コンパイラ開発はsshでログインさえできればVPSでも開発できるので、クライアント側がWindowsだろうがMacBookだろうがあんまり関係がないんですよね。ただ、このThinkpad x250はローカルでも自作のソフトウェアのコンパイル速度も早く、ちょっとクライアント側で開発しようかなと思いました。節約のためVPS契約切ろうかな。

 

現在はclover2は開発してません。この間ちょっとソースを整理したくらいですかね。

clover2は僕の需要は満たせませんでした。やっぱシェルは変態なものは使いたくないというか。じゃあ、アプリ開発だってことですが、なにせ拡張ライブラリが全然ないので、アプリ開発では使い物にならないんですよね。Ruby, Pythonなどはライブラリが豊富ですが、clover2は誰も拡張ライブラリ作ってくれませんしね。

 

というわけで今はLLVMでcomelangというC++みたいなCコンパイラ作ってます。これだとライブラリがC言語のものを思う存分使えて、誰にも拡張ライブラリ作ってもらえなくても、大丈夫ですしね。よかったら使ってみてください。

 

https://github.com/ab25cq/comelang

 

にあります。comelang/vinにviクローンがcomelang/yappyにPythonクローンがあります。

 

Pythonクローンの方は現在開発中です。viクローンの方は、まあ、人には勧めませんけど、自分では使っています。僕のThinkpadにはvimは入ってません。

 

今後ともよろしく(メガテン