成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Jython和JRuby,以及Groovy:Java平臺的統一認識模型

開發 后端
本文從面向方面設計、分析的角度建立Jython和JRuby以及Groovy的統一認識模型,以期對實際開發應用有所指導。

當前,對于Python、Ruby 和Groovy的討論以及學習正如火如荼。很多愛好者出于各種目的都在積極地開發這3種語言的潛力。Python和Ruby也分別有Java的版本:Jython和JRuby,再加上Groovy,把一些軟件初學者,特別是初初弄軟件架構的人員搞得在他們這幾種語言中無從著手進行選擇,本文從面向方面程序設計、分析的角度,幫助初學者對目前很熱的這3種語言進行分類,以期這部分讀者能順利地解決對這3種語言的認識問題,同時也解決一些長期以來糾纏不清的理論問題。為了達到這個目的,我們從以下4個方面來進行敘述:

◆Python、Ruby和Groovy都是動態語言

◆元邏輯編程和面向方面的編程

◆Jython、JRuby和Groovy的語言層次分析

◆如何比較經濟地使用Python、Ruby和Groovy語言

一、Python、Ruby和Groovy都是動態語言

【動態語言】是指用該語言編寫的程序在運行時可以動態地改變程序定義的語言要素的層次結構或內部結構。比如,你可以在運行時用Ruby的反射機制或Groovy的元對象協議(MOP)完成下列編程:

例1:下面是一個Ruby腳本

  1. #Ruby 程序  
  2. #alias_method:用來記錄被覆蓋的方法  
  3. #define_method:重新定義一個方法,一般會調用alias_method保存的方法  
  4. #class_eval: 根據傳入字符串的值,給類增加一個方法。  
  5. def run_before(m)  
  6.        alias_method "__before__#{m}", m  
  7.        define_method(m) {|*arg| yield(*arg); send("__before__#{m}", *arg);}   
  8. end 
  9.    
  10. class Test  
  11.        def run  
  12.               puts "hello, my run" 
  13.        end 
  14.         
  15.        def self.log  
  16.               puts "before run" 
  17.        end 
  18. end 
  19.    
  20. class Test  
  21.        run_before("run") {log}  
  22. end 
  23.    
  24. test = Test.new 
  25. test.run  

例2:下面是一段Groovy腳本

  1. //Groovy程序  
  2. package com.groovy;  
  3. class MOPHandler {  
  4.        static void main(args) {  
  5.               def hndler = new MOPHandler()  
  6.               hndler.helloWorld()  
  7.               hndler.createUser("Joe"18new Date())  
  8.               hndler.name  
  9.               hndler.metaClass.toString()  
  10.        }  
  11.        def invokeMethod(String method, Object params) {  
  12.               println "MOPHandler was asked to invoke ${method}" 
  13.               if(params != null) {  
  14.                      params.each{ println "\twith parameter ${it}" }  
  15.               }  
  16.        }  
  17.        def getProperty(String property) {  
  18.               if (property.equals("name")) {  
  19.                      print "你用過 name 屬性\n" 
  20.               }  
  21.               println "MOPHandler was asked for property ${property}" 
  22.        }  
  23. }  

到這里我們必須提出一個比較嚴肅的問題:像上面我們看到的兩個程序一樣,這種反射式的編程和時下流行的“面向方面”的程序設計到底式什么樣的一個關系呢?

二、元邏輯編程和面向方面的編程

【元邏輯編程】通常是指利用語言本身的各種固有機制,特別是一些語言本身的背景機制進行編程的邏輯機制。比如,反射,又如作用于Java字節碼的一些開源工程項目(像ASM)等等。當你對Jython、JRuby 和 Groovy 的jar包進行分析后,你會發現下面的一張表格:

語言對比條目

Jython

JRuby

Groovy

語言***版本

2.2.1

1.0.3

1.5.1

基本jar

jython.jar 

共計:1177KB

asm-2.2.3.jar

asm-commons-2.2.3.jar

backport-util-concurrent.jar

bsf.jar

jline-0.9.91.jar

jruby.jar

共計:2932030字節

groovy-all-1.5.1.jar

共計:2718KB

字節碼處理

Java的兼容性

稍低

中等

極高

元邏輯編程機制

開發者支持程度

人數少

人數中等

人數呈上升趨勢

掌握難度

及其容易

不易掌握

要懂Java

Web開發框架慣例

Rails

Grails

