A quoi servent les utilisateurs de JScript.Net?

Je suis intéressé de savoir qui utilise JScript.Net et pour quel type d’applications. Chaque fois que je lis la documentation MSDN .Net, je remarque toujours les exemples JScript, mais depuis que je suis un développeur C #, je n’ai jamais connu personne pour l’utiliser.

Quel type d’applications utilise-t-on pour les utilisateurs et comment mesure-t-il, en termes de flexibilité, de puissance et d’usage général, le C #?

[ Edit: Juste pour clarifier – je ne demande pas ce qu’est JScript.Net, je demande à quoi les gens l’utilisent réellement – c’est-à-dire intéressé à connaître les scénarios d’utilisation réels et comment les gens l’ont trouvé fonctionner]

Rob – J’ai utilisé JScript.NET en colère à un endroit de mon code, ce qui est essentiellement pour exposer les fonctionnalités de sa méthode eval. Voici une version réduite:

static public class Evaluator { private const ssortingng _jscriptSource = @"package Evaluator { class Evaluator { public function Eval(expr : Ssortingng) : Ssortingng { return eval(expr); } } }"; static private object _evaluator; static private Type _evaluatorType; static Evaluator() { InstantiateInternalEvaluator(); } static private void InstantiateInternalEvaluator() { JScriptCodeProvider comstackr = new JScriptCodeProvider(); ComstackrParameters parameters; parameters = new ComstackrParameters(); parameters.GenerateInMemory = true; ComstackrResults results; results = comstackr.ComstackAssemblyFromSource(parameters, _jscriptSource); Assembly assembly = results.ComstackdAssembly; _evaluatorType = assembly.GetType("Evaluator.Evaluator"); _evaluator = Activator.CreateInstance(_evaluatorType); } static public object EvaluateToObject(ssortingng statement) { try { return _evaluatorType.InvokeMember( "Eval", BindingFlags.InvokeMethod, null, _evaluator, new object[] {statement} ); } catch (Exception) { InstantiateInternalEvaluator(); return null; } } 

Vous pouvez évidemment créer des surcharges pour d’autres types de retour. Je ne peux pas prétendre que l’idée originale était la mienne! Les utilisations pour cela seraient, par exemple, d’évaluer une expression de chaîne telle que 3 + 4 à 7 sans parsing d’expression.

Je recommande à tout le monde de ne pas l’utiliser ou uniquement en doses homéopathiques. Malheureusement, je dois beaucoup travailler avec elle pour des raisons d’inheritance, et comme cela a été dit avant son développement pour .NET 1.1 et n’a pas été mis à niveau depuis, n’a pas de support pour les génériques, pas de support pour les delegates, très répandu et n’est actuellement plus développé (bien que parfois Microsoft corrige toujours un bug que je soumets). Mais c’est le problème mineur: il y a des problèmes majeurs dans le compilateur, le code valide peut le bloquer facilement et tout ce que vous avez est une exception lancée quelque part en profondeur de jsc.exe sans indice quel fichier est à l’origine du crash. de code. Voici un exemple de ce qui se passe (je jetais un tableau fortement typé dans une ICollection):

