PDA

View Full Version : [.NET] Scripting


71104
09-04-2009, 00:29
... allora :D

presupposto: fin dall'epoca del cucco é possibile scrivere in Windows programmi "scriptabili", cioé pogrammi la cui logica sia controllata da un file di script (magari incorporato nel programma stesso, tipicamente tra le risorse) che controlla oggetti e metodi esposti dal programma nativo vero e proprio tramite una tecnologia di interoperabilitá.
non sto dicendo nulla di nuovo: se prendiamo COM/OLE come tecnologia di interoperabilitá la tecnologia che permette lo scripting dei programmi nativi é Active Scripting e, come forse saprete, é tutta roba della seconda metá degli anni '90. WSH é non un esempio, ma l'esempio di programma scriptabile; un altro esempio é Visual Basic for Applications, quello con cui si scrivevano le macro per Office (e forse si scrivono ancora, non saprei proprio visto che non ho piu Office dalla versione 2003, che ho usato pochissimo e superficialmente).

fine presupposto; ora prendiamo .NET come tecnologia di interoperabilitá e naturalmente anche come piattaforma dell'applicazione nativa che deve essere controllata dallo script. mi spiegate come ?@##0 deve fare un cristiano di programmatore a parsare un piffero di JScript che abbia accesso a degli oggetti nativi esposti, cosa che era possibilissima con una tecnologia (l'Active Scripting di cui sopra) molto piu vecchia di tutto .NET e che ora ha appena preso la via dell'estinzione??? :muro:

mi ci sto scervellando ma non riesco proprio a capire cosa offra attualmente Microsoft per lo scripting che non sia deprecato e che non sia quel casino di CodeDom che tutt'al piu compila il codice in memoria sotto forma di assembly ("assembly" non nel senso di codice macchina, intendo "assembly da GAC"; questo non é scripting.)

cercando e ricercando ho trovato un certo namespace Microsoft.VSA, dove VSA é l'acronimo di Visual Studio for Applications, che sembrava essere proprio il replacement perfetto; e invece vado a guardare e che ti trovo?
http://msdn.microsoft.com/en-us/library/microsoft.vsa.aspx
interamente deprecato -.-'

cercando invece su Google sono giunto a due risultati interessanti. il primo é un articolo su MSDN che descrive la realizzazione di Scriptpad, un programma scritto in Visual Basic.NET che permette di scrivere ed eseguire (non compilandoli ma interpretandoli) degli script in diversi linguaggi di scripting tra cui ad esempio JScript e VBScript; eccolo qua:
http://msdn.microsoft.com/en-us/library/ms974577.aspx
inutile dire che l'articolo é datato 2001 e che il programma usa VSA :muro:
peró mi sono detto che forse questo significa che siamo in una fase di transizione e che Microsoft, in attesa di presentarci la nuova tecnologia di turno, preferisce che si usi ancora VSA.

l'altro risultato interessante sono dei rumori su un certo WSH.NET, ma questi li ho trovati tutti da fonti non ufficiali (forums, Usenet...) e tutte troppo datate (tipo 2003...), quindi ho idea che oggidi questo WSH.NET si sia incarnato in Windows PowerShell; che ne pensate? sapete qualcosa di WPS? interpreta o esegue IL? nel primo caso, come fa?

e che ne pensate di tutta la questione? c'é qualcosa che mi é GRANDEMENTE sfuggito? qualche EVIDENTISSIMO namespace che non ho minimamente visto, di quelli che quando li vedi giá solo dal nome ti accendono la lampadina e ti fanno pensare "aaaaah, ecco come si faceva :D"?

:help:

Kralizek
09-04-2009, 08:43
ne so poco perché non ci ho lavorato, ma da quel che so PS é fatta apposta per scriptare usando "roba" managed. Fossi in te proverei a dare un'occhiata in quella direzione. ;)

71104
10-04-2009, 13:30
up :stordita:

