JavaScript "компиляторы"

Недавно я нашел такую ​​классную вещь, как Google Closure Compiler. Существуют ли альтернативы, которые предоставляют возможности для получения преимуществ скомпилированных статически типизированных языков?

Обновление

Речь идет не о реальных компиляторах, а о JavaScript-JavaScript-переводчиках, которые обеспечивают проверку типов и т.д., оптимизацию и, возможно, сжатие.

Ответ 1

Из вашего комментария:

Меня интересует проверка типов, проверка интерфейса, проверка частных полей и т.д., все позволяет писать код безопасности, а не только минимизировать.

JavaScript - это динамически типизированный язык, который не имеет встроенной поддержки классов, интерфейсов или модификаторов доступа. Closure Compiler поддерживает различные экстралингвистические функции, такие как интерфейсы и модификаторы доступа, используя информацию, встроенную в комментарии JSDoc. Несколько IDE также предоставляют статический анализ с использованием информации тега JSDoc, например, см. Блог WebStorm и PhpStorm: Новое в 5.0: Компоновщик Google Closure JSDoc аннотации.

В области JavaScript minifiers существует множество опций, таких как YUI Compressor, UglifyJS, dojo shrinksafe, Microsoft Ajax Minifier и JSMIN. Однако ни один из этих инструментов не обеспечивает такой же уровень поддержки JSDoc-анализа, как Closure Compiler.

Связанные вопросы:

Ответ 2

Компилятор Closure (Google) - настоящий компилятор для javascript. Альтернативы включают typescript (Microsoft) и Flow (facebook). Компилятор Closure использует комментарии jsdoc для аннотирования типов. typescript использует другой синтаксис, чем es3/es5, чтобы предоставить аннотации типов, которые компилируются на простой javascript. Поток копий на язык OCaml (который превосходит по типу вывода), чтобы выводить как можно больше информации о типе, но также может потреблять аннотации в синтаксисе комментариев. Компилятор Closure также работает над лучшим типом вывода, но он не готов к производству.

В ответ на @EASI: Компилятор закрытия - это настоящий компилятор, а не только minifier. Он работает:

  • Разбор набора входных файлов .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

Ответ 3

Да,

Есть Java, JS, PHP, CSS и HTML " minifiers". Например, когда вы используете Google GWT Java для программирования, код генерируется как минимизация JS.


Они используют термин компилятор, но это неверно. Компиляторы превращают один человеко-читаемый языковой код в объектный код, который могут читать только интерпретаторы или машины. То, что этот инструмент Google делает, - это оптимизировать ваш код, чтобы он мог быстрее читать интерпретатор. Языки Script должны интерпретировать интерпретаторы. Программы, скомпилированные в машинный язык, выполняются быстрее, чем любой интерпретатор. Но, конечно, любая скорость программы зависит от проекта потока выполнения и опыта развивающейся команды.


New:

Вы пытались сделать свои JavaScript-коды в специализированной среде IDE? Если вы ищете тип чеканки, вы можете попробовать один из них:

  • NuSphere PhpED Professional v7 (лучший)
  • phpDesigner 8
  • Студия Aptana
  • Zend Studio
  • DreamWeaver CS6

Теперь они имеют большую поддержку не только для PHP, но и для JavaScript, с помощью кода Auto-Complete, проверки типов, выделения динамического синтаксиса, выделения синтаксиса нескольких языков и анализа ориентированного объекта и автоматического завершения по мере ввода.

Ответ 4

Я думаю, что furiascript.com может быть интересным вариантом.