仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 543|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET编程:在.NET中嵌进IronPython 交互

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:23:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。跟着IronPyhon2.0的公布,.NETDynamicLanguageRuntime也加倍成熟了,在2.0中我们能够用静态剧本以粘合剂的体例编写架构系统中的各类逻辑单位,既便于修正,又能天真合适多变的营业场景。固然,我的方针是在PlatformFramework中能嵌进剧本引擎,而不是用ipy.exe往实行一个“自力”的义务。要让.net项目能真正跟剧本举行交互,还得必要供应剧本引擎的完成。这得提到DLR一些基础观点了。
下图摘自DLR匡助文件,经由过程它我们基础能够懂得基于DLR的构成体例。

下图形貌了DLR的基础实行流程。

ScriptRuntime:创立DLR运转情况,这是全部实行历程的肇端点,它暗示一个全局的实行形态(好比程序集援用等等)。每一个使用程序域(AppDomain)中能够启动多个ScriptRuntime。
ScriptScope:构建一个实行高低文,个中保留了情况及全局变量。宿主(Host)能够经由过程创立分歧的ScriptScope来供应多个数据断绝的实行高低文。
ScriptEngine:DLR静态言语(好比IronPython)实行类,可于剖析和实行静态言语代码。
ScriptSource:操控静态言语代码的范例,我们能够编译(Compile)、读取(ReadCodeLines)或运转(Execute)代码。
CompiledCode:挪用ScriptSource.Compile()将源代码编译成CompiledCode,如许屡次实行就无需反复编译,从而进步实行功能。
ObjectOperations:供应了相干办法,同意我们在宿主(Host)中操纵DLR工具成员(Member)。
如今我们来构建剧本引擎
固然我们必需到场IronPyhton供应的相干援用并导进定名空间
usingIronPython.Hosting;
usingIronPython.Compiler;
usingIronPython.Runtime;
usingMicrosoft.Scripting;
usingSystem.Runtime.Remoting;
1、HelloWorld
以下为援用的内容:
varpy=@"
deftest():
return‘helloworld~!’;
printtest();";
varengine=Python.CreateEngine();
varcode=engine.CreateScriptSourceFromString(py,SourceCodeKind.Statements);
code.Execute();
输入:helloworld~!
注重:Python关于源代码缩进的格局有严厉请求。
2、给Python高低文供应变量
varscope=engine.Runtime.Globals;//engine.Runtime.CreateScope();
scope.SetVariable(“x”,123);
3、读取Python高低文中的变量
varx=scope.GetVariable<int>(“x”);
能够看出ScriptScope能够在Host和ScriptRuntime间传送数据。
4、工具实例共享
以下为援用的内容:
varpy=@"
o.X=o.X+2;
printo.X;";
varengine=Python.CreateEngine();
varcode=engine.CreateScriptSourceFromString(py,SourceCodeKind.Statements);
varscope=engine.Runtime.Globals;
varo=newData{X=123};
scope.SetVariable("o",o);
code.Execute(scope);
Console.WriteLine(o.X);
载进程序集并由ScriptRuntime办理
5、创立程序集test.dll
以下为援用的内容:
namespaceMy.Library
{
publicclassMyClass
{
publicintTest(intx)
{
return++x;
}
}
}
创立Host程序
以下为援用的内容:
varpy=@"
importclr;
fromMy.LibraryimportMyClass;
fromSystemimportConsole;
o=MyClass();
x.X=o.Test(x.X);
Console.WriteLine(x.X);";
varengine=Python.CreateEngine();
engine.Runtime.LoadAssembly(Assembly.GetAssembly(typeof(int)));//mscorlib.dll
engine.Runtime.LoadAssembly(Assembly.LoadFrom("test.dll"));//test.dll
varcode=engine.CreateScriptSourceFromString(py,SourceCodeKind.Statements);
varscope=engine.Runtime.Globals;
varx=newData{X=123};
scope.SetVariable("x",x);
code.Execute(scope);
Console.WriteLine(x.X);
读取Python高低文工具实例属性
以下为援用的内容:
varpy=@"
classClass1:
def__init__(self):
self.i=100
definc(self):
self.i=self.i+100
o=Class1()";
varo=scope.GetVariable("o");
vari=engine.Operations.GetMember<int>(o,"i");
读取Python高低文工具实例办法
engine.Execute("o.inc()",scope);//已在高低文情况中实行此工具办法
如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着Java嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。
海妖 该用户已被删除
沙发
发表于 2015-1-26 15:20:21 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
柔情似水 该用户已被删除
板凳
发表于 2015-2-4 19:30:33 | 只看该作者
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
活着的死人 该用户已被删除
地板
发表于 2015-2-10 05:42:12 | 只看该作者
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
再见西城 该用户已被删除
5#
发表于 2015-2-28 22:23:15 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
小女巫 该用户已被删除
6#
发表于 2015-3-10 08:57:31 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
莫相离 该用户已被删除
7#
发表于 2015-3-17 06:11:28 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
透明 该用户已被删除
8#
发表于 2015-3-23 23:22:54 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-18 11:01

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表