banryu79
10-04-2009, 14:24
Ciao 71104,
anche se non so un cippa lippa del mondo .NET mi piace cercare con Google...
E dopo una breve ricerca parebbe proprio che il tuo problema ce l'hanno anche altri utenti .NET.

Ho trovato alcuni articoli interesanti (alcuni datati 2005, altri di datazione non verificata) in cui forse ti sei già imbattuto nelle tue ricerche, li posto lo stesso sperando che ti possano essere utili in qualche modo:
- Make your .Net application support scripting - a practical approach (http://weblogs.asp.net/rosherove/pages/DotNetScripting.aspx)
- Dot Net Script (http://www.codeproject.com/KB/dotnet/DotNetScript.aspx?fid=33574&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=1#xx0xx)
- Using .NET to make your Application Scriptable (http://www.developerfusion.com/article/4529/using-net-to-make-your-application-scriptable/)

71104
10-04-2009, 23:46
Ciao 71104,
anche se non so un cippa lippa del mondo .NET mi piace cercare con Google...
E dopo una breve ricerca parebbe proprio che il tuo problema ce l'hanno anche altri utenti .NET. infatti credo proprio che non ci sia soluzione ufficiale al momento, se non quella di fregarsene del fatto che VSA é deprecato e usare quello (peró sai che pizza tutti i warning del compilatore).
comunque confido nel fatto che in futuro arrivi qualcosa: non ha senso che Microsoft ci lasci senza qualcosa che ci aveva giá dato (e che c'é ancora, solo che hanno detto "non usatelo").


- Dot Net Script (http://www.codeproject.com/KB/dotnet/DotNetScript.aspx?fid=33574&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=1#xx0xx) usa il CodeDom :muro:


- Using .NET to make your Application Scriptable (http://www.developerfusion.com/article/4529/using-net-to-make-your-application-scriptable/) anche questo :cry:


- Make your .Net application support scripting - a practical approach (http://weblogs.asp.net/rosherove/pages/DotNetScripting.aspx) ah, cosi funziona eh :D praticamente l'unica via non deprecata sarebbe quella di usare Active Scripting da .NET visto che COM lo permette giustamente :asd:
a quel punto io non userei neanche il Microsoft ScriptControl, ma direttamente le Script Interfaces.

stdecden
11-04-2009, 13:16
Non so se ti può interessare però esiste un implementazione di python per .NET che potrebbe fare al caso tuo. Si chiama IronPython, prova a dare un occhiata.

71104
11-04-2009, 15:01
Non so se ti può interessare però esiste un implementazione di python per .NET che potrebbe fare al caso tuo. Si chiama IronPython, prova a dare un occhiata. lo conosco, ma non vedo come potrebbe essermi utile; di certo non ho intenzione di portarmi appresso un intero interpete Python per ogni programma scriptabile: io cercavo qualcosa che fosse integrato in Windows, come Active Scripting, come lo ScriptControl e come VSA.

tra l'altro IronPython permette di scriptare in un solo specifico linguaggio (che neanche conosco tanto bene :p), mentre un'interfaccia di scripting vera e propria, come quelle sopra citate, dovrebbe permettere (avendo il motore di parsing adeguato) di eseguire script in qualunque linguaggio.

marco.r
11-04-2009, 16:41
lo conosco, ma non vedo come potrebbe essermi utile; di certo non ho intenzione di portarmi appresso un intero interpete Python per ogni programma scriptabile: io cercavo qualcosa che fosse integrato in Windows, come Active Scripting, come lo ScriptControl e come VSA.

tra l'altro IronPython permette di scriptare in un solo specifico linguaggio (che neanche conosco tanto bene :p), mentre un'interfaccia di scripting vera e propria, come quelle sopra citate, dovrebbe permettere (avendo il motore di parsing adeguato) di eseguire script in qualunque linguaggio.

Mi risulta che il "successore ufficiale" di WSH sia PowerShell, che sara' parte integrante di Windows 7. Cmq un'interfaccia di scripting generica "vera e propria" non mi sembra abbia molto senso... per gestire piu' linguaggi c'e' gia' il framework.

71104
13-04-2009, 12:29
Mi risulta che il "successore ufficiale" di WSH sia PowerShell, fonti?
ed inoltre sai per caso se é spiegato da qualche parte come funziona WPS? usa qualche namespace documentato, come VSA, o implementa esso stesso tutto il parsing necessario?
visto che WPS usa un linguaggio completamente suo temo che sia la seconda, e questo non risolve il problema di un programmatore che voglia rendere scriptabile un suo programma.


Cmq un'interfaccia di scripting generica "vera e propria" non mi sembra abbia molto senso... l'alternativa é che qualcuno scriva una libreria di parsing per ogni possibile linguaggio di scripting: una per Python, una per JScript, ...
va benissimo, per caritá, ma é anche importante che una funzionalitá del genere sia integrata nel sistema operativo, ma che senso ha che in Microsoft si mettano a sviluppare N interfacce differenti per gli N linguaggi di scripting che hanno intenzione di supportare?


per gestire piu' linguaggi c'e' gia' il framework. non c'entra nulla, é un altro discorso completamente.

marco.r
14-04-2009, 10:14
fonti?

Non ho fonti specifiche (o meglio, non riesco a trovare la pagina :p) pero' tutti i prodotti microsoft recenti supportano PowerShell e per alcuni di questi (e.g. Exchange 2007) e' l'unico modo per scriptarli. Inoltre sui blog della microsoft trovi diverse guide su come passare da vbscript


ed inoltre sai per caso se é spiegato da qualche parte come funziona WPS? usa qualche namespace documentato, come VSA, o implementa esso stesso tutto il parsing necessario?
visto che WPS usa un linguaggio completamente suo temo che sia la seconda, e questo non risolve il problema di un programmatore che voglia rendere scriptabile un suo programma.

Su questo non ti so aiutare molto. Comunque WPS si puo' embeddare, volendo:
http://blogs.msdn.com/powershell/archive/2007/08/29/making-applications-scriptable-via-powershell.aspx


l'alternativa é che qualcuno scriva una libreria di parsing per ogni possibile linguaggio di scripting: una per Python, una per JScript, ...
va benissimo, per caritá, ma é anche importante che una funzionalitá del genere sia integrata nel sistema operativo, ma che senso ha che in Microsoft si mettano a sviluppare N interfacce differenti per gli N linguaggi di scripting che hanno intenzione di supportare?


non c'entra nulla, é un altro discorso completamente.
Quel che intendevo dire e' che nel momento in cui il linguaggio e' supportato da .NET il parser c'e'; poi non so se tutti quanti supportino la stessa interfaccia (e quindi siano riutilizzabili in modo generico per un motore di scripting).

71104
14-04-2009, 12:33
Su questo non ti so aiutare molto. Comunque WPS si puo' embeddare, volendo: ohibó é vero!! ecco i namespaces che stavo cercando :D
http://msdn.microsoft.com/en-us/library/aa717491(VS.85).aspx
edit - peró é documentazione preliminare, e io alla documentazione preliminare preferisco quella obsoleta... siamo in una fase di work in progress, prima di poter tranquillamente scrivere programmi che usano WPS deve passare del tempo, anche perché WPS é una dipendenza e attualmente non é integrato in Windows.


Quel che intendevo dire e' che nel momento in cui il linguaggio e' supportato da .NET il parser c'e'; poi non so se tutti quanti supportino la stessa interfaccia (e quindi siano riutilizzabili in modo generico per un motore di scripting). c'é il parser ma non l'interprete, e a me servirebbe l'interprete; i namespaces del CodeDom ti permettono solo di compilare (anche solo in memoria ma comunque scrivendo files temporanei AFAIK), per eseguire al volo non c'é modo.