こんにちは、白瀬です.
はじめに断りを入れておきますが実はcrystal書いたことないです.
あとrubyも実はあまり書いたことないです.
ruby多少触ったことは有りますがシンタックスを忘れるレベルで書いていないです.
ふだんはgoとかc++とかjavaを書いています.
さて今回の内容ですが
自分は普段新しい言語を始めるときはだいたい画像処理から始めます.
なので今回も画像処理をやろうと思ってました.
いろいろ頑張ってみたんですがちょっとまだ出来なかったので思ったこと書いていきます.
今回インストールするところから始めたわけだが他の*env
系がある言語同様簡単にインストールできた.
crenv作ってくれたぴねたんありがとう.
とりあえずHello world
puts "hello world"
とりあえずFizzBuzz
def fizzbuzz (n)
if (n % 15 == 0) then
"FizzBuzz";
elsif (n % 3 == 0) then
"Fizz";
elsif (n % 5 == 0) then
"Buzz";
else
n;
end
end
for n in 1..100 do
puts fizzbuzz(n);
end
とりあえずこんな感じで書いた実行したらなんかおこれた
Syntax error in ./test.cr:2: unexpected token: then
if (n % 15 == 0) then
thenをはずすとまた怒られた
Error in ./test.cr:13: undefined method 'in'
for n in 1..100 do
ひょっとしてforない?
"For" Loop support
そもそも実装される予定がないみたい.
というわけでeachで
def fizzbuzz (n)
if (n % 15 == 0)
"FizzBuzz";
elsif (n % 3 == 0)
"Fizz";
elsif (n % 5 == 0)
"Buzz";
else
n;
end
end
(1..100).each {|n|
puts fizzbuzz(n)
};
とりあえずシンタックスはなんとなく理解した.
ここで本題の画像処理をやろうと思い想像した.
go言語だとjpegのDecodeは
file, _ := os.Open(fileName)
img, _ := jpeg.Decode(file)
だいたいこんな感じでできる.
crystalもそういう感じでできるかなと思って調べたら.
そもそも画像系のclassなかった・・・
これは自作しろということか!!
まぁAPI見る感じサーバー立てたりとかする機能が多いのでそういう使い方は想定されてないのかなという感じがする.
これは弱ったなと思いつつ更に調べていたらCのバインディング機能が存在しているということがわかった.
ということはjpeglib.h
とかlibjpeg-turbo.h
とかが使える.
というわけでここらへん見ながら頑張ってcrystal-jpegを作ろうとしています.
昨夜あたりからCbinding機能触りだしたんですがまだ理解できてないのでちょっと辛いですが・・・
引数に対して構造体が入る奴とか戻り値で構造体が出てくるやつとかそういうのをcrystalでどう扱うのかよくわかってないです.
なのでゆっくり作っていきます.
あとついさっき知ったんだけどインラインアセンブラもあつかえるのね.