今日は新しい言語の紹介をします。Julia言語 http://julialang.org/と言う言語です。
LLVMを使ったJIT Compilersを装備していて、インタプリタ形式で実行することが
できます。
詳しい解説は先ほどのURLに譲ります。速度の面でもC++に迫るものがある、という
ことが書かれておりますー。今日はJulia言語のドキュメント(英文)をもとに、
Julia言語入門を書いてみたいと思います。
では、WindowsにJuliaをインストールして、あんなことやこんなことをしてみましょ
う。Juliaの30分スペシャルツアー、始まるよー☆
1. インストール
とりあえず、さっきのURLから、downloadsのページに飛びます。 http://julialang.org/downloads/
そこに、google codeのページが書かれていますので、さらに飛びます。えいっ。
https://code.google.com/p/julialang/downloads/list
幾つかWinという単語のついたzipがあると思いますが、次のファイルをお薦めします。
一つ目(2013/07/23時点):
julia-0.2pre-dbac83fb44-WINNT-i686.zip
もし一つ目がダメだったら:
julia0.1.2-WINNT-i686+Git.zip
Julia言語はデフォでGitを使ってファイルをダウンロードするので、
長期的にはGitの入っている配布物がいいでしょう。
zipを展開して、適当な場所にファイルを置きます。
julia.batというファイルがありますので、ダブルクリックしてください。
1回目は色々コンパイルするので時間がかかります。
プロンプトが出て、めでたしめでたしです。(多分)
使い方はpythonなどのように、REPLで使うか、
> julia.bat file1.jl file2.jl ...
のようにファイルを指定して使います。Julia言語ファイルは拡張子.jlです。
LinuxやMacでも配布物あります。ただLinuxは最新のUbuntu以外はgit使ってソースコードからビルドになると思います。詳しくはGitHubのReadme.mdを参考にしてください。
コンパイルにgfortranとか必要です。多分自分のマシンにLinux入れてる人なら自分で
ビルドできると思うのであまり心配してません(こら)
2. まずはこんにちは世界
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" to list help topics
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.0.0+107211096.rba9e.dirty
_/ |\__'_|_|_|\__'_| | Commit ba9eb0a653 (2013-01-14 19:30:42)*
|__/ |
julia>
ちょっとロゴがつぶれちゃいましたが、こんな感じでjulia>ってロゴが出てくるので、
まずはREPLから色々やってみましょう。
julia> println("Hello Julia!")
Hello Julia!
末尾のセミコロンは要りません。付けてもいいですが、普通は付けないで
書きます。pythonやrubyみたいですね。
3. 数値
julia> 1
1
julia> 100000
100000
julia> 1000000000000000000000000000
syntax error: invalid numeric constant 1000000000000000000000000000
julia> 100000000000000000000
syntax error: invalid numeric constant 100000000000000000000
julia> int128("100000000000000000000000000000000")
100000000000000000000000000000000
あまりに長い数はエラーになります。
int128という関数で128bit整数を作れるのですが、そいつに文字列として
数字を喰わせてあげると、128bit整数となります。
julia> typeof(int128("100000000000000000000000000000000"))
Int128
julia> typeof(Int)
BitsKind
julia> Int
Int64
julia> Int32
Int32
julia>
0xを付けて16進数にすると、unsignedな型になります。
julia> typeof(0x88)
Uint8
julia> typeof(0x8888)
Uint16
julia> typeof(0x88888888)
Uint32
julia> typeof(0x88888888777777776666666655555555)
syntax error: invalid numeric constant 0x88888888777777776666666655555555
julia> typeof(uint128("0x88888888777777776666666655555555"))
ArgumentError("'x' is not a valid digit (in \"0x88888888777777776666666655555555\")")
in parse_int at string.jl:1132
in uint128 at string.jl:1185
julia> typeof(uint128("88888888777777776666666655555555"))
Uint128
julia>
長過ぎる数は例によって、コンストラクタ(ここではuint128)を
使って作ってください。
typeof関数で、数値や文字列などのデータがどのような型を持つか
が分かります。windows版は現在32bit版だけで、
IntがInt32となります。上記例は64bit Mac OSXでの実行例
なので、Int64となっております。ここ注意です。
4. 数値型
本来は最初に説明すべきでした。
次のような数値型があります。
• Integer types:
– Int8 — signed 8-bit integers ranging from -2^7 to 2^7 - 1.
– Uint8 — unsigned 8-bit integers ranging from 0 to 2^8 - 1.
– Int16 — signed 16-bit integers ranging from -2^15 to 2^15 - 1.
– Uint16 — unsigned 16-bit integers ranging from 0 to 2^16 - 1.
– Int32 — signed 32-bit integers ranging from -2^31 to 2^31 - 1.
– Uint32 — unsigned 32-bit integers ranging from 0 to 2^32 - 1.
– Int64 — signed 64-bit integers ranging from -2^63 to 2^63 - 1.
– Uint64 — unsigned 64-bit integers ranging from 0 to 2^64 - 1.
– Int128 - signed 128-bit integers ranging from -2^127 to 2^127 - 1.
– Uint128 - unsigned 128-bit integers ranging from 0 to 2^128 - 1.
– Bool — either true or false, which correspond numerically to 1 and 0.
– Char — a 32-bit numeric type representing a Unicode character (see Strings for more details).
• Floating-point types:
– Float32 — IEEE 754 32-bit floating-point numbers.
– Float64 — IEEE 754 64-bit floating-point numbers.
128bitの型があるのが面白いですね。浮動点少数については、32bit, 64bitが
あります。デフォルトではFloat64という型になります。
型の名前に対応した、コンストラクタが存在します。そうです、さっき出て来た
uint128()などです。
型名を先頭文字だけ小文字にすれば、コンストラクタとなります。
pythonの整数みたいに、多倍長整数/実数を扱えます。
あまり使うことはないと思いますが。。。
julia> BigInt(1000)
1000
見た目は変わりませんが、BigIntになっています。あたまが大文字なのに
注意してくださいね。
6. 数学関数群
一通りあります。詳しくはマニュアルどぞ。
julia> sin(0.4)
0.3894183423086505
7. その他新しい機能
分数と、複素数が扱えます。
julia> sqrt(1 + 2im)
1.272019649514069 + 0.7861513777574233im
虚数部はimで表現します。
julia> 12//34 * 56//78
56//221
a//bでb分のaになります。演算が可能です。
気になる型は、Rational{Int32}です。JavaのGenericみたいですね。
8.文字列
Unicodeを扱うため、文字列は少し面白い仕様です。
str = "Hello, Julia!¥n"
のように、C言語のような扱いが可能ですが、
str[0], str[1]とアクセスすると、たまにUnicodeの文字があると
例外が出ます。
どうすればいいかと云うと、
for c in s
println(c)
end
のように、for...in文で廻すと、cにUnicode文字が入ります。
9. 正規表現
割愛(ぉぃ PCREが使えます。
10. 関数
関数定義はMatLabに近いです。
function f(x,y)
x + y
end
Juliaではループや関数の最後はendキーワードで終わります。
基本インデントしますが、pythonのような字下げで意味が変わる仕組みは
ありません。
この関数では返す値をreturnキーワードを用いずに書いています。
LISPと同じで、最後に書いた式が返り値となります。
returnキーワードも使えます。制御構造により異なる返り値が返るとき、
途中で値を返したいときにreturnキーワードを使います。
function f(x,y)
if x > 0
return x+y
else
return x*y
end
end
11. 無名関数
julia> x -> x^2 + 2x - 1
#<function>
所謂ラムダ式です。
別件バウアーですが、
2xって書くと、2*xを計算してくれます(λ式以外でも使用可能)
今日はこんなところかなぁ、、、
(力尽きた)