トップページtech
985コメント300KB

TypeScript part1

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆9Zst2CqO/Y 2012/10/02(火) 23:18:47.60
http://www.typescriptlang.org/

TypeScript is a language for application-scale JavaScript development.
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
Any browser. Any host. Any OS. Open Source.
0048デフォルトの名無しさん2012/10/04(木) 01:24:47.19
素のJSじゃやってらんねーからいろんなところが代替を出してるんでしょうが。
Javaも似たような状態だな。
0049デフォルトの名無しさん2012/10/04(木) 02:28:29.51
>>47
dartやgwtより、こっちの方が魅力的。jsのスーパーセットになってる。
0050デフォルトの名無しさん2012/10/04(木) 02:45:03.69
口をそろえて言ってるが、噴飯モノだよなあ
そもそも使ってから褒めろよと
0051デフォルトの名無しさん2012/10/04(木) 03:30:45.23
jsのスーパーセットで既存のライブラリも使えるから試そうと思うけれど、
dartなんて試そうなんて気すらおこらなかったよ
0052デフォルトの名無しさん2012/10/04(木) 03:36:16.27
jsよりはdartの方が遥かに優れてるよ
だからjsのスーパーセットとか言われたら不安しかない
0053デフォルトの名無しさん2012/10/04(木) 03:42:04.81
なわけない。dartなんてjava系統で動的言語の柔軟性なんて欠けている
0054デフォルトの名無しさん2012/10/04(木) 03:44:43.62
http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f#samples%2fnode%2fnode.d.ts

sample の node の機能を利用した例をみれば
haxeよりは 元の js のコードに近くはなる綺麗だけど
.d.ts ファイル必須。

http://www.typescriptlang.org/Playground/
playground だと
Unable to load reference
"$model1"
でエラーになるけどコンパイルには成功してるのかな?
コード生成されてる

コンソールからだとTypeError: Object #<Object> has no method 'existsSync'
でコンパイルできない。

https://github.com/madrobby/vapor.js/pull/60

各種ライブラリの port 待ち。さすがvapor.js
0055デフォルトの名無しさん2012/10/04(木) 05:40:16.87
>>53
typescriptこそJava並なみのヘビー言語だから心配すんな
0056デフォルトの名無しさん2012/10/04(木) 06:28:30.70
とうとう勝負を決する時が来たようだ、LL War
0057デフォルトの名無しさん2012/10/04(木) 06:59:38.96
スクリプトなのにヘビーとはこれいかに
0058デフォルトの名無しさん2012/10/04(木) 09:57:42.40
>>56>>57
いちいちコンパイルしないと使えないしLLじゃねーよ。糞言語
0059デフォルトの名無しさん2012/10/04(木) 10:09:56.42
.net や jvm ではバイトコードを生成して環境差をそこで吸収してるけど
javascriptだと souce map というのがそれに当たるかな

直接ES3.1, ES4, ES5, ES6 向きの
生成コードを出力するというコンセプトはないと思う。まずは souce map に落としてそこで吸収する流れかと。

https://github.com/ryanseddon/source-map/wiki/Source-maps:-languages,-tools-and-other-info
source map generatorの使い方
http://d.hatena.ne.jp/gfx/20120408/1333892223