可編譯特性(Java

可以

可以

可以

原生AOP支持

不支持

偏向于不支持

支持

這份簡單的表格為我們提供了很多有用的信息,在這里我們主要關注——這3種語言的“元邏輯編程”和“面向方面編程(AOP)”兩項內容。

首先我們要清楚元邏輯編程并不是AOP,當前很多的開發者將元邏輯編程和AOP混淆了起來,比如,上面例子1中有些開發者就將它認為是AOP的例子,這里我們來澄清一下相關認識:

1、AOP本身強調的是:連接點、切點、通知以及方面,并且AOP很在乎由這些AOP編程機制帶來的類層次結構的改變。這一點對于無論你用的是靜態織機還是動態織機都一樣。

2、我們不能把類似Java的動態代理機制就認為是AOP的本真編程,比如,例子2中這個Groovy的程序由一個子句:  new MOPHandler()  就沒有被元對象協議捕捉。

因此,我們說:雖然面向方面的分析與設計是帶來軟件革命的一項已經不算新的技術了,但請不要把稍微動態化一點的程序都冠以AOP的標簽,這有助于我們把握技術的前沿方向。所以,在這里由必要向開發界提出元程序邏輯和【AOP本真編程】的概念。我們把應用了【連接點】、【切點】、【通知】以及【方面】的程序設計叫做AOP本真編程或【原生AOP編程】,而以此同元邏輯編程相區別,把AOP本真編程以下的動態化編程稱為元邏輯編程。

三、Python、Ruby和Groovy的語言層次分析

對它們三者的語言層次分析有助于我們把握他們的某些實質。很多開發者都有一個共同認識就是:很難在這三者中做出選擇主要用何種語言進行24小時的開發。這里我們試圖幫助你做出選擇。

其實只要我們以面向方面的程序設計作為未來發展方向的話,一切問題就可以迎刃而解。我們在上的表格中看到,Jython沒有原生的AOP支持,JRuby傾向于不支持原生AOP編程,Groovy的元對象協議就是AOP的制作。說JRuby傾向于不支持AOP是由于在制作JRuby的過程中,ASM的字節碼修改主要是為了Ruby的語法,而不是向Groovy一樣使語言本身具有AOP的功能。于是我們可以用下列圖示表示Jython和JRuby以及Groovy的層次關系:

Jython和JRuby以及Groovy的層次關系 

從圖中我們可以看到,在Java平臺之上,Jython和JRuby作為不具備原生AOP功能基本處于同一層次,而Groovy從原生AOP功能上說比Jython和JRuby都強。

四、如何比較經濟地使用Python、Ruby和Groovy語言

沒有任何一種語言可以徹底地取代另外一種或是所有的語言。因此無論Jython、JRuby和Groovy在AOP的未來功能上如何發展,你都必須對他們進行學習。但是,什么時候該用什么語言進行開發呢?我們來試著總結性回答這個問題。

1、從軟件工程的角度上講,Jython是最節省成本的選擇,JRuby次之,而Groovy雖然也很簡單但深入一點的開發其實還是較為困難的;

2、從個人學習的角度上講,可能有很多人處于Rails的原因會偏愛JRuby,也有一些開發者由于Groovy和Java的無縫集成而使用Groovy,然而大家需要知道的是,在這3種語言中其實個人可能會覺得JRuby非常不容易掌握;

3、從團隊學習和應用的角度講,Jython和Groovy是簡單的,而JRuby是較為困難的;

4、這3種語言都可以進一步結合Java的字節碼處理技術,進一步完成AOP的功能,在這個時候,Jython將碰到的技術問題最多,JRuby次之,而Groovy將碰到的技術問題可能沒有。

在Jython、JRuby和Groovy的應用開發上,但愿本文起到拋磚引玉的作用。

【編輯推薦】

  1. 略談Jython語言:什么是Jython?
  2. Python實用開發指南
  3. Groovy VS JRuby
  4. Ruby實用開發手冊
  5. Java、.Net、PHP、Ruby優劣勢概覽
  6. Groovy創始人:Java面臨終結 Scala將取而代之
責任編輯:yangsai 來源: CSDN博客
相關推薦

2011-06-22 10:14:49

JVM

2012-05-18 00:01:07

JVMJavaJVM平臺

2009-07-17 17:49:39

JRuby學習

2009-07-16 14:26:44

Python和Jyth

2009-07-16 13:09:46

Jython安裝

2011-08-10 09:54:10

JRubyJava 7

2010-05-13 23:31:54

統一通信平臺

2020-09-15 15:06:43

智慧

2012-05-07 23:45:54

FantomJavaJVM

2009-07-14 15:20:25

Jython腳本Jython解釋器

2009-07-17 17:05:29

JRuby是什么JRuby

2009-07-15 16:35:55

Jython訪問Jav

2009-07-10 17:33:39

jython語言什么是JythonJython

2010-05-17 15:58:04

統一通信平臺

2012-02-09 14:59:11

IBMDB2

2009-07-15 16:29:39

Jython連接JavJavaUtils模塊

2018-05-31 21:14:49

Amas大數據監控平臺

2010-07-28 10:21:44

統一計算

2014-12-23 14:41:32

JRuby

2010-05-13 11:23:46

統一通信平臺
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品亚洲成在人线 | 国产成人av在线 | 日韩中文字幕视频 | 成人久久18免费网站图片 | 欧美九九九 | 欧美一区二区二区 | 自拍偷拍一区二区三区 | 99久久精品国产一区二区三区 | www国产成人免费观看视频,深夜成人网 | 国产精品久久久久久网站 | 黄色一级大片视频 | 久久亚洲综合 | 亚洲视频在线观看免费 | 国产精品永久 | 热99| www.99热| 成人精品一区亚洲午夜久久久 | 久久99精品久久久久子伦 | 欧美a在线| 欧美专区在线观看 | 欧美中文一区 | 狠狠色香婷婷久久亚洲精品 | 久久久久一区二区三区 | 成人精品国产一区二区4080 | 国产h视频| 免费视频一区二区 | 久久久看 | 亚洲精品乱码久久久久久按摩观 | 国产电影一区二区 | 日韩视频―中文字幕 | 国产91黄色 | 日韩欧美国产一区二区三区 | av片免费观看 | 日日夜夜狠狠操 | 日韩黄a | 四虎影院免费在线播放 | 操久久| 黄色一级网 | 一区二区三区免费看 | 操久久 | 九九亚洲|