11

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

アップデート

それは実際のコンパイラに関するものではなく、型の検証など、最適化、およびおそらく圧縮を提供する JavaScript-JavaScript トランスレータに関するものです。

4

4 に答える 4

6

あなたのコメントから:

タイプチェック、インターフェイスチェック、プライベートフィールドチェックなどに興味があります。最小化だけでなく、すべてのもので安全コードを記述できます。

JavaScriptは動的型付け言語であり、クラス、インターフェース、またはアクセス修飾子のサポートが組み込まれていません。クロージャコンパイラは、JSDocコメントに埋め込まれた情報を使用して、インターフェイスやアクセス修飾子などのさまざまな言語外機能をサポートします。いくつかのIDEは、JSDocタグ情報を使用した静的分析も提供します。たとえば、WebStorm&PhpStormブログ:5.0の新機能:GoogleClosureCompilerのJSDocアノテーションを参照してください。

JavaScriptミニファイアの領域には、 YUI CompressorUglifyJSdojoshrinksafeMicrosoft Ajax MinifierJSMINなどの多数のオプションがあります。ただし、これらのツールはいずれも、ClosureCompilerと同じレベルのJSDocベースの分析のサポートを提供していません。

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

  1. GoogleがJSAPIに使用しているものと同じことを行うJavascriptミニファイア(クランチャー)はどれですか?
  2. 本番コードに適したcssおよびjsの最小化機能は何ですか?
  3. JavaScriptのタイプチェッカー?
  4. 優れたJavaScript最小化機能はありますか?
  5. JavaScriptとCSSの最小化
  6. JavaScript圧縮
  7. JavaScriptの静的型チェックの現在の状態は何ですか?
于 2012-09-03T01:32:04.863 に答える
2

Closure コンパイラ (Google) は、JavaScript の真のコンパイラです。代替手段には、typescript (Microsoft) と Flow (facebook) があります。Closure コンパイラは、jsdoc コメントを使用して型に注釈を付けます。Typescript は、es3/es5 とは異なる構文を使用して、プレーンな JavaScript にコンパイルされる型注釈を提供します。OCaml 言語 (型推論に優れている) にフローを便乗させて、可能な限り多くの型情報を推論しますが、コメント構文で注釈を使用することもできます。Closure コンパイラも型推論の改善に取り組んでいますが、製品化の準備はできていません。

@EASI への対応: クロージャ コンパイラは単なるミニファイアではなく、真のコンパイラです。それは次のように機能します。

  1. 一連の入力 .js ファイルと一連の extern ファイル (ecma 3、5、6 および Window などの一般的なブラウザー オブジェクトのインターフェイスを定義したもの) を抽象構文ツリー (AST) に解析します。

  2. 一連のコンパイラ パスを AST 経由で実行して、コードの書き換え、変換、削除などを行います。

  3. AST を js ソース コードに戻します。ファイルを連結してコメントを削除し (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

于 2015-04-07T18:51:00.933 に答える
0

furiascript.comは興味深い選択肢になると思います。

于 2015-04-02T21:05:19.640 に答える
0

はい、

Java、JS、PHP、CSS、および HTML の「ミニファイアー」があります。たとえば、プログラミングに Google GWT Java を使用すると、コードは JS の最小化として生成されます。


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


新しい:

専用の IDE で JavaScript コードを作成しようとしましたか? 型チェックを探している場合は、次のいずれかを試すことができます。

  • NuSphere PhpED Professional v7 (ベスト)
  • phpデザイナー8
  • アプタナ スタジオ
  • ゼンド スタジオ
  • ドリームウィーバー CS6

現在、PHP だけでなく JavaScript のサポートも強化されており、コードのオートコンプリート、型の検証、動的な構文の強調表示、複数言語の構文の強調表示、方向付けられたオブジェクト分析、および入力時のオートコンプリートがサポートされています。

于 2012-09-03T01:05:14.757 に答える