コンパイラの機能をリフレクションで利用したい
とか .net の ironpython やら ironruby で一時可能だったけど(windows環境以外で

さいきんはこんなかんじが流行なんかな
車輪の再発明という気も多少するが

Does TypeScript provide an explicit Public API for NodeJS Module Access?
http://stackoverflow.com/questions/12717309/does-typescript-provide-an-explicit-public-api-for-nodejs-module-access
http://gkz.github.com/LiveScript/

Livescript は coffeeの改良系の実装らしい…コンパイラ技法屋さん楽しそうやw
0060デフォルトの名無しさん2012/10/04(木) 10:31:17.48
>>58
これを用いてJavascriptが勝利すると言う事だよ
馬鹿か?お前
0061デフォルトの名無しさん2012/10/04(木) 10:52:40.34
Javascriptが糞すぎてどうしようもない
0062デフォルトの名無しさん2012/10/04(木) 13:40:18.04
コンパイラまだーチンチン
0063デフォルトの名無しさん2012/10/04(木) 13:58:41.35
>>62
最新のブラウザにはJITコンパイラが入ってるから、単体のコンパイラなんか、もういらないと思う。
0064デフォルトの名無しさん2012/10/04(木) 14:37:22.53
>>62
http://blog.markrendle.net/2012/10/02/the-obligatory-typescript-reaction-post/
zeh says:
October 2, 2012 at 1:18 pm
Re: classes ? one of the problems is that ES6 doesn’t seem to have a single
‘class’ standard. I haven’t gone that deep into the proposal, but TypeScript
seems to use the “Minimal classes” proposal
(http://wiki.ecmascript.org/doku.php?id=strawman:minimal_classes) not the main class one.

How final is Harmony’s proposal? It seems to be difficult to find information
on that. I hope Microsoft is not creating a new JScript.

Reply
zeh says:
October 2, 2012 at 1:20 pm
Actually, on second thought, TypeScript seems to use the “Maximally Minimal”
proposal instead
(http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes).

Ariya Hidayat ?@ariyahidayat
Need class and module? Use #Harmony and compile it
(same trick like in #TypeScript), see
http://ariya.ofilabs.com/2012/06/esprima-and-harmony-module.html and
http://ariya.ofilabs.com/2012/09/javascripts-future-class-syntax.html

コンパイラの前にまずはES6言語仕様の策定作業。
まだクラスの定義も定まってない。あくまでproposalの段階なのだ
0065デフォルトの名無しさん2012/10/04(木) 14:47:31.27
Cは規格なんか決まる前にコンパイラ出たけど?
0066デフォルトの名無しさん2012/10/04(木) 16:06:03.64
コンパイラってもう出てるよな?
こいつら何の話してんだ?
0067デフォルトの名無しさん2012/10/04(木) 19:22:51.64
とりあえずCoffeeScriptとDartが一瞬でオワコン化したという解釈でおk?
0068デフォルトの名無しさん2012/10/04(木) 19:23:29.40
あとはJavaScriptが「お前はクソだ。使い物にならん」と
四方八方からタコ殴りにされているという認識
0069デフォルトの名無しさん2012/10/04(木) 19:25:56.71
長所:JavaScriptがそのまま通る
短所:JavaScriptがそのまま通る
0070デフォルトの名無しさん2012/10/04(木) 21:43:16.74
Standard ECMA-262 5.1 Edition / June 2011
http://ecma-international.org/ecma-262/5.1/

C++/CLI 言語仕様書 西暦2005年12月 初版
http://vene.wankuma.com/ecma372/19_1_5_class_member.aspx#SS.19.1

typescript はプリプロセッサに近いものだから C というか C++に近い立ち居地。
ただこの web版 の C++ は現時点ではどれが正解とも云い難い。

https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS

結局デファクトとったとこ&さまざまな試みによる知見に元づく合意
その記法が標準になる
0071デフォルトの名無しさん2012/10/04(木) 21:56:54.68
結局のところJavaScriptはそのままで普及しているので
それに準拠したやり方が最良なんだろうな。
0072デフォルトの名無しさん2012/10/04(木) 22:45:48.78
JSしか書けないウンコプログラマだけが
JSで問題無いと思ってる
0073デフォルトの名無しさん2012/10/04(木) 23:18:41.73
いろんな言語で幅広く仕事をしたが
結局のところ、言語の良し悪しは
大した問題ではない。
0074デフォルトの名無しさん2012/10/04(木) 23:25:12.10
じゃあアセンブラで業務アプリ書いて
0075デフォルトの名無しさん2012/10/05(金) 00:00:20.72
>>73が使った言語: Java, VB, Perl, PHP, JS
0076デフォルトの名無しさん2012/10/05(金) 00:50:23.87
>>73
>>73が使った言語:�lisp,�c++,�c,�haskel,�c#
0077デフォルトの名無しさん2012/10/05(金) 01:28:13.01
でもjavascriptで開発するとソース丸見えじゃね?
0078デフォルトの名無しさん2012/10/05(金) 01:36:09.64
サーバーありきだからどうでもいい
0079デフォルトの名無しさん2012/10/05(金) 03:33:53.11
クライアントアプリケーションでJavaScriptを組み込んで使えると便利そう
scheme 系とか組み込みで地味に利用されてる

でもエンジンのAPIが組み込めるように公開されてる訳ではないので
IE9以降がメインターゲットなんだろうかな

Qtscipt は ES3.1
http://qt-project.org/forums/viewthread/5381
ECMA-262 (5th|Harmony|next) で宣言された プロトタイプ の拡張はアリ?ナシ?
http://qiita.com/items/3a70b5a62b6c87379c77
JScript でサポートされる機能
http://msdn.microsoft.com/ja-jp/library/49zhkzs5(v=vs.80).aspx

How to call the compiler from .NET?
http://typescript.codeplex.com/discussions/397810

結局 MS Script Control でやれとなる。(当然エンジンはES3.1相当のJSctiptの構文のみが使える
エンジンは非公開だからなぁ…ブラウザ対応次第かと(特にモバイル
0080デフォルトの名無しさん2012/10/05(金) 04:16:11.04
>>73
アセンブリャーからObjective-Cまでいろんな言語で幅広く仕事をしたが
言語の良し悪しは大した問題ではない(APIや周辺コミュニティのほうが重要)という通念を覆すほど
JavaScriptはクソ

以前からずっとバッドノウハウを量産して喜んでた界隈の連中を横目で眺めつつ
おかしいと思ってたんだよ。
0081デフォルトの名無しさん2012/10/05(金) 04:27:02.48
LL言語マンセーだの動的言語マンセーだの喧しいからそういうものかと思ってたが
HTML5HTML5うるせーから仕方なく1ヶ月程度でキャッチアップしてみたら
お前らこんなどうしようもない言語と環境で仕事してたの、としか言いようがなくて

要はろくに大規模開発したことのない、レベルの低いJavaScripterどもが
駄サイクルを作ってたんだなという認識ですね。
0082デフォルトの名無しさん2012/10/05(金) 04:32:08.45
機能もTypeScript登場で「JSの時代!」という無邪気なツイートを見かけたが、
CoffeeScript、Dart、JSX、Haxe、TypeScript、その他無数の変換言語↓
https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS
これら全部現行のJavaScriptを否定しに来てるというのがまだ理解できないようでは終わっとる

JSが基幹言語?その逆で、ただの土管扱いされてるんだよ。
使いもんにならん言われてるんだよ。わざわざ新言語を量産してまで。

今回、あのHejlsbergにまでノーと言われたんだよ。
0083デフォルトの名無しさん2012/10/05(金) 06:54:50.23
cにclassとinterfaceとgcとarrayとhash付ければ
それでよかったんだよ、IDEも豪華に対応できたんだよ
言語開発者はみんな余計な物付けすぎ
0084デフォルトの名無しさん2012/10/05(金) 08:23:06.55
>>81
典型的な一ヶ月程度勉強しただけの
やつの感想ですねw
0085デフォルトの名無しさん2012/10/05(金) 08:59:31.24
Javascriptはこんなクソコードが通るからゴミ


function f(x, y) {
    return x + y;
}
alert(f(1, "23")); # 123




なお、Typescriptで型を付けても通る(暗黙の型変換)

function f(x: number, y: string) {
return x + y;
}
alert(f(1, "23"));
0086デフォルトの名無しさん2012/10/05(金) 09:23:17.34
C#でもJavaでも通るよ
0087デフォルトの名無しさん2012/10/05(金) 09:35:19.35
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
http://kangax.github.com/es5-compat-table/

javascript 1.8.5とかガンガン攻める姿勢は買ったげる
でも ie8 軒並みアウトなんや
0088デフォルトの名無しさん2012/10/05(金) 09:42:02.14
MSと違って規格がポシャったら互換性切っても怒られないからな
0089デフォルトの名無しさん2012/10/06(土) 00:03:37.41
>>86
C#もJavaも糞言語じゃん
0090デフォルトの名無しさん2012/10/06(土) 00:18:37.03
>>89
じゃあお前の好きなクソ言語の名前言ってみな。
それがクソかどうか判断してやるからさw
0091デフォルトの名無しさん2012/10/06(土) 01:06:52.73
ドカタの判断 = 俺に使いこなせない言語はクソ
0092デフォルトの名無しさん2012/10/06(土) 02:22:41.18
使いこなせないんじゃない。
ドカタ言語をあえて選ばないだけだ。
0093デフォルトの名無しさん2012/10/06(土) 06:11:05.60
JSを使うくらいならTypeScriptを使ったほうがマシというだけで、JS以外の言語より良いという話ではないよ
それにまだ未完成品だし
0094デフォルトの名無しさん2012/10/06(土) 10:59:35.49
言語の良し悪しは、言語仕様よりも、言語環境できまる。

実行環境の多さ、ライブラリの多さ、ノウハウの多さ、
書籍の多さ、提供会社の多さ、使用ユーザーの多さ、などなど。

それがわからない奴は、どうして良い言語が普及しないんだ!と
悩むことになる。
0095デフォルトの名無しさん2012/10/06(土) 11:07:30.37
JSはバッドノウハウの塊だから決して良いとは言えない
ただデファクトスタンダードを取ったというだけ
これは市場が選んだわけではない。勝手に決められて嫌々ながらも従わざるを得なくなった
従いたくない人たちが魔改造を繰り返してる
0096デフォルトの名無しさん2012/10/06(土) 11:25:54.39
バッドノウハウってなんのこと?

Perlでクラスを作るにはいろんな方法があります。
これがバッドノウハウです。みたいな話?w
0097デフォルトの名無しさん2012/10/06(土) 13:28:03.37
http://stackoverflow.com/questions/12756423/is-there-an-alias-for-this-in-typescript

lambda式内で this 参照はできないんかな…
0098デフォルトの名無しさん2012/10/06(土) 13:41:26.38
>>94
言語が普及するか否かは、言語の良し悪しでは決まらない


普及する = 最底辺の馬鹿でも使える、が大前提だからね
0099デフォルトの名無しさん2012/10/06(土) 14:03:38.71
>>98
言語を馬鹿にしているのか、
それを使ってる人を馬鹿にしているのか。
はっきりさせていい?

お前が馬鹿にしているのは、使ってる人であって言語じゃないよね。

普及した優れた言語。
それは馬鹿でも使えるが当然天才でも使えるんだよ。

お前が馬鹿にしているのは、天才が使っている優れた言語、ではない、

単に馬鹿でも使えることが、悔しいんだ。
なぜだろうねw
0100デフォルトの名無しさん2012/10/06(土) 14:28:40.06
で、Javascriptは糞、ということに関してはコンセンサスとれてますよね。
まさかWeb2.0だAjaxだHTML5とかいうバズワードでノセられた奴が強弁してないよね。
0101デフォルトの名無しさん2012/10/06(土) 14:29:38.54
>>100
お前がJavaScriptとライブラリをごっちゃにしてるってことはよくわかったよ。

馬鹿が言った言葉は、やっぱり馬鹿だってわかるなw
0102デフォルトの名無しさん2012/10/06(土) 15:18:00.94
バズワードをガン無視してる俺かっけーw
0103デフォルトの名無しさん2012/10/06(土) 17:55:07.32
無能すぎて食って行くだけで必死の奴は
仕事にありつけそうな言語使えば良いよ
0104デフォルトの名無しさん2012/10/06(土) 18:03:58.51
デブでもおばはんでも乗れるママチャリが普及してるからって
ロードレーサーにママチャリ乗れっていう馬鹿はいない
0105デフォルトの名無しさん2012/10/06(土) 18:07:43.57
近所のコンビニにライダーブーツ履いてNS400に乗って行くんだ
0106デフォルトの名無しさん2012/10/06(土) 18:15:57.46
ところが原付になんでもやらせようとしだすから
0107デフォルトの名無しさん2012/10/06(土) 18:29:01.76
Typescriptは原付を改造パーツでチューンナップしようって発想
改造しても所詮原付は原付
0108デフォルトの名無しさん2012/10/06(土) 20:41:39.23
はっきりいって、c++とhtml5,jsだけで良いよね
実装が増える毎にVMの中のヒトたちが対応しきれない悪寒
0109デフォルトの名無しさん2012/10/06(土) 20:49:42.85
お前よりもVMの中の人達は優秀。
対応しきれないのはお前だけ。
0110デフォルトの名無しさん2012/10/06(土) 20:50:16.95
>>108
>>103
0111デフォルトの名無しさん2012/10/06(土) 21:01:43.24
>>85
型付けても通るとかダメダメじゃん
0112デフォルトの名無しさん2012/10/06(土) 21:21:09.30
組み込みの文字列連結がある言語なら一番普通の動作だろ
0113デフォルトの名無しさん2012/10/06(土) 21:30:01.28
型付けてるんなら x + y; の挙動は
コーディング時に明確に予測できるはずだから何の問題もないだろ
その程度の言語仕様も知らずに使える言語が欲しいってことか?
0114デフォルトの名無しさん2012/10/06(土) 21:40:08.37
>>111
なんで通らないと思ったの?
0115デフォルトの名無しさん2012/10/06(土) 21:41:49.61
>>112
え?
0116デフォルトの名無しさん2012/10/06(土) 21:45:19.13
動的言語で普通この手の話で問題視されるのは「結果が予測できないこと」なわけで
yの内容によって文字列連結になったり数値加算になったりするなら問題だが
そうでなくて挙動が完全に予測できるんなら全く問題ない
0117デフォルトの名無しさん2012/10/06(土) 21:46:17.70
暗黙の型変換の話であって
動的言語とか全く関係ないんだが
0118デフォルトの名無しさん2012/10/06(土) 21:49:23.06
文字列とその他の+ではその他の方を
文字列に変換してから連結する仕様になっている言語はかなり多いからごく自然なことだが
暗黙の変換だろうが言語仕様知ってりゃ予測できるだろ
0119デフォルトの名無しさん2012/10/06(土) 21:55:11.18
つーか、ただの演算子オーバーロードでは?

文字列.add(文字列)
文字列.add(数値)

addメソッドがオーバーロードされてるのと同じ事だろう。

型の問題っていうのは、互換性がない型、オーバーロードも定義さていないもの、
無関係のものを代入したら動かないのに、それが実行されるまで
わからないってのが問題なのに。
0120デフォルトの名無しさん2012/10/06(土) 21:58:45.78
言語仕様の範囲ならどんな振舞いだって原理的に予測可能だわな
0121デフォルトの名無しさん2012/10/06(土) 22:00:55.75
>>119
むしろ動いちゃうのが問題
>>85で引数に型指定しない場合だと、x, yの内容によって+の挙動が全く異なってしまう
さすがに+使うときは、文字列連結か数値加算かどちらか一方しか期待してないだろうから、
予期しない動作によるバグの原因になる。
型を指定するなら何の問題もない。
0122デフォルトの名無しさん2012/10/06(土) 22:26:37.51
http://www.typescriptlang.org/Playground/

上で遊んでみたんだけど、まだ型推論は全然だね
こんなコードが通るし

function foo() : number { return 1; }
function bar() : string { return "23"; }
function baz(f, g) { return f() + g(); }
function hoge() : number { return baz(foo, bar); }

でもMSはF#を作れるところだし、今後に期待ってところか
0123デフォルトの名無しさん2012/10/06(土) 22:37:34.93
それってC#で言えば
private var func(){...}
で型推論してくれよって話じゃないか。
0124デフォルトの名無しさん2012/10/06(土) 22:47:46.52
>>122
型推論はAIじゃねぇよ。
どちらでも取れる問題の
正解を出せなんて不可能な話。
0125デフォルトの名無しさん2012/10/06(土) 23:10:28.55
どちらでも取れる?
hoge()の戻り値はstring以外ありえんだろ
0126デフォルトの名無しさん2012/10/06(土) 23:12:02.77
>>125
どこかでオーバーライドするかもしれんだろ。
windows.hoge = function () {return 123}
0127デフォルトの名無しさん2012/10/06(土) 23:14:24.55
>>126
>>122でstring返す関数にnumberって型書いてエラーにならないのと
何の関係があるのそれ
0128デフォルトの名無しさん2012/10/06(土) 23:16:05.29
>>126
それは無いものと考えないと静的解析の意味無い
ジェネリックには対応する予定らしいからもうちょっと型推論も強力にはなるんじゃないの
0129デフォルトの名無しさん2012/10/06(土) 23:21:13.60
上はエラーになって下がエラーにならないんだから、もうね...

function f() : number { return 1 + "2"; }
function g() : number { return ((x,y) => x + y)(1, "2"); }
0130デフォルトの名無しさん2012/10/06(土) 23:25:25.05
だんだんイチャモンになってきたな。
0131デフォルトの名無しさん2012/10/06(土) 23:26:58.75
いやいや、間違った型を書いてもエラーにならないのは
型を全然書かないより邪悪ですから
0132デフォルトの名無しさん2012/10/06(土) 23:32:40.25
さすがに型まで書いてるのに
数値の加算が文字列連結になったらびっくりするだろ

でも>>129のgの戻り値を使ったら、そういうことが起こる
0133デフォルトの名無しさん2012/10/07(日) 00:07:25.88
>>132
お前、数値オブジェクトと演算子オーバーロードって
発想が頭にないんじゃないのか?

A + B というのは演算子 = メソッド と考えると
A.+(B) という形に置き換えられる。
お前が理解しやすい形にするとA.add(B)

つまりはこういうことだよ。
String ret = num.add(str);

0134デフォルトの名無しさん2012/10/07(日) 00:08:54.88
たんに、数値オブジェクトのaddメソッドは
取りうる引数に、数値オブジェクト以外に
文字列オブジェクトに対応している。
0135デフォルトの名無しさん2012/10/07(日) 00:11:41.68
どうでもいいけどアンダース的には演算子はインスタンスメンバじゃなくて静的メンバだよ
0136デフォルトの名無しさん2012/10/07(日) 00:16:00.15
>>133>>134
で?それが

function f(x : number, y : number) { return x + y; }

においてfが文字列連結を実行しても良い理由になるの?
0137デフォルトの名無しさん2012/10/07(日) 00:18:33.48
>>136
両方が数値の場合は、数値計算ですよ?
片方が文字列の場合は、文字列結合バージョンの加算が呼ばれます。
0138デフォルトの名無しさん2012/10/07(日) 00:20:10.83
>>137
>>136のfの引数に>>129のgの戻り値を入れてみ?
0139デフォルトの名無しさん2012/10/07(日) 00:21:52.90
>>97
Local "_this" silently conflicts in arrow function
http://typescript.codeplex.com/workitem/11

いちおう Issue Tracker に挙がってるけど

Capturing instance methods breaks 'this'
http://typescript.codeplex.com/workitem/127

this 周りは仕様に注意を要する部分ではあるとは思う
0140デフォルトの名無しさん2012/10/07(日) 00:21:57.68
普通に数値計算されましたが?
0141デフォルトの名無しさん2012/10/07(日) 00:22:09.72
C#で(int)(object)"1"とかやっても通るのと一緒だろ
動いちゃうのは問題だが
0142デフォルトの名無しさん2012/10/07(日) 00:24:17.11
>>140
あほか。すぐバレる嘘付くなよ
g()は文字列"12"なんだからfに入れたら文字列加算になるよ
gの型注釈がnumberだから型エラーにはならないけど
0143デフォルトの名無しさん2012/10/07(日) 00:26:02.74
>>142
バージョン古いんじゃないですか?w
0144デフォルトの名無しさん2012/10/07(日) 00:26:12.93
コンパイルオプションで実行時に型チェックするモードがあったほうがいいな
型推論をいくら完璧にしようが>>141みたいなのはどうしようもないし
0145デフォルトの名無しさん2012/10/07(日) 00:26:46.89
>>143
バージョンwwwお前ばかすぎ
0146デフォルトの名無しさん2012/10/07(日) 00:31:14.49
>>144
明示的なキャストは自己責任だと思うけど、実行時の型チェックは欲しいね
0147デフォルトの名無しさん2012/10/07(日) 00:32:20.49
互換性のために仕方ないことでしょ。

そのうち、strictモードみたいなのでて
レガシーコードと呼ばれるようになるさ。
■ このスレッドは過去ログ倉庫に格納されています