 ***INTERNAL COMPILER ERROR*** Microsoft.Vsa.VsaException: InternalComstackrError (0x80133021): System.NotSupportedException: Not supported in a non-reflected type. at System.Reflection.Emit.SymbolType.GetMember(Ssortingng name, MemberTypes type, BindingFlags bindingAttr) at System.Type.GetMember(Ssortingng name, BindingFlags bindingAttr) at Microsoft.JScript.Convert.GetToXXXXMethod(IReflect ir, Type desiredType, Boolean explicitOK) at Microsoft.JScript.Convert.EmittedCallToConversionMethod(AST ast, ILGenerator il, Type source_type, Type target_type) at Microsoft.JScript.Convert.Emit(AST ast, ILGenerator il, Type source_type, Type target_type, Boolean truncationPermitted) at Microsoft.JScript.Binding.TranslateToILCall(ILGenerator il, Type rtype, ASTList argList, Boolean construct, Boolean brackets) at Microsoft.JScript.Lookup.TranslateToILCall(ILGenerator il, Type rtype, ASTList argList, Boolean construct, Boolean brackets) at Microsoft.JScript.Call.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.Binding.TranslateToILSet(ILGenerator il, AST rhvalue) at Microsoft.JScript.Lookup.TranslateToILSet(ILGenerator il, Boolean doBoth, AST rhvalue) at Microsoft.JScript.VariableDeclaration.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.Block.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.FunctionObject.TranslateToIL(ComstackrGlobals comstackrGlobals) at Microsoft.JScript.FunctionDeclaration.TranslateToILInitializer(ILGenerator il) at Microsoft.JScript.Block.TranslateToILInstanceInitializers(ILGenerator il) at Microsoft.JScript.Class.TranslateToCOMPlusClass() at Microsoft.JScript.Class.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.Package.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.Block.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.ScriptBlock.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.ScriptBlock.TranslateToILClass(ComstackrGlobals comstackrGlobals, Boolean pushScope) at Microsoft.JScript.VsaStaticCode.TranslateToIL() at Microsoft.JScript.Vsa.VsaEngine.DoComstack() at Microsoft.Vsa.BaseVsaEngine.Comstack() 

Bonne chance si vous devez trouver le problème avec un tel message.

JScript.NET a quelques fonctionnalités qui pourraient être intéressantes pour certains projets, comme le prototypage (append de nouvelles propriétés et je pense aussi des méthodes à une instance existante de n’importe quel object), a déjà des fonctions Lamda depuis .NET 1.1 (peut-être 1.0), etc. Mais pour atteindre ce comportement totalement différent de ce qui était possible avec .NET 1.1, ils devaient tout encapsuler dans des aides à l’exécution, JScript.NET possède une propre classe Ssortingng, qui est convertie en System.Ssortingng selon les besoins. De même avec les tableaux, JScript a sa propre implémentation et doit les convertir chaque fois qu’une fonction d’infrastructure est appelée avec un tableau en paramètre, etc.

J’ai vécu des choses très amusantes comme une requête à la firebase database qui a été exécutée deux fois si je l’ai passée directement en paramètre à une méthode ( DoSomething(myRequest.Execute()) , le résultat de la requête était de type System.Ssortingng[][] ) mais tout fonctionne bien si j’atsortingbue le résultat d’abord à une variable et que je le passe ensuite à la méthode, ou si vous essayez de sortinger un tableau avec System.Array.Sort(..) il est simplement ignoré et donc sur.

JScript.NET est une étude de cas qui prouve qu’il est également possible d’implémenter des langages avec une philosophie très différente, et le Microsoft a abandonné en se rendant compte que son approche n’avait pas été bien choisie, mais ils ont appris la leçon excellent travail avec PowerShell qui a une philosophie un peu similaire.

Mais pour résumer une histoire courte: n’utilisez pas JScript.NET si vous n’êtes pas obligé d’utiliser un langage moderne comme C # ou VB.NET, et si vous avez besoin de fonctionnalités de script, je vous recommande d’utiliser CSScript.

JScript .NET est l’un des langages pris en charge pour l’écriture d’extensions d’applications pour la famille de produits d’édition multimédia de Sony. Sound Forge & Vegas.

En particulier, Sound Forge a une fenêtre que vous pouvez utiliser pour éditer et exécuter des scripts pour manipuler des fichiers audio.

Il s’avère que Microsoft a facilité l’ajout de scripts à votre application en utilisant un ou plusieurs des langages pris en charge par .NET. VB, JScript & C #. Il suffit juste d’exposer certains objects de votre application et de les remettre au compilateur avec le texte du script de l’utilisateur.

Ils ont un forum web pour les scénaristes de Sound Forge

Je l’utilise assez souvent, presque exclusivement, pour ASP.NET et les contenus Web associés.

Vous pouvez l’utiliser pour à peu près tout ce que vous pouvez utiliser pour les autres langages .NET. Il fait MSIL, comme les autres;) Compilé avec l’option “rapide” qui transforme certains traits javascript natifs, comme les extensions prototypes et eval, il fonctionne comme n’importe quel autre code du CLR.

Ce n’est certainement pas un membre à part entière de la famille, dans le sens où il semble quelque peu laissé de côté dans .NET 1.1 en termes de fonctionnalités, le support des outils est inexistant et la documentation est carrément désagréable. Cela fait partie de la raison pour laquelle je l’aime tellement, en fait, je me sens comme si je programmais.

Si vous avez beaucoup de scripts (j) qui doivent être convertis en .NET, c’est le choix évident car vous aurez généralement besoin de très peu de réécriture pour que cela fonctionne. Sinon, il n’y a pas de raison particulière de choisir JScript.NET sur un autre langage .NET, et de nombreuses raisons pour ne pas le faire.

Tout se résume à des préférences personnelles car tout se termine par le même code CLR, quelle que soit la langue. Je trouve que JScript.NET est facile à utiliser, qu’il est naturel d’écrire et avec une simplicité flexible comme aucun autre langage que j’ai essayé, donc je l’utilise jusqu’à ce que je rencontre un problème que le langage ne peut tout simplement pas gérer. N’est pas encore arrivé.

Avec l’outil de gestion des processus métier Metastorm BPM, vous pouvez utiliser JScript.Net pour étendre vos stream de travail. Par exemple, vous pouvez append des fichiers .Net .dll personnalisés au moteur et interagir avec eux dans vos processus à l’aide de JScript.Net.

Mon expérience était plutôt positive. Je n’ai implémenté que de petits scripts de colle, mais je préférerais le script avec JScript.Net à VBScript (le deuxième langage de script supporté) à tout moment.

Eh bien, j’essaie de l’utiliser. Je ne peux pas dire que j’ai réussi.

Je n’ai pas fait beaucoup de codage Web dans n’importe quel environnement, mais voici mes 2 cents.

