タグ

ブックマーク / constellation.hatenablog.com (31)

  • tumblr reblogging enviroment Advent Calendar 2013 - 17th day - Taberareloo Canary - 枕を欹てて聴く

    特に関係のない UNIX 画像 This is posted for tumblr reblogging enviroment Advent Calendar 2013 17th day 予定地です, 現在進行形で作業しています... すみません...公開しました 3 秒でわかる版 CI によって Taberareloo を commit ごとに自動 build し, Taberareloo Canary として提供します. ここ: https://drone.io/github.com/Constellation/taberareloo/files から taberareloo.crx を download して, Chrome 拡張機能のページ(上記のような)に向かって drag & drop で install することができます. もしくは, ExtensionInstallSou

    tumblr reblogging enviroment Advent Calendar 2013 - 17th day - Taberareloo Canary - 枕を欹てて聴く
    efcl
    efcl 2013/12/18
    Chrome拡張をdrone.ioのartifactで配布(nightly)
  • Polymorphic Inline Cache implementation of iv / lv5 - 枕を欹てて聴く

    This is a blog post for 12/22 VM advent calendar. See http://qiita.com/advent-calendar/2012/vm for more nice blog posts :) この記事は更新中です... 完成しました Introduction ECMA262 engine, iv / lv5 には, Polymorphic Inline Cache(以下PIC)が実装されています. ということで, ここではPIC, 特にLoadPropertyICの実装について記述したいと思います. PICのsystem体についてはかなり多くの場所で記述されていると思うので, ここでは, かなり実践的な方向で記述したいと思います. そのため, 多くの前提知識を要求していますのでご容赦ください. LoadOwnPropertyIC &

    Polymorphic Inline Cache implementation of iv / lv5 - 枕を欹てて聴く
    efcl
    efcl 2012/12/24
    Polymorphic Inline Cacheの実装
  • JSC Array optimization for adding new property - 枕を欹てて聴く

    This is a blog post for 12/6 VM advent calendar. See http://qiita.com/advent-calendar/2012/vm for more nice blog posts :) Introduction ECMA262にとってArrayは最も重要なObjectの1つであり, loop内で高い頻度でアクセスされる性質上, Arrayの最適化はengineの実行速度に多大な影響を及ぼします. ここではJavaScriptCoreの行なっているArrayに対して新しいpropertyを追加する処理の最適化を紹介します. Background ECMA262において, Arrayはliteral形式ならばown propertyを最初から定義できますが, var array = [0, 1, 2, 3, 4]; console.lo

    JSC Array optimization for adding new property - 枕を欹てて聴く
    efcl
    efcl 2012/12/08
    JSCの配列の最適化テクニックについて。 Prototypeを辿らないようなフラグを作っておく、途中の変更とかはGCで検出して直す
  • How to write JS code generator - 枕を欹てて聴く

    esprimaに入りました. 次のversionからesprima.generateで利用可能です. Issue 89 - esprima - Code generator: convert AST to source code - ECMAScript parsing infrastructure for multipurpose analysis - Google Project Hosting JSのpretty printerを作りました. ECMAScriptのparserとしてesprimaを使っていて, 自作のcode generatorがASTから綺麗なJSをprintします. で, 現在はesprima code baseに持って行こうとしています. 将来的にesprimaで使えるようになる予定なので, 使いたい!! という方はお待ちください. operator prec

    How to write JS code generator - 枕を欹てて聴く
    efcl
    efcl 2012/02/04
    esprima.jsでパースしてできたASTから整形されたJavaScriptを吐く
  • constへの異常な愛情, または私は如何にして心配するのを止めてConstDeclarationを愛するようになったか - 枕を欹てて聴く

    JS Advent Calendar, オレ標準コース 1日目, id:Constellation です. あれから1年ですか... 前半で, ES.nextに導入されたDeclarationについてさっと, そして後半でタイトルの説明をします. この文書は, 2011/12/01現在のES5 Engineの実装とES.next draftに基づいています. また, ES.nextの文法がvalidかどうかについては, parserを用意してあるので, 是非ご利用ください. http://constellation.github.com/iv/js/es.next.html Declaration ES.nextでは新たにDeclarationという区切りが入り, LetDeclaration, ConstDeclaration, FunctionDeclarationが導入されました.

    constへの異常な愛情, または私は如何にして心配するのを止めてConstDeclarationを愛するようになったか - 枕を欹てて聴く
    efcl
    efcl 2011/12/05
    constのES5とES.nextについて
  • iv / lv5, ECMA262 5.1th full support - 枕を欹てて聴く

    https://github.com/Constellation/iv iv / lv5というECMA262 5.1th完全準拠を目指したengineを書いておりました (highly inspired from V8, JSC) で, もうほぼ仕様準拠しておりました, が, 正規表現のみJSCREを使っていて, そこだけECMA262と挙動が異なっていることがあり, 「ぐぬぬ」と言っていました. JSCREとは, 昔V8やJSCが使っていたものでIrregexpやYarrに取って代わられる前のもので, この間DartのVM見ていると, libjscreをcompileしていました. おかえりJSCRE! ちなみにJSCREはもともとPCREをWebKitさんがforkして別物に書き換えちゃったものです. ですが, この度一念発起してRegExp Runtime, AeroHand (so

    iv / lv5, ECMA262 5.1th full support - 枕を欹てて聴く
    efcl
    efcl 2011/10/20
    ES5.1フルサポート
  • Let's WeakMap - 枕を欹てて聴く

    ES.nextとして入っていて, ECMAScript 6にも入りそうな気配がするWeakMap. という訳で. WeakMapとは WeakMapとは, harmony:weak_maps [ES Wiki] keyへの参照が弱参照 keyが任意のObject valueはなんでもあり というものです. 弱参照であるため, WeakMapのkeyに指定されたObjectが, weakなreferenceからしか参照されていなかった場合, GCに回収されます. また, WeakMapという名前が隠しがちですが, どちらかと言うと主機能は任意のObjectがkeyとして取れるということでしょう. var map = new WeakMap(); var obj = {}; map[obj] = "OK"; // このとき, toString()されたりしない. Objectをとれる 従来のO

    Let's WeakMap - 枕を欹てて聴く
    efcl
    efcl 2011/10/02
    WeakMapについての解説 利用方法、JavaScriptエンジンの実装について
  • サイボウズ・ラボユース中間成果報告会, LL Planets - 枕を欹てて聴く

    サイボウズ・ラボユース中間成果報告会 https://job.rikunabi.com/2012/company/blog/detail/r646010018/42/ というものがありまして, そちらで最近やってきたこと(iv / lv5)と, 現在ユースの方でやらせていただいていることについてお話させていただく機会がありますー. ユースの方でやらせていただいていることは明日に完成しているかどうか怪しいのですが...(なんか昨日夜にちろっとようやく命機能が動きました) 15分近くの時間のうち, 完成度に応じて, そちらの方を話す割合が増えます.(逆に完成が近づいていないと, lv5の話が増えます) 「ロボット制作を支援するログ解析プログラムの開発」 「世界最速の正規表現JITエンジンの実装」 「JavaScriptによる型推論器の実装と可視化」 「世界で一番仕様に忠実なJavaScrip

    サイボウズ・ラボユース中間成果報告会, LL Planets - 枕を欹てて聴く
    efcl
    efcl 2011/08/17
    見に行く
  • Taberarelooのタグ補完について - 枕を欹てて聴く

    Taberarelooは基的にid:ConstellationによるTombloo experimental branch on Chromiumだと思ってもらって結構で, 面白いと思ったことを放り込みます. そのためbugがでて急遽修正というreleaseも多いのですが... また一方で tomblooと違うというところは大抵bugであるとみなしてもらって結構です. Twitter / Constellation: @you999 何かbugありましたかー? 基的に ... と公言していたりするのですが(Chromeでは実現不可能とかいう部分以外に関して), Tomblooと意図的に差別化している部分があります. それがタグ補完部分です. 今回logicをもうちょっと変更しいろいろ面白くなったので記事にしました. 補完, 何やってるの? Taberarelooの補完はAbbrevia

    Taberarelooのタグ補完について - 枕を欹てて聴く
    efcl
    efcl 2011/06/24
    migemo, アルファベットから日本語タグを補完 \u0000と\u0001を使い重複文字、配列、高速化
  • vs UTF-8, UTF-16, UCS4 - 枕を欹てて聴く

    前置き おはミルキィ! ChromeFullFeedが公開停止になった話を前置きとして書いていたのですが, あまり関係がないのと, 長くなりそうになってきたので, 別の記事に分けました. http://d.hatena.ne.jp/Constellation/20110530/1306701693 概要 という前置きで. ECMAScriptと切っても切れない文字コード, UTF-16. iv / lv5はUnicode変換のためにICUに依存していたのですが, UTF-8 <=> UTF-16なら何とか自分でも書けるのではないかと思い, Unicode Converterを書きました. これでlv5の依存はlibboost, libgc (Boehm GC)に減りましたー. Unicodeの変換の教授, bugつぶしにおいて, id:masa141421356 さんに非常にお世話になりま

    vs UTF-8, UTF-16, UCS4 - 枕を欹てて聴く
    efcl
    efcl 2011/05/30
    ユニコード、UTF-8から一文字ずつ取り出す方法。先頭のバイト値 UTF-8 => UCS4Add => UTF-16
  • subsetじゃない悲しい話 (JSON編) - 枕を欹てて聴く

    https://tc39.github.io/proposal-json-superset/ JSON編以外はありません. Edge case "JSON: The JavaScript subset that isn't Timeless" URL 2011-05-16 15:49:26 via PNBT このような記事が JSON: The JavaScript subset that isn't — Timeless つまり, LineTerminatorに\u2028 / \u2029が含まれない(JSON)ので, StringLiteralがうっかりJSONの方が許容範囲が広がってしまっているという話です. eval('"\u2028"'); // SyntaxError JSON.parse('"\u2028"'); // OK 自作ECMAScript Engine, lv5

    efcl
    efcl 2011/05/17
    JSONの仕様について "JSON: The JavaScript subset that isn’t?Timeless" の話
  • Taberareloo + upload from cache - 枕を欹てて聴く

    というわけでversion 2.0.13にて, Taberarelooにupload from cache相当を実装しました. 結果, ある種のreferer checkを行うserviceの画像がTumblrにpostできたり, なにより, screen captureの結果がHatena Fotolife以外のTumblrにpostできるようになりました!(上図) これで手軽にscreen captureを撮ってtumblrにuploadできますね. Chrome Web Store - Taberareloo upload from cacheは実装されないのかと言われてきましたが, なんというか技術的に可能になったので実装しました. 楽しいですね! 正確にはcacheからuploadしているわけではないのですが, 一応これでどうでしょうか? なんかダメなserviceとかあったら,

    Taberareloo + upload from cache - 枕を欹てて聴く
    efcl
    efcl 2011/04/11
    Chrome ExtensionでHTML5 APIをいろいろ XHR lv2 FormData,FileSystem API BlobBuilder(arraybuffer),dataをバイナリへ
  • Function.prototype.bindは何がいいのか - 枕を欹てて聴く

    ES5からFunction.prototype.bindが入りました. これに準ずるものは数々のFrameworkで提供され続けてきたので, あまり馴染みの無さはないのではないでしょうか. このFunction.ptototype.bindは実はとても面白いので. 結論から言えば, Function.prototype.bindはtarget functionのConstructに完全に移譲するのでConstructorの引数束縛が行えます. またConstructor callに対して配列を渡すapply形式のものといったapplyConstructorやcallConstructorをbindを使って実装することができます. 基 Function.prototype.bindは基的にはthisとargumentsに特定の値を束縛する関数です. bindは第一引数にthis, 次から

    Function.prototype.bindは何がいいのか - 枕を欹てて聴く
    efcl
    efcl 2011/01/13
    ES5でのbindの動作についての解説。 コンストラクタ関数に対してbindが出来るような移譲が行われる。
  • ES5, Property Descriptor解説 - 枕を欹てて聴く

    JavaScript Advent Calendar 2010 6日目のid:Constellationです. ECMAScript5になって大きく変更されたといえば, strict mode, early error, Object extras, そしてProperty Descriptorの概念です. ということで今回はES5 PropertyDescriptorについてまるっと分かってしまおうということで. Property Descriptorとは JavaScriptのObjectは事実上Hash Tableです. しかし, key -> value という対応でHash Tableに格納されているのかといえばそうではありません. なぜなら, EcmaScriptにはgetter / setterやattributeが存在するからです. // getter / setter v

    ES5, Property Descriptor解説 - 枕を欹てて聴く
    efcl
    efcl 2010/12/07
    Property Descriptorについての解説。 Enumerable,Configurable,Writableの意味。 Object.definePropertyとObject.createの使い方。 汚染しないオブジェクトの拡張方法を定めたEMCA5の使い方
  • XPathで配列にしてしまったあとから特定要素を削除する。 - 枕を欹てて聴く

    LDR は、アイテムを繰るのの基準としてH2要素を使っている。RSSしか読まないんだからそれで大丈夫なんだけど、LDR Full Feedとかで要素を付け足すと、H2があると、意味もないところでとまってしまう。 そこで今までは、HTMLDocumentにする前に、正規表現で、 // drryさんがGR Full Feedで作成なさったものです。ものすごくきれいな正規表現。 if (REMOVE_SCRIPT) text = text.replace(/<script(?:\s[^>]+?)?>[\S\s]*?<\/script\s*>/gi, ""); if (REMOVE_H2TAG) text = text.replace(/<h2(?:\s[^>]+?)?>[\S\s]*?<\/h2\s*>/gi, ""); ってやってたんです。 が、これによるREMOVEをtrueしていると

    XPathで配列にしてしまったあとから特定要素を削除する。 - 枕を欹てて聴く
    efcl
    efcl 2010/11/26
    filter関数
  • Re-Implement ECMA262 5th Engine@Firefox Developers Conference 2010 - 枕を欹てて聴く

    LTで話してきました. Constなんとか Constellation です. Firefox Developers Conference, 素晴らしい方々とお会いできて大変楽しかったです. ありがとうございました. Re-Implement ECMA262 5th Engine - Constellation Scorpius これが当日のLTの資料です. 言い訳タイムとしては, 4分になったので, 技術的なこと含めてある程度話すには衝撃的な早口と冗長なslideの吹っ飛ばししかないなと決意したというのが結論です. 結果非常に分かりづらい形になってしまって申し訳ないです. 資料なのですが, もともと5分でしゃべるためにかなり端折っていて, しかもさらに端折ったので, 例えばECMAScript strict modeの違反のexampleが6例中の1例しか紹介出来ていなかったりします.

    Re-Implement ECMA262 5th Engine@Firefox Developers Conference 2010 - 枕を欹てて聴く
    efcl
    efcl 2010/11/21
    ECMA262 5thとミルキーホームズ
  • ECMA262 5th specification for Kindle - 枕を欹てて聴く

    強烈な物欲によってKindleを購入し, 楽しくて仕方ないです. さっそくいろいろ読んでいます. 青空文庫も読めたり(pdf化), サクサク動いて, とても軽い + 小さい. とっても楽しい. が, 事前に聞いていたように, 確かに字の小さなPDFを見る際にはなかなか厳しい. 特に, (誰もが)大好きな ECMA 262 5th specificationをみようものなら, 非情な結果になります. しかしよく考えれば, Annotated ES5 というHTML versionの物もあるのです. 「今がんばらないで, お前は何のためにHTML勉強してるんだ...」 ということで様々なtoolを使いつつ, epubにしたりしたり, rubyで目次をparseして作成したり, 色々して, Kindle用に自分ではそこそこ満足できるES5 specを作りました. http://github.co

    ECMA262 5th specification for Kindle - 枕を欹てて聴く
    efcl
    efcl 2010/11/04
    Kindleで読めるECMA5の仕様書。epub、mobi
  • Math.random - 枕を欹てて聴く

    JavaScriptのMath.random()のばらつき具合。 『JavaScript Math.random Test』 URL 2010-10-06 17:21:54 via web で気になったので. ばらつきは上記のページで試してみるとして. まず, ES5thのMath.randomはimplementation-dependentです. 15.8.2.14 random () Returns a Number value with positive sign, greater than or equal to 0 but less than 1, chosen randomly or pseudo randomly with approximately uniform distribution over that range, using an implementation-

    efcl
    efcl 2010/10/07
    Math.random()の各JavaScriptエンジンによる実装まとめ。
  • JavaScript Syntax探訪 - 枕を欹てて聴く

    blogめったに書いてない... 2.5年で110件... 前々からJSのScannerを読んだりするのが楽しかったのですが, id:miya2000 さんからの「commentを削除するprogram」という話が出たときに, 結局JSのlexerというものは単体では生成できずParserと密着している(主にRegExpとRegExpとRegExpのせいです)ということがわかり, 自分でも書きたいという考えが浮かんできてC++でずっと書いていました. AST構築までできて, jqueryなどをparse成功 + json形式のtreeにシリアライズする程度になったのですが, せっかくなのでLLVMへのbridgeとか検討しています. LLVMおもしろいー. Constellation/iv · GitHub で, Constellation's gist: 387832 — Gist くら

    JavaScript Syntax探訪 - 枕を欹てて聴く
    efcl
    efcl 2010/05/21
    JSのLexer / Parser 構文解析、comment削除、iv / js。 コメントと正規表現の区別について
  • Function#name - 枕を欹てて聴く

    知らなかったのだけれど, こんなのできるんですね. 普通にerror stackをparseしてやろうとか思ってしまっていた. function debug(){ var funcname; if(arguments.callee.caller){ funcname = arguments.callee.caller.name; } if(!funcname) funcname = "anonymous function"; console.log('"'+funcname+'": '+Array.prototype.slice.call(arguments).join(', ')); } Function.name - JavaScript | MDN nameはFunctionExpressionかもしくはFunctionDeclarationのときに指定したIdentifierがそれ

    Function#name - 枕を欹てて聴く
    efcl
    efcl 2010/04/03
    arguments.callee.caller.nameで実行関数名