11

最近、私はGoogle Closure Compilerのようなクールなものを見つけました。コンパイルされた静的型言語の利点を得る機会を提供する代替手段があるか?JavaScript "コンパイラ"

更新

それは種類の検証など、最適化、そしておそらく圧縮を提供するJavaScript - JavaScriptの翻訳者、についてです、本当のコンパイラではありません。

+3

いわゆるJavascriptのコンパイラは、より多くのJavascriptのオプティマイザのようなものです。 コードはまだブラウザのJavascriptエンジンで実行する必要があるため、有効なJSでなければなりません。彼らができることはすべて、すべての識別子を短くしてファイルのサイズを減らすために空白を削除し、JS層でマイナーな最適化を行うことですが、コンパイルされた言語の実行速度に達することはありません。 – Philipp

+0

@Philippだから、コンパイルされた言語の実行速度はJSより速いと言っていますか?私はいつもそれが別の方法(とくに私のコンピュータで)だったと思った... – 0x499602D2

+0

コンパイルされた静的型言語のメリットとはどういう意味ですか? **をコンパイルするCスタイルのコードをJavaScriptに書きたいと思っていますか?([dart](http://www.dartlang.org/)のように) Phillipが指摘するように、最適化は**コンパイル**ではありません。あなたが見つけても、あなたはまだJavaScriptを実行しています。 –

答えて

0

はい、ジャワ、JS、PHP、CSS、およびHTML "minifiersは"

があります。 たとえば、Google GWT Javaをプログラミングに使用すると、コードはJSの最小化として生成されます。


これらは用語コンパイラを使用していますが、正しくありません。コンパイラは人間が読める言語コードを、インタプリタやマシンだけが読むことができるオブジェクトコードに変換します。このGoogleツールが行うことは、インタプリタによって高速に読み取れるようにコードを最適化することです。スクリプト言語はインタプリタを実行する必要があります。機械語にコンパイルされたプログラムは、どのインタプリタよりも速く実行されます。もちろん、プログラムのスピードは実行フロープロジェクトと開発チームの経験に左右されます。


新:

あなたが専門的なIDEでJavaScriptのコードを作るためにしようと試みたことがありますか?あなたがタイプchekingを探しているなら 、あなたはこれらのいずれかを試みることができる:

  • NuSphere PhpEDプロフェッショナルV7(最高)
  • phpDesigner 8
  • のAptana Studioの
  • のZend Studioの
  • のDreamweaver CS6

これは、PHPだけでなくJavaScriptのコード自動補完、タイプ検証、動的構文強調表示、複数言語構文強調表示とオブジェクト指向分析、および入力時に自動完成。あなたのコメントから

+5

クロージャコンパイラは基本モードでは「ミニマイザ」として機能しますが、アドバンストモードでは実際のコンパイラと非常によく似ていますが、ターゲット言語としてバイトコードやマシンコードではなくJavaScriptを使用します。 peepholeオプティマイザだけでなく、コードパス/到達可能性分析、関数インライン化、そして最適化するコンパイラが期待するその他すべてのものがあります。 –

+0

@SperanskyDanil、試してみてください。http://fmarcia.info/jsmin/test.html – PSyLoCKe

+1

@CharlesDuffy、GCCは最先端のプログラミング言語です。これは、あなたのソフトウェアを読んでいるロボットのようなもので、5倍の速さで再構築します。それは、GoogleがGmailを素晴らしいWeb 2.0サービスにする方法です。 – PSyLoCKe

5

私は型チェック、インタフェースのチェックなどをチェック民間分野に興味を持って、すべてのものは、あなたが安全コードだけでなく、ミニマイザーを書くことができます。

JavaScriptは、クラス、インターフェイス、またはアクセス修飾子の組み込みサポートを持たない動的型言語です。 Closure Compilerは、JSDocコメントに埋め込まれた情報を使用して、インターフェースやアクセス修飾子などのさまざまな言語外の機能をサポートします。いくつかのIDEは、JSDocタグ情報を使用した静的解析も提供しています(たとえば、WebStorm & PhpStormブログ:New in 5.0: Google Closure Compiler JSDoc annotations)。JavaScriptのminifiersの領域で

は、多数のオプションがあるよう YUI CompressorUglifyJSdojo shrinksafeMicrosoft Ajax Minifier、および JSMINなど。ただし、これらのツールのいずれも、Closure Compilerと同じレベルのJSDocベースの分析をサポートしていません。

関連スタックオーバーフロー質問:

  1. Which Javascript minifier (cruncher) does the same things that the one Google uses for its JS APIs?
  2. What are some good css and js minimizers for production code?
  3. Type checker for JavaScript?
  4. Is there a good JavaScript minimizer?
  5. JavaScript and CSS minimizer
  6. JavaScript compression
  7. What is the current state of JavaScript static type checking?
2

クロージャコンパイラ(Google)は、JavaScript用の真のコンパイラです。代わりにtypescript(Microsoft)とFlow(facebook)があります。 Closureコンパイラは、型に注釈を付けるためにjsdocコメントを使用します。 Typescriptは、es3/es5とは異なる構文を使用して、プレーンなjavascriptにコンパイルされる型の注釈を提供します。フローはOCaml言語(型推論に優れています)にピギーバックしてできるだけ多くの型情報を推測しますが、コメント構文でも注釈を使うことができます。クロージャーコンパイラはより良い型推論にも取り組んでいますが、それは生産の準備ができていません。

@EASIに対する応答として、クロージャコンパイラは、単なるミニライザではなく、真のコンパイラです。抽象構文木への入力の.jsファイルのセットとのexternファイル(ECMA 3,5,6と共通のブラウザのためにその定義されたインターフェイスは、ウィンドウのようになどのオブジェクト)のセットを解析

  1. :それはで動作します(AST)。コンパイラのシリーズを実行

  2. 、書き換え変換、デッドコードを除去するためにASTの上を通過など

  3. はバックjsのソースコードにASTを発します。 (WHITESPACE_ONLY)、関数定義内のシンボルの名前の変更と縮小(SIMPLE)、またはすべてのシンボルの名前の変更と難読化されたフォームへの書き換え(ADVANCED)のいずれかを行います。

ここには、興味のあるもののコンパイラパスのリストがあります。あなたが見ることができるように、上に行くがたくさんある:

AliasExternals.java AliasStrings.java AmbiguateProperties.java AnalyzeNameReferences.java AnalyzePrototypeProperties.java AstValidator.java CallGraph.java ChainCalls.java CheckConformance.java CheckDebuggerStatement.java CheckEventfulObjectDisposal.java CheckGlobalNames.java CheckMissingGetCssName.java CheckRegExp.java CheckSideEffects.java ClosureCodeRemoval.java ClosureOptimizePrimitives.java CollapseAnonymousFunctions.java CollapseProperties.java CollapseVariableDeclarations.java ConstCheck.java ConstParamCheck.java ConvertDeclaredTypesToJSDoc.java ConvertToDottedProperties.java ConvertToTypedES6.java CoverageInstrumentationPass.java CreateSyntheticBlocks.java CrossModuleCodeMotion.java CrossModuleMethodMotion.java DeclaredGlobalExternsOnWindow.java DefaultPassConfig.java Denormalize.java DisambiguateProperties.java ErrorPass.java Es6ToEs3ClassSideInheritance.java ExpandJqueryAliases.java ExportTestFunctions.java ExternExportsPass.java ExtractPrototypeMemberDeclarations.java FlowSensitiveInlineVariables.java FunctionNames.java FunctionRewriter.java GatherExternProperties.java GatherRawExports.java GenerateExports.java GlobalNamespace.java GlobalTypeInfo.java GroupVariableDeclarations.java ImplicitNullabilityCheck.java InferConsts.java InjectEs6RuntimeLibrary.java InlineFunctions.java InlineObjectLiterals.java InlineProperties.java InlineVariables.java InstrumentFunctions.java JsMessageVisitor.java MarkNoSideEffectCalls.java MethodCompilerPass.java MinimizeExitPoints.java NameAnalyzer.java NameAnonymousFunctions.java NameAnonymousFunctionsMapped.java NameReferenceGraphConstruction.java NewTypeInference.java Normalize.java ObjectPropertyStringPostprocess.java ObjectPropertyStringPreprocess.java OptimizeArgumentsArray.java OptimizeCalls.java OptimizeParameters.java PeepholeOptimizationsPass.java PhaseOptimizer.java PrepareAst.java ProcessCommonJSModules.java ProcessDefines.java ProcessTweaks.java PureFunctionIdentifier.java RecordFunctionInformation.java RemoveUnusedClassProperties.java RemoveUnusedNames.java RemoveUnusedPrototypeProperties.java RemoveUnusedVars.java RenameLabels.java RenameProperties.java RenamePrototypes.java RenameVars.java ReplaceCssNames.java ReplaceIdGenerators.java ReplaceStrings.java RescopeGlobalSymbols.java RuntimeTypeCheck.java SanityCheck.java ShadowVariables.java SideEffectsAnalysis.java SimpleDefinitionFinder.java StrictModeCheck.java StripCode.java SymbolTable.java TransformAMDToCJSModule.java TypeInferencePass.java TypedScopeCreator.java UnreachableCodeElimination.java VariableVisibilityAnalysis.java

+0

私は毛を分けているかもしれませんが(私の言うとおり)、リストに載っている3番目の項目はあなたの議論をほとんど無効にしていると思います。コンパイラは一般に、人間が読める言語を取り、それを機械コードに変換する。 Closure "Compiler"がすべての作業をJavaScriptに変換すると、新しいコードは通常のJavaScriptエンジンで実行されるのではないのですか? 私は、Closure "Compiler"がやっていることは広範囲ではなく、通常のコンパイラと同じことに近いが、最終的にJavaScriptを再構築してコンパイルするのではないと言っている。 – Quantium