亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于SiPESC平臺的Python擴(kuò)展模塊開發(fā)

        2015-01-13 19:07:44陳飆松李云鵬陸旭澤
        計算機(jī)輔助工程 2014年6期
        關(guān)鍵詞:腳本語言

        陳飆松+李云鵬+陸旭澤

        摘要: 基于Python的可擴(kuò)展性,針對SiPESC平臺對于動態(tài)解釋型腳本語言環(huán)境的需求,設(shè)計并開發(fā)可動態(tài)集成SiPESC平臺上系統(tǒng)管理、算法調(diào)用、分析計算等功能的Python擴(kuò)展模塊.討論擴(kuò)展模塊開發(fā)過程中的用戶需求、程序設(shè)計以及相關(guān)技術(shù).SiPESC.OPT與Python第三方庫的集成優(yōu)化算例表明,該擴(kuò)展模塊能順利驅(qū)動SiPESC平臺上復(fù)雜工作流程,具有較強(qiáng)的實(shí)用性和靈活性.

        關(guān)鍵詞: Python; SiPESC; 腳本語言; 擴(kuò)展模塊

        中圖分類號: TB115.1文獻(xiàn)標(biāo)志碼: B

        0引言

        隨著計算機(jī)技術(shù)的飛速發(fā)展,科學(xué)研究與科學(xué)計算之間的關(guān)系日益密切,人們對于科學(xué)計算工具的需求已不再局限于處理數(shù)值問題.各種格式的大型數(shù)據(jù)集的處理、新算法的實(shí)現(xiàn)、數(shù)據(jù)庫與互聯(lián)網(wǎng)等計算系統(tǒng)的搭建等問題都需要新工具解決.[1]Python以其優(yōu)越的跨平臺性和強(qiáng)大的科學(xué)計算功能,正獲得越來越多科研人員的青睞.不少商業(yè)CAE軟件也提供對Python腳本語言的支持,例如Abaqus二次開發(fā)環(huán)境提供的腳本接口就是基于Python語言進(jìn)行定制開發(fā)的.

        目前,SiPESC平臺已經(jīng)實(shí)現(xiàn)對JavaScript腳本語言的支持,用戶可以通過JavaScript語言調(diào)用平臺上所有的功能插件完成各種任務(wù).為進(jìn)一步豐富SiPESC平臺的腳本語言環(huán)境,彌補(bǔ)JavaScript語言在模塊開放性等方面的不足,平臺開發(fā)小組引進(jìn)Python作為新的腳本支持引擎.在SiPESC平臺上Python具有以下優(yōu)勢:

        1)執(zhí)行相應(yīng)操作所需的代碼少,代碼編寫簡單.[2]

        2)通過判斷、循環(huán)和數(shù)據(jù)存儲與處理等語句,易于實(shí)現(xiàn)人工智能控制和自動化處理過程.

        3)對優(yōu)化問題易于實(shí)現(xiàn)參數(shù)化分析,且代碼結(jié)構(gòu)合理易讀,便于修改.

        4)可以編寫?yīng)毩⒌哪K,使用Python,C,C++和Fortran等語言擴(kuò)展SiPESC平臺的功能.

        5)提供優(yōu)秀的異常拋出和處理機(jī)制,縮短調(diào)試腳本的時間.

        1Python語言及其擴(kuò)展方法

        1.1Python語言概述

        Python是一門優(yōu)雅而健壯的編程語言,繼承傳統(tǒng)編譯語言的強(qiáng)大性和通用性,同時也借鑒簡單腳本和解釋語言的易用性.[3]其高效率的高層數(shù)據(jù)結(jié)構(gòu)和簡單易學(xué)的面向?qū)ο缶幊烫攸c(diǎn),在很多平臺上都得到很好的應(yīng)用,成為在這些平臺上進(jìn)行快速應(yīng)用程序開發(fā)的主流腳本語言.[4]Python能夠在Linux,Windows,Mac OS,F(xiàn)reeBSD和Solaris等主流操作系統(tǒng)中運(yùn)行,其代碼幾乎無須進(jìn)行任何修改就能在這些操作系統(tǒng)中執(zhí)行,具有很強(qiáng)的跨平臺性.自從1989年Guido van Rossum始創(chuàng)Python以來,經(jīng)過十幾年的發(fā)展,Python已經(jīng)包含一系列完善、簡易的標(biāo)準(zhǔn)庫,足以完成文本處理、算法實(shí)現(xiàn)、科學(xué)計算、文件管理、界面設(shè)計和網(wǎng)絡(luò)通信等常見任務(wù),同時其還提供一套豐富的API,能夠幫助程序員輕松地使用其他編程語言編寫擴(kuò)展模塊.這種可擴(kuò)展性讓程序員能靈活附加或定制工具,大大縮短開發(fā)周期,并使代碼的性能得到顯著提升.[3]

        1.2Python的通用擴(kuò)展方法

        早期的編程語言并不具備可擴(kuò)展性,程序員只能使用現(xiàn)有的功能而無法向該語言增加新的功能.Python作為最早一批提供可擴(kuò)展性能的語言,在支持使用純Python語言編寫擴(kuò)展的同時,也支持C,C++和Java等主流編程語言的擴(kuò)展.抽象的動態(tài)加載機(jī)制讓擴(kuò)展與解釋器之間的交互方式與Python的內(nèi)置模塊完全一致,并且不區(qū)分編寫擴(kuò)展所使用的語言.

        Python擴(kuò)展模塊主要通過Python的C語言應(yīng)用程序編程接口Python/C API實(shí)現(xiàn),其創(chuàng)建過程主要分以下幾個步驟[57]:

        1)包含Python頭文件.通過Python.h文件導(dǎo)入到Python API并完成必要的預(yù)處理定義.

        2)編寫具體實(shí)現(xiàn)并封裝.使用其他編程語言實(shí)現(xiàn)具體的功能函數(shù)和類,并將其封裝成能讓Python解釋器識別的形式.

        3)編寫初始化函數(shù).初始化函數(shù)主要完成模塊對象創(chuàng)建和導(dǎo)入工作.

        4)編譯和鏈接.可以通過Python自身提供的distutils包或g++和gcc等編譯器完成編譯和鏈接.

        除以上的擴(kuò)展方法外,也可以通過第三方的封裝工具,如Boost.Python,SWIG,Pyrex和Psyco等編寫Python的擴(kuò)展模塊.

        2擴(kuò)展模塊的設(shè)計

        傳統(tǒng)的Python擴(kuò)展模塊封裝方法為靜態(tài)封裝,即每項擴(kuò)展中增加一個新的功能,都需修改源代碼,并重新編譯.這種封裝方法工作量大,缺乏靈活性,開發(fā)效率低,也無法匹配SiPESC平臺的開放性.本文采用動態(tài)封裝的方法,充分利用SiPESC平臺軟件體系的動態(tài)性,實(shí)現(xiàn)對任意插件的自動封裝而無須修改源代碼.這種自動封裝技術(shù)也是SiPESC平臺腳本語言環(huán)境的體系結(jié)構(gòu)(見圖1)中的重要環(huán)節(jié).

        圖 1SiPESC.LAB軟件體系結(jié)構(gòu)

        Fig.1Software architecture of SiPESC.LAB

        2.1擴(kuò)展模塊的系統(tǒng)分析

        2.1.1用戶需求分析

        不同的用戶對SiPESC平臺和Python腳本語言的了解程度不同,其使用Python擴(kuò)展模塊的目的也不盡相同.可以將Python擴(kuò)展模塊的用戶分成以下2類.

        1)普通用戶,指對Python腳本語言了解很少甚至從未接觸過Python,僅想通過腳本調(diào)用SiPESC平臺的插件進(jìn)行一般計算分析或其他基本操作的用戶.對于該類用戶,要盡量使擴(kuò)展模塊中調(diào)用SiPESC平臺功能插件所要使用的腳本代碼規(guī)范化,讓他們能通過使用手冊中的介紹或示例很容易地編寫腳本、調(diào)用插件.為此,Python擴(kuò)展模塊的設(shè)計要結(jié)構(gòu)清晰,層次分明,不容易造成混淆,讓用戶一目了然.同時,擴(kuò)展模塊中的類名、函數(shù)名要盡量與原有JavaScript腳本引擎一致,保證那些JavaScript用戶也能很快適應(yīng)新的腳本引擎.endprint

        2)高級用戶,指非常熟悉Python語言并能熟練使用Python的一些第三方擴(kuò)展庫的用戶.他們不僅想通過腳本使用平臺的功能,同時還想利用Python的第三方庫進(jìn)行一些高級應(yīng)用,實(shí)現(xiàn)多模塊的集成.為了能讓平臺的功能與Python的第三方庫更好地結(jié)合,需要在設(shè)計擴(kuò)展模塊時盡量使用Python的內(nèi)建數(shù)據(jù)類型,同時讓模塊里的方法更加通用,完善對常用第三方庫中數(shù)據(jù)類型的支持.

        2.1.2任務(wù)分析

        基于SiPESC平臺的Python擴(kuò)展模塊的價值在于為Python腳本語言與SiPESC集成平臺之間搭建一座橋梁,在極大擴(kuò)展Python功能的同時也方便平臺中腳本語言的使用.任何一臺安裝SiPESC集成平臺和Python環(huán)境的用戶計算機(jī),都可以在不啟動平臺的情況下,使用幾行簡單的腳本代碼調(diào)用平臺的各個功能,而高級用戶更是能結(jié)合平臺的計算分析功能以及Python第三方庫的其他功能,搭建一個功能強(qiáng)大的集成環(huán)境.

        通過獨(dú)立的腳本代碼即可調(diào)用SiPESC的各功能插件,需要讓擴(kuò)展模塊完全脫離平臺的GUI界面,而通過鏈接SiPESC平臺中插件管理相關(guān)的動態(tài)庫實(shí)現(xiàn)兩者的交互.平臺插件與Python第三方庫的結(jié)合使用,需要規(guī)范擴(kuò)展模塊的數(shù)據(jù)類型,盡可能使用Python的內(nèi)建類型,提高數(shù)據(jù)類型在各擴(kuò)展中的兼容性.同時, 針對SiPESC平臺的軟件結(jié)構(gòu)體系,需要擴(kuò)展模塊必須具有一定的動態(tài)性,即對于已有或未來開發(fā)的插件都能在不修改代碼、不重新編譯的情況下被擴(kuò)展模塊動態(tài)地加載使用.

        2.1.3接口分析

        為實(shí)現(xiàn)Python腳本與SiPESC平臺的交互,需要分析SiPESC平臺插件管理機(jī)制,尋找關(guān)鍵的接口,并實(shí)現(xiàn)在擴(kuò)展模塊中封裝.這樣,Python解釋器就能通過這些接口訪問SiPESC平臺中的各功能插件,完成相應(yīng)的工作.SiPESC平臺采用統(tǒng)一的接口管理模式[8],其插件管理器類圖見圖插件管理器類用于管理系統(tǒng)中所有的插件,包括加載、卸載和查詢等操作.平臺啟動時會首先調(diào)用initialize方法初始化插件管理器,創(chuàng)建全局的插件管理器對象.可以使用getManager方法獲得相應(yīng)的插件管理器對象,并通過注冊、加載和啟用擴(kuò)展等方法動態(tài)地配置所需的平臺環(huán)境.平臺上具體的功能通過各個擴(kuò)展對象實(shí)現(xiàn),由功能擴(kuò)展管理器類創(chuàng)建并管理.

        功能擴(kuò)展管理器類實(shí)現(xiàn)對各種插件中的功能擴(kuò)展的管理和查詢等功能.SiPESC平臺中功能擴(kuò)展管理器類圖見圖3.

        getManager方法用于獲得一個全局功能擴(kuò)展管理器對象,由這個全局對象管理平臺上的各種功能,實(shí)現(xiàn)插件的調(diào)用與功能擴(kuò)展對象的創(chuàng)建等.createExtension方法用于創(chuàng)建一個指定名稱的功能擴(kuò)展對象.createExtensionCaller方法則只用于內(nèi)部使用,無須暴露給用戶.其他的方法均提供相應(yīng)的查詢功能,方便用戶獲取擴(kuò)展對象的具體信息.

        2.2擴(kuò)展模塊中類的設(shè)計

        根據(jù)對SiPESC平臺接口的分析,為實(shí)現(xiàn)使用Python腳本調(diào)用SiPESC平臺上的插件的功能,需要在擴(kuò)展模塊中封裝一個MExtensionManager類,向用戶提供通過腳本代碼對SiPESC平臺上的插件進(jìn)行查詢、管理和調(diào)用的功能.同時,其能獲得所調(diào)用的插件中的功能擴(kuò)展對象,利用創(chuàng)建擴(kuò)展對象的方法創(chuàng)建相應(yīng)的功能擴(kuò)展對象,并可以訪問該對象的全部方法和屬性.

        為更好地控制擴(kuò)展模塊中底層的數(shù)據(jù)處理和對象創(chuàng)建過程,不使用第三方擴(kuò)展工具,而是純粹利用Python/C API實(shí)現(xiàn)擴(kuò)展模塊的編寫.同時,由于SiPESC平臺是基于Qt開發(fā)的,為能與SiPESC平臺插件管理器中的類型互相兼容,在編寫擴(kuò)展時大量地使用Qt庫中的類型.區(qū)別于傳統(tǒng)的Python擴(kuò)展模塊編寫方法,為實(shí)現(xiàn)動態(tài)封裝機(jī)制,還需使用JIT(即時編譯)技術(shù).[910]

        對于擴(kuò)展模塊中的MExtensionManager類,其接口與SiPESC平臺上的功能擴(kuò)展管理器類的接口基本一致,且返回值均為PyObject*類型(構(gòu)造函數(shù)除外).其實(shí)擴(kuò)展模塊只是將平臺的接口進(jìn)行二次封裝,具體實(shí)現(xiàn)時調(diào)用的仍是平臺上的方法.MExtensionManager類是擴(kuò)展模塊的一個靜態(tài)類,根據(jù)Python擴(kuò)展的規(guī)則,其所有的方法都必須是靜態(tài)的,而且只能有2個參數(shù),類型也只能是PyObject*.

        3擴(kuò)展模塊的實(shí)現(xiàn)

        3.1擴(kuò)展模塊的運(yùn)行流程

        程序能否正確地實(shí)現(xiàn)所采用的理論和方法并正確地運(yùn)行,流程(框圖)設(shè)計是先導(dǎo)和關(guān)鍵.根據(jù)上文對基于SiPESC平臺的Python擴(kuò)展模塊的設(shè)計,可以畫出該擴(kuò)展模塊在平臺上使用時的工作流程圖,見圖4.全局插件管理器對象的初始化與獲取在擴(kuò)展模塊的初始化函數(shù)中完成,其他步驟均通過函數(shù)的封裝實(shí)現(xiàn).流程圖中對功能擴(kuò)展類是否已注冊的查詢,可以防止重復(fù)注冊相同的功能擴(kuò)展類,提高運(yùn)行效率.

        圖 4Python擴(kuò)展模塊的運(yùn)行流程

        3.2PyObject與QVariant的類型轉(zhuǎn)換

        在具體實(shí)現(xiàn)擴(kuò)展模塊中的類時,Python對象與QVariant對象之間的類型轉(zhuǎn)換被反復(fù)地使用.前文已經(jīng)提到過,Python中所有方法的返回值都是PyObject*類型,其參數(shù)也必須是PyObject*類型,這些PyObject*指針都指向各自的Python對象.但是,SiPESC平臺上所有方法的返回值和參數(shù)均為QVariant類型,因此必須實(shí)現(xiàn)PyObject與QVariant之間的相互轉(zhuǎn)換.Python提供PyObject與C數(shù)據(jù)類型對象相互轉(zhuǎn)換的API,而QVariant與C數(shù)據(jù)類型對象之間的相互轉(zhuǎn)換也很容易實(shí)現(xiàn),這樣便能通過2次轉(zhuǎn)換實(shí)現(xiàn)PyObject與QVariant的轉(zhuǎn)換.

        作為一種動態(tài)語言,Python腳本語言中的變量在使用前不需要聲明、定義,其類型根據(jù)給變量所賦的值自動判斷,可以大大地簡化從PyObject對象轉(zhuǎn)換成QVariant類型的過程.可以使用Python中判斷變量類型的API加上類型轉(zhuǎn)換函數(shù)自動完成PyObject到QVariant的轉(zhuǎn)換,而無須知道PyObject在Python中屬于哪種類型.將PyObject轉(zhuǎn)換為QVariant的函數(shù)原型為endprint

        QVariant PyObjToQVariant(PyObject* obj)

        PyObject類型的指針指向需要轉(zhuǎn)換的Python對象,可以通過PyObject_TypeCheck接口判斷該對象在Python中表示的類型,之后調(diào)用相應(yīng)的Python類型轉(zhuǎn)換API(如PyInt_AS_LONG)將該對象轉(zhuǎn)換為C語言的數(shù)據(jù)類型,進(jìn)而轉(zhuǎn)化為QVariant類型.

        同理,可以使用QVariant的內(nèi)置方法將其轉(zhuǎn)換為C數(shù)據(jù)類型,并調(diào)用相應(yīng)的API(如PyInt_FromLong)完成向PyObject類型的轉(zhuǎn)換.實(shí)現(xiàn)這個過程的函數(shù)原型為

        PyObject* QVarToPyObj(const QVariant& val)

        3.3MExtensionManager類的封裝

        在擴(kuò)展模塊中,只有MExtensionManager類是靜態(tài)定義的,用于實(shí)現(xiàn)SiPESC平臺上的功能擴(kuò)展的加載和調(diào)用,其他功能擴(kuò)展類都通過MExtensionManager類在Python引擎上創(chuàng)建、注冊和調(diào)用.因此,在擴(kuò)展模塊中只實(shí)現(xiàn)MExtensionManager一個類,而該類的結(jié)構(gòu)與SiPESC平臺功能擴(kuò)展管理器類一致,擴(kuò)展模塊中的方法內(nèi)部調(diào)用的其實(shí)也是平臺上的方法.由SiPESC平臺插件管理器的接口可知,該類中大多數(shù)的方法都是用來進(jìn)行查詢的,對于這些類方法,實(shí)現(xiàn)很簡單,只需將從腳本獲得的參數(shù)轉(zhuǎn)換為QVariant類型,并傳給平臺調(diào)用功能擴(kuò)展管理器類的相應(yīng)方法,獲得返回值,然后將返回值轉(zhuǎn)換回PyObject*類型并輸出.

        createExtension方法是MExtensionManager類中最關(guān)鍵的方法,其根據(jù)獲得的參數(shù)創(chuàng)建相應(yīng)的功能擴(kuò)展類對象.該方法在被調(diào)用時先查詢該功能擴(kuò)展類是否已在Python引擎中注冊,若未注冊,則先獲取功能擴(kuò)展類的信息對象(MextensionInfo對象),接著根據(jù)這個信息創(chuàng)建相應(yīng)的類(如果該類的父類未在Python引擎中注冊,則會先創(chuàng)建父類),然后將創(chuàng)建的類注冊給Python,最后通過類的構(gòu)造函數(shù)創(chuàng)建對象并返回.同時,創(chuàng)建的對象將會被存儲起來,供腳本調(diào)用.

        使用createExtension方法創(chuàng)建Python的新類型時,需要提供該類的方法列表,該方法列表為以下形式的結(jié)構(gòu)體:

        ml_name為函數(shù)名,ml_meth為函數(shù)指針,ml_flags指示函數(shù)的調(diào)用方式,ml_doc則為函數(shù)說明.其中,由于動態(tài)性的需求,ml_meth通過JIT技術(shù)在運(yùn)行時動態(tài)獲得,而其他參數(shù)可根據(jù)對應(yīng)的MExtensionInfo對象確定.

        3.4初始化函數(shù)的編寫

        在完成MExtensionManager類的封裝之后,需要編寫擴(kuò)展模塊的初始化函數(shù).Python中創(chuàng)建一個模塊的API原型為

        PyObject* Py_InitModule3(char *name, PyMethodDef *methods, char *doc)

        Python根據(jù)模塊名name和模塊層的方法列表methods構(gòu)造一個新模塊并返回.如果參數(shù)doc不為空,則此處為模塊的一些信息.為向模塊中添加自定義類,還需要在模塊的初始化函數(shù)中使用添加自定義類的API,其原型為

        int PyModule_AddObject(PyObject *module, const char *name, PyObject *value)

        module為之前創(chuàng)建的模塊,name為自定義類的名字,value則是定義類在Python中的類對象的結(jié)構(gòu)體,包含自定義類的全部信息.因為本擴(kuò)展模塊的動態(tài)特性,只有MExtensionManager類是在初始化時便添加到模塊中,其他類均在使用時根據(jù)需求動態(tài)地添加,所以創(chuàng)建的模塊必須是一個全局的靜態(tài)變量,這樣在程序的每個地方,都能使用這個變量添加類.同時,在初始化函數(shù)中還需調(diào)用SiPESC平臺中MPluginManager類的initialize方法完成平臺的初始化.

        4應(yīng)用實(shí)例

        為驗證本文實(shí)現(xiàn)的擴(kuò)展模塊在驅(qū)動SiPESC平臺復(fù)雜工作流程中的實(shí)用性及其與Python第三方庫的良好兼容性,考慮圖5所示的GARTEUR飛機(jī)模型的修正問題,通過優(yōu)化6個部位的彈性模量,使模型前9階振動頻率與試驗值的方差取最小值.

        該算例通過SiPESC.OPT插件控制優(yōu)化流程,由ANSYS進(jìn)行頻率計算,并通過Python的二維畫圖庫Matplotlib實(shí)現(xiàn)迭代歷程的輸出,見圖6.整個優(yōu)化過程都通過Python的腳本代碼驅(qū)動,其中部分關(guān)鍵的語句如下:

        5結(jié)論

        基于SiPESC平臺的開放性設(shè)計并實(shí)現(xiàn)相應(yīng)的Python擴(kuò)展模塊.通過該擴(kuò)展模塊,可以使用腳本語言調(diào)用SiPESC中的插件實(shí)現(xiàn)數(shù)值計算和優(yōu)化分析等功能,并可集成Python的第三方庫,創(chuàng)建復(fù)雜工作流程.本文提出動態(tài)封裝的思想,相對于傳統(tǒng)的靜態(tài)封裝方式,提高擴(kuò)展模塊的靈活性,節(jié)約開發(fā)時間.目前,該擴(kuò)展模塊的主要功能已基本完成,下一步工作將集中在完善動態(tài)類型轉(zhuǎn)換機(jī)制以及大量復(fù)雜實(shí)例的測試上.

        參考文獻(xiàn):

        [1]PREZ F, GRANGER B E, HUNTER J D. Python: an ecosystem for scientific computing[J]. Comput Sci & Eng, 2011, 13(2): 1321.

        [2]曹金鳳, 王旭春, 孔亮. Python語言在Abaqus中的應(yīng)用[M]. 北京: 機(jī)械工業(yè)出版社, 2011: 810.

        [3]CHUN W J. Python 核心編程[M]. 宋吉廣, 譯. 2版. 北京: 人民郵電出版社, 2008: 47.endprint

        [4]李勇, 王文強(qiáng). Python Web開發(fā)學(xué)習(xí)實(shí)錄[M]. 北京: 清華大學(xué)出版社, 2011: 2.

        [5]van ROSSUM G. Extending and embedding Python, Release 2.7.7[EB/OL]. (20121029)[20130610]. https://docs.python.org/2.7/extending/index.html.

        [6]BEAZLEY D M. Python: essential reference[M]. New Jersey: AddisonWesley, 2009: 591608.

        [7]羅霄, 任勇, 山秀明. 基于 Python 的混合語言編程及其實(shí)現(xiàn)[J]. 計算機(jī)應(yīng)用與軟件, 2004, 21(12): 1718.

        LUO Xuiao, REN Yong, SHAN Xiuming. Python based mixedlanguage programming and its implementation[J]. Comput Appl & Software, 2004, 21(12): 1718.

        [8]張洪武, 陳飆松, 李云鵬, 等. 面向集成化CAE軟件開發(fā)的SiPESC研發(fā)工作進(jìn)展[J]. 計算機(jī)輔助工程, 2011, 20(2): 3949.

        ZHANG Hongwu, CHEN Biaosong, LI Yunpeng, et al. Advancement of design and implementation of SiPESC for development of integrated CAE software systems[J]. Comput Aided Eng, 2011, 20(2): 3949.

        [9]SUGANUMA T, OGASAWARA T, TAKEUCHI M, et al. Overview of the IBM Java justintime compiler[J]. IBM sys J, 2000, 39(1): 175193.

        [10]閆偉, 谷建華. Java虛擬機(jī)即時編譯器的一種實(shí)現(xiàn)原理[J]. 微處理機(jī), 2007, 28(5): 5860.

        YAN Wei, GU Jianhua. One of JIT compiler's implementation in JVM[J]. Microprocessors, 2007, 28(5): 5860.

        (編輯武曉英)endprint

        [4]李勇, 王文強(qiáng). Python Web開發(fā)學(xué)習(xí)實(shí)錄[M]. 北京: 清華大學(xué)出版社, 2011: 2.

        [5]van ROSSUM G. Extending and embedding Python, Release 2.7.7[EB/OL]. (20121029)[20130610]. https://docs.python.org/2.7/extending/index.html.

        [6]BEAZLEY D M. Python: essential reference[M]. New Jersey: AddisonWesley, 2009: 591608.

        [7]羅霄, 任勇, 山秀明. 基于 Python 的混合語言編程及其實(shí)現(xiàn)[J]. 計算機(jī)應(yīng)用與軟件, 2004, 21(12): 1718.

        LUO Xuiao, REN Yong, SHAN Xiuming. Python based mixedlanguage programming and its implementation[J]. Comput Appl & Software, 2004, 21(12): 1718.

        [8]張洪武, 陳飆松, 李云鵬, 等. 面向集成化CAE軟件開發(fā)的SiPESC研發(fā)工作進(jìn)展[J]. 計算機(jī)輔助工程, 2011, 20(2): 3949.

        ZHANG Hongwu, CHEN Biaosong, LI Yunpeng, et al. Advancement of design and implementation of SiPESC for development of integrated CAE software systems[J]. Comput Aided Eng, 2011, 20(2): 3949.

        [9]SUGANUMA T, OGASAWARA T, TAKEUCHI M, et al. Overview of the IBM Java justintime compiler[J]. IBM sys J, 2000, 39(1): 175193.

        [10]閆偉, 谷建華. Java虛擬機(jī)即時編譯器的一種實(shí)現(xiàn)原理[J]. 微處理機(jī), 2007, 28(5): 5860.

        YAN Wei, GU Jianhua. One of JIT compiler's implementation in JVM[J]. Microprocessors, 2007, 28(5): 5860.

        (編輯武曉英)endprint

        [4]李勇, 王文強(qiáng). Python Web開發(fā)學(xué)習(xí)實(shí)錄[M]. 北京: 清華大學(xué)出版社, 2011: 2.

        [5]van ROSSUM G. Extending and embedding Python, Release 2.7.7[EB/OL]. (20121029)[20130610]. https://docs.python.org/2.7/extending/index.html.

        [6]BEAZLEY D M. Python: essential reference[M]. New Jersey: AddisonWesley, 2009: 591608.

        [7]羅霄, 任勇, 山秀明. 基于 Python 的混合語言編程及其實(shí)現(xiàn)[J]. 計算機(jī)應(yīng)用與軟件, 2004, 21(12): 1718.

        LUO Xuiao, REN Yong, SHAN Xiuming. Python based mixedlanguage programming and its implementation[J]. Comput Appl & Software, 2004, 21(12): 1718.

        [8]張洪武, 陳飆松, 李云鵬, 等. 面向集成化CAE軟件開發(fā)的SiPESC研發(fā)工作進(jìn)展[J]. 計算機(jī)輔助工程, 2011, 20(2): 3949.

        ZHANG Hongwu, CHEN Biaosong, LI Yunpeng, et al. Advancement of design and implementation of SiPESC for development of integrated CAE software systems[J]. Comput Aided Eng, 2011, 20(2): 3949.

        [9]SUGANUMA T, OGASAWARA T, TAKEUCHI M, et al. Overview of the IBM Java justintime compiler[J]. IBM sys J, 2000, 39(1): 175193.

        [10]閆偉, 谷建華. Java虛擬機(jī)即時編譯器的一種實(shí)現(xiàn)原理[J]. 微處理機(jī), 2007, 28(5): 5860.

        YAN Wei, GU Jianhua. One of JIT compiler's implementation in JVM[J]. Microprocessors, 2007, 28(5): 5860.

        (編輯武曉英)endprint

        猜你喜歡
        腳本語言
        JavaScript的內(nèi)存溢出與內(nèi)存泄漏
        鋒繪(2019年11期)2019-12-20 03:04:57
        淺談自動編程后處理插件與機(jī)床匹配
        一種面向SSC的電信增值業(yè)務(wù)的生成方法及實(shí)現(xiàn)
        基于Unity3D的坦克大戰(zhàn)游戲設(shè)計與實(shí)現(xiàn)
        淺析計算機(jī)技術(shù)在flash動畫中的應(yīng)用
        SWiSHmax2與FlashCS3的腳本語言對比分析
        欧美尺寸又黑又粗又长| 91熟女av一区二区在线| 日韩精品极品免费视频观看| 免费又黄又爽又色的视频| 伊人久久精品久久亚洲一区| 国产午夜成人久久无码一区二区| 无码视频一区=区| 精品蜜桃av免费观看| 国产精品主播在线一区二区| 蜜臀av午夜一区二区三区| 无码h黄动漫在线播放网站| 日本做受高潮好舒服视频| 无码人妻AⅤ一区 二区 三区| 喷潮出白浆视频在线观看| 久久精品国产亚洲av久五月天| 九九影院理论片私人影院| 久久久久女人精品毛片| 久久综合视频网站| 国产福利美女小视频| 日本女优爱爱中文字幕| 国语对白福利在线观看| av 日韩 人妻 黑人 综合 无码| 免费无码肉片在线观看| 喷潮出白浆视频在线观看| 亚洲自拍偷拍一区二区三区 | 亚洲av熟女少妇久久| 国产无遮挡又黄又爽免费网站| 精品视频一区二区三三区四区| 宅男久久精品国产亚洲av麻豆| 成熟的女人毛茸茸色视频| 手机看黄av免费网址| 国产乱人伦av在线无码| 国产一区二区三区免费精品| 国家一级内射高清视频| 中文字幕有码无码人妻av蜜桃| 亚洲综合色婷婷七月丁香| 久久欧美与黑人双交男男| 国产一区二区三区高清视频| 国产精品一区二区久久久av| 无码人妻精品一区二区三区9厂| 无遮挡边吃摸边吃奶边做|