D言語の入門記事などのまとめ-part2(2018/1/4)

インポートとモジュール

import文は、与えられた利用可能なモジュールからすべてのパブリックな関数や型を作ります。 Phobosと呼ばれている標準ライブラリがstdパッケージ下にあり、それらのモジュールは

import std.moduleName

で参照できる。 importは特定のシンボルを選択的にインポートすることができる。

import std.stdio: writeln, writefln;

選択的インポートは、シンボルがどこから来たのかわかりやすくさせて可読性を向上させたり、他のモジュールのシンボルとの衝突を防げる。 import文は、プログラムの一番上に来る必要はなく、関数や他のスコープで局所的に使用できる。

D言語の入門記事などのまとめ-part1(2018/1/4)

D言語インタラクティブツアーなどのまとめです。

D言語とは?

D言語は、様々な言語を数十年の経験の集大成であり、独自の特徴があります。

  1. 強力な表現を可能にする高級な構文
  2. ハイパフォーマンスなコンパイル言語
  3. 静的型付け
  4. OSやAPT、ハードウェアへの直接的なインターフェース
  5. 早いコンパイル速度
  6. メモリセーフなサブセット
  7. 保守性が高く、理解しやすいコード
  8. C-likeな構文で緩やかな学習曲線
  9. C appとのバイナリインターフェース互換性
  10. C++ appとの制限付き、バイナリインターフェース互換性
  11. マルチパラダイム(手続き型、OO、ジェネリック、純粋関数型プログラミングアセンブリも)
  12. ビルトインのエラー検知機能(契約、ユニットテスト)

dub

D言語の標準的なパッケージマネージャーでは、

dub init hello  

で新しいプロジェクトがコマンドラインを使い、作れます。 helloディレクトリでdubと実行すると、すべての依存関係を取得しappをコンパイルして実行してくれます。

dub build 

でプロジェクトがコンパイルされます。

Kotlin言語で素数判定

昨日(2017/12/26)から一日でDotinstallでkotlin言語の学習を始めました

早速ですが、素数判定プログラムを書いてみる

class Prime(private val n: Int) {
fun isPrime(): Boolean {
var i = 1
var divisor = 0
while (i <= this.n) {
if (this.n % i == 0) divisor++
i++
}
if (divisor == 2) return true
else return false
}
}
fun main(args: Array) {
val prime = Prime(1145141919)
println(prime.isPrime())
}


はい、誰でも思いつくようなアルゴリズムです

このプログラムは、素数を表すデータ型クラスPrimeを定義し、コンストラクタ引数に任意の数値n、nが素数か確認するメソッドisPrimeがあります。
property [n, isPrime(method)]
今の自分にはここまでしか書けません。

これから

これからOCaml言語の学習と関数型プログラミングの理解、プログラミングの基礎知識の理解、数学の学習を頑張っていこうと思います。 いままででコロコロ言語を変えてきたのですが、それでは駄目だと思い当たらなパラダイムに挑戦しようと思います。

まとめ

  1. OCaml言語の学習とRead World OCamlの完走(未定)
  2. 関数型プログラミングの利点などについて理解する
  3. プログラミングの基礎知識の復習(式、文、変数、関数etc...)
  4. 数学の学習を頑張る

Ruby処理系の実装 12/17 進捗

まずはじめに、 rubyC言語(C11)で実装することに決めた。 それで、そのままだとコードを写すのみになってしまいそうなのでC11に沿った記法でC11の最新の機能をなるべくつかいformatterなども使おうと考えている。 また、 ビット演算などのコンピュータの基礎を勉強しようと思う。

今日までで、 Rubyのオブジェクトがrubyでは構造体で表現されており、VALUE型がunsigned long型のtypedefで、オブジェクトを扱う際は構造体のアドレスを任意の構造体オブジェクトへのポインタにキャストして使っていることがわかった。

そして、 基本的に大体の構造体オブジェクトはstruct RBasicをメンバーに入れており、 struct RBasicはunsigned long型の多目的フラグのflagsとそのオブジェクトのクラスを表すVALUE klassがメンバとなっている。

おそらく、klassはstruct RClassのアドレスを保持している。

Ruby処理系の実装 12/16 進捗

RHG本でRubyのクラスの関係などは理解できたが、 rubyが内部でオブジェクトをどう表現しているのかとういうところで今現在詰まっている。 また、 D言語で処理系を書く場合YaccやLexの代替ツールがないかどうかも探さなくてはいけなくなってしまう。 オプションの処理はrubyの中ではかなり実装は簡単だろうが、 ruby_options関数やruby_run関数の実装場所がいまいち掴めていない。

TODO

  • オプション処理の実装
  • Yacc(Bison) Lex(Flex)の代替品を探す
  • rubyのオブジェクトの表現方法の理解
  • C言語の構造体へのポインタの深い理解
  • D言語の学習
  • etc....

まだまだやらばければいけないことだらけなので、急がなくてはいけない。 本当に最悪の場合、D言語ではなくC11で実装する可能性もある。

Ruby処理系を実装する準備 12/15

Ruby処理系を実装するにあたって、まずはソースコードとRuby1.8を詳しく解説している本があったはずなのでその本がオンラインで公開されていたはずなので見てみる。 githubのレポジトリを見ているとccan directoryやdef拡張子のファイルなどがあり謎だった。

流石にまだコードを書くことができないため、D言語学習に伴って開発を進めていこうと思う。