by shigemk2

当面は技術的なことしか書かない

池袋バイナリ勉強会で1年半くらいでやったことをつらつら書く #ikebin

https://bitbucket.org/7shi/ikebin/wiki/ikebin.jpg

概要

今日が最終回でした。会場も閉めるそうです。

connpass.com

1年半くらいこの会に通っていましたが、比較的ヒソヤカに終わりました。

参加理由

そもそもこの会に来たのは基礎を勉強するということを目的としたためです。そのために、機械語や!バイナリや!ってんで通い始めました。 とにかく動けばいいみたいな考えでコードを書いていた時期があったので、これはどうしたものかと思ってこの勉強会に通い始めました。

最初はゆるゆにでしたが。

PDP-11で一躍有名になるとか、そういった派手なことはしていませんが、この勉強会をベースにちょくちょく発表していたので、発表内容などをつらつら紹介していきます。

場所が一緒だけど参加しつづけたやつ

hotasm.connpass.com

read-aosa.connpass.com

connpass.com

なんか入門記事向けっぽくScalaをテーマにQiitaで書いたやつ

qiita.com

qiita.com

勉強会での発表

Node.jsでBrainfuckのインタプリタとかJITコンパイラを作った話をLL Diver2014で発表する shigemk2.github.io

Node.jsでEXEコンパイラを作った話をKernelVM探検隊@つくばで発表する shigemk2.github.io

Haskellで8086の逆アセンブラを作った話をKernelVM Nightでする shigemk2.github.io

なんかよくわからないけどC++ネタで歌舞伎座.techでカチコミしてみる shigemk2.github.io

クラスファイル(Scala)についての小噺でKernelVM探検隊と関数型言語の集いでしゃべる shigemk2.github.io

カーネル/VM探検隊 kbkz.connpass.com LL Diver | Dive into Lightweight Languages

余談

勉強会に通うことが多かったので、自転車(TREKのクロスバイク)を買いました。

まとめ

何を成し遂げたかというかといえば、なんだかよくわかりません。 @kanorimon 大先生みたいにPDP-11を極めて一躍有名になった感じでもなく、PDP-11→EXEコンパイラ→Haskell→Scalaとどんどん興味が移り変わっていっていることに驚いています。

無論、勉強会が終わったところで僕の勉強はまだ終わらないので、とりあえず目の前のことに集中するだけです。

第15回 ECMA-262 Edition5.1読書会 まとめ #ecma262

ecma262reading.doorkeeper.jp

第14条 プログラム

Program :
    SourceElementsopt

SourceElements :
    SourceElement
    SourceElements SourceElement

SourceElement :
    Statement
    FunctionDeclaration

1.このProgramのコードは、指定プロローグ (14.1 指定プロローグ)が、 Use Strict 指定を含む当該SourceElementsから成る場合や一部が、 10.1.1を適用した条件から成る場合、strict mode(厳格モード)のコード Programのコードが、strict mode(厳格モード)のコードである場合、SourceElementsは、strict mode(厳格モード)のコードのように次のステップ内で評価され、それ以外は、SourceElementsは、非strict mode(厳格モード)のコードのように次のステップ内で評価される 2. SourceElementsが、存在しない場合には、return (normal, empty, empty) 3. progCxt は、 10.4.1で説明したようにグローバルコードにおける新たな実行コンテキストとする 4. result は、SourceElementsを評価した結果とする 5.実行コンテキスト progCxt を抜ける 6. resultを返す

optionalなのでプログラムは書かれていなくてもいい

gist.github.com

SourceElements : SourceElements SourceElement
  1. headResult は、SourceElementsを評価した結果とする
  2. headResult が、中途完了(an abrupt completion)である場合、 headResultを返す
  3. tailResult は、SourceElementを評価した結果とする
  4. tailResult.value が、 emptyである場合、 V = headResult.value とし、それ以外の場合、 V = tailResult.valueとする
  5. return (tailResult.type, V, tailResult.target)
SE1;SE2;SE3;SE4;
----------- ---
head        tail
------- ---
head    tail
--- ---
head tail

いろいろ書かれていはいるが、ソースコードを上から読んでいって、評価結果を言語処理系に渡している。 (仕様書に書かれてはいないが)上記のような再帰で

SourceElement : Statement
  • Statementを評価した結果を返す
SourceElement : FunctionDeclaration
  • return (normal, empty, empty)
  • 関数定義しただけだったら、emptyを言語処理系に渡す
  • 宣言しただけだったらプログラムに何の影響も与えない
  • 関数を呼び出して初めて関数宣言が意味をなす
  • ただし関数リテラルの形で書かれていたら、代入自体がstatementになるので、そのまま評価される
  • 関数が宣言されていても呼ばれなければ存在しないのと一緒(ので、minifyツールなどで呼ばれていない関数を消すことは出来る)
function a() {
  var a = 1;
}

呼び出したらエラーになるような関数を定義していても呼び出さなければエラーにならない(実行可能かどうかは呼び出さなければわからない) gist.github.com

でも、構文として形式的に正しいかどうかは見ている。形式がおかしかったらエラーになる。

ただし、構文パースで問題ないことと、実行時にエラーになることはまた話が違うが、構文エラーにもならず実行時にもエラーにならないものはインタプリタはエラーは吐かない(consoleに警告を出すことはあるかもしれない) gist.github.com

これもおーけー。ただし、AltJSによってはコンパイル不可能な可能性はある。

gist.github.com

www.webzoit.net

14.1 Directive Prologue と Use Strict Directive

Program (プログラム)や FunctionBody (関数本体)の最初の SourceElement (ソース要素)プロダクション、また、セミコロンに続けて StringLiteral (文字列リテラル・文字そのままの)トークン (字句)全体を構成する並びにある各 ExpressionStatement (式文・式の文)として現れる ExpressionStatement プロダクションの最も長い並び

use strictについてのはなし。

http://blog.niw.at/post/26687866336
blog.niw.at

24-202513.js · GitHubgist.github.com

www.webzoit.net

次回以降

6と5.1の15条を比較しながら

ECMA-262 Edition 5.1を読む

ECMA-262 Edition 5.1を読む