Je voulais exposer certaines tables de firebase database à une page Web, alors j’ai rassemblé une page ASP classique rapide (oui, oui, je sais) qui a extrait les données de SQL Server et renvoyé la table en tant qu’object JSON. Plutôt que de localiser un sérialiseur JSON pour VBScript, j’ai simplement écrit les deux côtés du script J (ava) et importé json2.js sur le serveur pour fournir la sérialisation. Ça a bien marché; honnêtement, il a fallu moins d’une heure pour que le script reprenne une belle représentation JSON de la table, dont 50 minutes ont été une tentative infructueuse pour amener JScript à importer directement json2.min.js plutôt que de lui json2.min.js des json2.min.js <% %> json2.min.js <% %> et le renommer json2.min.asp .

Mais tout le monde dit qu’il est mal et mal d’utiliser Classic ASP de nos jours, alors j’essaie de remplacer mon implémentation ASP + Jscript + ADO rapide et sale par ASP.NET + Jscript.NET + ADO.NET. Après quelques instants de clavier, j’ai ASP.NET v4.0.30319 sur IIS6 et j’ai une page “hello, world” qui fait quelques javascript de boucles simples via la directive <@ language = "JScript"> . Jusqu’ici tout va bien.

Je suivais les meilleures pratiques ici, je serais tout emballé dans une classe, etc., mais comme j’essaie juste de sortir de l’allée, j’ai essayé de faire un port rapide de mon code existant, qui importe divers bits utiles de Javascript d’autres les fichiers utilisant ASP include instructions.

Inclure des éléments simples en utilisant <--#incude file="somejsconstants.asp" --> a bien fonctionné et m’a permis d’accéder aux constantes de ce fichier. Mais ma tentative de tirer le sérialiseur JSON avec <--#incude file="json2.min.asp" --> n’a pas fonctionné, et lancer une version de json2.js convenablement modifiée pour être une page aspx autonome et a jeté la même erreur. (L’erreur du compilateur est que les Objects of type 'jscript_aspx' do not have such a member .) JScript.NET semble être mécontent de l’utilisation des fermetures, une construction quasi omniprésente dans les bibliothèques javascript actuelles.

D’après les articles ci-dessus, il y a beaucoup de façons de sérialiser les objects JSON dans la plate-forme .NET, mais si JScript.NET écrase Javascript sur Douglas écrit par Douglas Crockford, alors Je pourrais aussi bien suivre les masses ASP.NET et utiliser C #.

Je suis en retard à la fête ici, mais je veux append ma prise:

JScript.NET est utile pour le code côté serveur. Il est tout à fait naturel d’utiliser quelque chose côté serveur, essentiellement identique à ce que vous utilisez côté client. En outre, il est beaucoup plus facile de travailler avec JSON, si vous créez un service Web qui communique via JSON.

J’ai écrit un service Web où je travaille en C # mais je pense à la migration vers JScript.NET pour ces raisons.

Comme une amélioration pour les fichiers de commandes et pour les applications de console car il permet une hybridation soignée (sans sortie inutile) grâce à ses directives.Enregistrez l’exemple suivant avec l’extension .bat et vérifiez son résultat:

 @if (@X)==(@Y) @end /* JScript comment @echo off setlocal for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do ( set "jsc=%%v" ) if not exist "%~n0.exe" ( "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0" ) %~n0.exe %* endlocal & exit /b %errorlevel% */ import System; Console.WriteLine("hello from jscript.net"); 

Ici quelques exemples peuvent être trouvés .

Je ne sais pas comment cela se compare aux performances, mais je sais que JScript.NET est l’un des langages que vous pouvez utiliser avec Unity 3D .

JScript .NET est un langage de script moderne avec une grande variété d’applications. C’est un véritable langage orienté object, et pourtant, il conserve son aspect “script” . JScript .NET maintient une compatibilité ascendante totale avec les versions précédentes de JScript, tout en intégrant de nouvelles fonctionnalités et en fournissant un access au runtime de langage commun et à .NET Framework (à partir de JScript.NET ).

De plus, vous pourriez trouver ce post stackoverflow utile: JScript.NET peut-il être utilisé pour écrire une application .NET?

En ce qui concerne qui utilise, je ne suis honnêtement pas au courant (je suis à peu près sûr qu’il existe).

Lisez Introduction à JScript.NET .

Ma pensée personnelle était que cela pourrait être génial pour les développeurs Web qui ont l’habitude d’écrire en langage JScript ordinaire et qui veulent bénéficier des avantages de .NET sans avoir besoin d’apprendre un nouveau langage, ou pour ceux qui veulent que tout leur code soit écrit. une langue

Je venais de supposer qu’il était utilisé par Microsoft pour gonfler le nombre de langues sockets en charge par .NET au lancement à des fins de marketing.

La page Wikipedia JScript.NET est assez explicative: http://en.wikipedia.org/wiki/JScript_.NET

En bref, il semble que ce soit JavaScript avec la bibliothèque .NET.