2012-01-01から1年間の記事一覧

Dart (frogc) でJavaScriptの機能を直接呼ぶ方法

Dart specには含まれていないようだが、処理系によってはnativeキーワードでJavaScriptを参照できるようだ*1。ただし、使いたいメソッドすべてに宣言が必要なので多少の手間がかかる。 // JavaScriptのクラスというかオブジェクトを参照する // 'Math'はJSの…

How Dart classes work as JS

Dartのクラス機構はどんなものか調べた記録。DartはCoffeeScriptよりも遥かに複雑だが、継承メカニズムはほぼ同一だった。 DartからJSにコンパイルされた結果は長いので肝心なところだけ。 function $inherits(child, parent) { if (child.prototype.__proto…

How CoffeScript classes work

CoffeeScriptのクラス機構はどんなものか調べた記録。コード量は少ないが洗練されており効率も良いようだ。http://coffeescript.org/#classesさて、元のcoffeeスクリプトは単にクラスとサブクラスの定義をするだけのもの。 #!/usr/bin/env coffee class Anim…

コマンドとしてもライブラリとしても動くnode.jsスクリプト

Perlではモジュールとコマンドの拡張子が違うのであまりやりませんが、node.jsスクリプトだとたまに必要になるので備忘録として。 process.argv[1]がnode(1)に渡されたスクリプト名、__filenameがスクリプトファイルの名前なので、これが一致したときはメイ…

RubyのMethod#source_locationをPerlで

[追記]Cside先生がUNIVERSAL::source_location_forとしてリリースしておりますのでcpanmでご利用ください![/追記]asakusa.rbでsource_locationというメソッドを教えてもらいました。 それによれば、Rubyのメソッドオブジェクト(UnbountMethod, Method, Proc…

JSにコンパイルされたDartがPerlより速い件

Dartのインストールが簡単になっていたので試してみたところ、Perlよりも高速だった。なにこれ悔しい。Dart: void main() { final t = new Stopwatch(); t.start(); final a = new List<int>(); for(var i = 0; i < 1000000; ++i) { a.add(i); } for(var i = 0; i </int>…

JSでi++と++iどっちが速い?

結論から言うと、現在のChromeのみをターゲットにして最適化するという特殊なケースを除き*1、どちらでも変わらないといえます。[追記] window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.g…

JavaScriptのthisの扱いが難しすぎる件

[再々追記] (o.f = o.f)()の結果は右辺値・左辺値というルールで説明できるようです。コメント欄参照のこと。 [/再々追記] [再追記] window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getE…

最近興味があるもの in 2012/2

調べたいと思っているもの。プログラミング言語処理系が多いようだ。 Dart - Programming language for browsers Rust - Programming language for system tool Google Web Toolkit Java to JavaScript JSIL .NET to JavaScript Emscripten LLVM to JavaScri…

非同期処理を直列化する in ActionScript

非同期処理を同期処理のように直列化したいということはよくあることで、async.jsやjsDeferredのようなライブラリがある場合ならそれを使えばよいが、言語によっては信頼できるライブラリがなかったりする。 そういう場合は自力で直列化するコードを書く他な…

ActionScript/FlexUnitで非同期テスト

FlexUnit4はActionScriptの開発環境であるところのFlash Builder組み込みのテストフレームワークなのでこれでテストを書きたいところだが、非同期コードのテストがなかなか厄介だったのでメモしておく。まず、テストを開始する前に非同期で初期化処理(例え…

「PHPの最初のバージョンはPerlで書かれていた」は都市伝説?

[追記] どうやら、最初の個人用のホームページ管理スクリプトがPerlで書かれ、後にそれをCで書きなおしたものを"Personal Home Page Tools" 1.0として公開、というのが真相のようだ。 つまり、PHPの最初のバージョンがPerlで書かれていた、というのは都市伝…

node::console.logの実装

console.log は printf 相当の機能が一部ある - hogehoge @teramako ブクマでも指摘がありますが、nodeのconsole.log()にはutil.format()が使われています。 このuti.format()はsprintf(3)風の機能も持っていますが、それ以上にオブジェクトのダンプ機能が嬉…

JavaScriptでバイナリを読むjDataView

どうしたものかと思っていたところ、typed arrayの仕様の中にDataViewというものがあるようだ。 DataView - JavaScript | MDN ECMAScript 2015 Language Specification – ECMA-262 6th Edition しかしポータビリティはよくないので、当面はpure JSによる実装…

正月なので #発火村 に参加してきた

国境の長いトンネルを抜けると、そこは雪国だった。 正月発火村 #発火村 - Togetter 群馬の秘境、水上でハッカソンに参加してきた。ハッカソンではClion.JSというECMA-335*1の仮想マシンのJavaScript実装を作りたかったのだけど、作業量的に一日二日でできる…

ある値を非同期で取ってくる→その値を使ってさらに非同期処理というのをJSDeferredでする

ユースケースとしては、テストの最初にあるシステムにログインしてユーザIDなりセッションIDなりを得て、それでもって残りのテストを実行するみたいな処理です。 これ、素直にJSDeferredでDeferred.next(...).next(...)と続けても、このnextのコールバックは…