Elixirなにこれ(5度目Elixirでコンピューターサイエンスを学ぶシリーズの第5弾で以下記事の続編ですwww.okb-shelf.workこの本を参考に勉強しつつコードを書いていますwww.oreilly.co.jp以前の記事まではかなり低レイヤーの部分をメインとして扱っていた論理ゲートの実装から行い、加算器を作成し、ALUを作成し、メモリまでの実装が完了したしかしながら、Elixir上でメモリをクロック同期がうんたらで実装させるには参考にしている書籍では情報不足でHDL言語では何とか実装出来たのだが、Elixirで実装することが出来なかった理由としては上の書籍ではCPUのクロック部分の実装は省略されており、付属のアプリケーションに委ねているためで内部構成を上手く掴むことが出来なかったからだいずれはリベンジしたいとは思うが、ここで詰まって他の部分に触れないというのはもったいない一旦、Elixirで進めるというチャレンジは停止していたが、6章から好きな言語を使ってアセンブラVM変換器コンパイラを実装することが出来るgithubを除いてみたがElixirで実装している人は確認できなかったため、これはいいぞと思い再び、Elixirのコードを書き始めた現状としてはアセンブラ(一部バグあり)とVM変換器のメイン部分までの作成までを実装することが出来た(つまりは7章まで)納品できるレベルではないが、完璧なコードを書くことを目的としておらず、まずはコンピューターサイエンスの全体像を掴むことをメインしているので一旦は自分の中で良しとした。時間がある時にリベンジすれば良いあと単純にアセンブラの文法に詳しくなりたいと全く思わないので突き詰める必要がないと判断した話が少し長くなっているので、「そんなことは知っている」という方は読み飛ばして下さい久々のブログでテンションが上がっている様です。仕事でしたので察して下さいアセンブラについて普段、我々が業務で使用している言語はいわゆる、「高級言語」と呼ばれるものでありより人間が直感的に記述を行うことができるプログラミング言語であるしかしながら、今まで論理ゲートを実装してくる中で触れた通りに、実際にはコンピューターというのは0と1の情報だけで動作をしているそのため、我々が汗水流しながら書いた高級言語を最終的には全てが0と1で記述されるバイナリコードのレベルまで翻訳をする必要があるこの翻訳の過程にはいくつかのステップが構成されるどうやらコンピューターによって使用が異なる場合がある様だが上から順に以下の様なレイヤー構造を持つ。名称は気にしなくて良い高級言語コンパイラVM変換器アセンブラここで個人的に思ったことがある論理ゲートの組み合わせが加算器になり、加算器などの組み合わせがALUになり、最終的にCPUになるという所からスタートしたがこのプログラミング言語が実行可能状態になるまで変換されるまでにも同じ様なレイヤーを持っていることに驚いたコンピューターの設計の本質にあるのは「抽象化」であり、いつくのものレイヤーが重なることで複雑なことを可能としている先人の知恵や努力が詰め込まれており、現代のコンピューターが動作をしているまた、この設計はそれぞれが独立したレイヤーとして作成されているため仕様変更も行いやすいプログラミングでも同じことが言える。小出しに関数をレイヤー的に実装しておけば急な仕様の変更にも対応することが出来るいいね話はそれたが、アセンブラというものは書籍の内容と合わせて動きを追ってみる@2D=A@3D=D+A@0M=Dこんなような、かなり低レイヤーの言語をアセンブリ言語と呼ぶ。アセンブリとアセンブラは異なるものでアセンブリ言語をバイナリーコードに変換するプログラムのことをアセンブラと呼ぶこのアセンブリで書かれたコードをアセンブラを使ってバイナリーコードに変換するとこんな感じになる000000000000001011101100000100000000000000000011111000001001000000000000000000001110001100001000もう何が何だが分からない。厳密には理解は可能だが可読性が悪いなんてレベルではないアセンブリがどのように変換を行うかということに関しては説明をしない。書籍を読んだ方が早いざっくりとだけ自己満足程度に触れておくと、メモリ内に予め定義したコマンドの対応が用意されており(Elixirでいうmap(%{}))その対応を元に1行ずつ解析を行なって変換していくで、このアセンブリ言語を現代において書かれている方というのはあまり存在しないはず先ほども話した様にコンピューターは構造的に設計されている。今回は上記のような変換を行うアセンブラとVM変換器を実装した厳密には機能が欠けているが理解に十分と判断したので手を止めた。全てのコードを解説しているとキリがないのでそれぞれメイン関数の部分のみ順に説明をしておく。実装は書籍にある程度沿って実装したコードがわりとボリューミィになったのでgithubを参照するgithub.com実装しての感想はElixirってやっぱりいいなって。日)22歳の新卒エンジニアです。elixirという言語に惹かれています。人より少し自転車を漕ぐのが速めです。無駄なことを覚えるのが得意です。(2)月別アーカイブ広告はてなブログをはじめよう!takamizawa46さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。