最近、Google Closure Compilerのようなクールなものを見つけました。コンパイルされた静的型付け言語の利点を得る機会を提供する代替手段はありますか?
アップデート
それは実際のコンパイラに関するものではなく、型の検証など、最適化、およびおそらく圧縮を提供する JavaScript-JavaScript トランスレータに関するものです。
最近、Google Closure Compilerのようなクールなものを見つけました。コンパイルされた静的型付け言語の利点を得る機会を提供する代替手段はありますか?
アップデート
それは実際のコンパイラに関するものではなく、型の検証など、最適化、およびおそらく圧縮を提供する JavaScript-JavaScript トランスレータに関するものです。
あなたのコメントから:
タイプチェック、インターフェイスチェック、プライベートフィールドチェックなどに興味があります。最小化だけでなく、すべてのもので安全コードを記述できます。
JavaScriptは動的型付け言語であり、クラス、インターフェース、またはアクセス修飾子のサポートが組み込まれていません。クロージャコンパイラは、JSDocコメントに埋め込まれた情報を使用して、インターフェイスやアクセス修飾子などのさまざまな言語外機能をサポートします。いくつかのIDEは、JSDocタグ情報を使用した静的分析も提供します。たとえば、WebStorm&PhpStormブログ:5.0の新機能:GoogleClosureCompilerのJSDocアノテーションを参照してください。
JavaScriptミニファイアの領域には、 YUI Compressor、UglifyJS、dojoshrinksafe、Microsoft Ajax Minifier、JSMINなどの多数のオプションがあります。ただし、これらのツールはいずれも、ClosureCompilerと同じレベルのJSDocベースの分析のサポートを提供していません。
関連するスタックオーバーフローの質問:
Closure コンパイラ (Google) は、JavaScript の真のコンパイラです。代替手段には、typescript (Microsoft) と Flow (facebook) があります。Closure コンパイラは、jsdoc コメントを使用して型に注釈を付けます。Typescript は、es3/es5 とは異なる構文を使用して、プレーンな JavaScript にコンパイルされる型注釈を提供します。OCaml 言語 (型推論に優れている) にフローを便乗させて、可能な限り多くの型情報を推論しますが、コメント構文で注釈を使用することもできます。Closure コンパイラも型推論の改善に取り組んでいますが、製品化の準備はできていません。
@EASI への対応: クロージャ コンパイラは単なるミニファイアではなく、真のコンパイラです。それは次のように機能します。
一連の入力 .js ファイルと一連の extern ファイル (ecma 3、5、6 および Window などの一般的なブラウザー オブジェクトのインターフェイスを定義したもの) を抽象構文ツリー (AST) に解析します。
一連のコンパイラ パスを AST 経由で実行して、コードの書き換え、変換、削除などを行います。
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
furiascript.comは興味深い選択肢になると思います。
はい、
Java、JS、PHP、CSS、および HTML の「ミニファイアー」があります。たとえば、プログラミングに Google GWT Java を使用すると、コードは JS の最小化として生成されます。
彼らはコンパイラという用語を使用していますが、それは正しくありません。コンパイラは、人間が読める 1 つの言語コードを、インタープリターまたはマシンのみが読み取ることができるオブジェクト コードに変換します。この Google ツールが行うことは、コードを最適化して、インタープリターがより速く読み取れるようにすることです。スクリプト言語を実行するには、インタープリターが必要です。機械語にコンパイルされたプログラムは、どのインタープリターよりも高速に実行されます。もちろん、プログラムの速度は、その実行フロー プロジェクトと開発チームの経験に依存します。
新しい:
専用の IDE で JavaScript コードを作成しようとしましたか? 型チェックを探している場合は、次のいずれかを試すことができます。
現在、PHP だけでなく JavaScript のサポートも強化されており、コードのオートコンプリート、型の検証、動的な構文の強調表示、複数言語の構文の強調表示、方向付けられたオブジェクト分析、および入力時のオートコンプリートがサポートされています。