JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Languages on JVM » Groovy  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Groovy, 為 Java 專門設計的動態語言
tempo



版主

發文: 645
積分: 7
於 2003-09-17 14:39 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
這是一個剛開始的計畫, 計畫的主持人同時還有 dom4j, jelly, ... 等計畫..
計畫的目的是希望能有像 python, ruby 一般的動態語言, 不過能同時與靜態的 Java 並存..
覺得還滿有趣的, 之前用 jython 也常常會跟作者一樣會有少許排斥感..
不管是語法會是設計方向..

希望這個計畫可以趕快有產品出來..Smile

http://radio.weblogs.com/0112098/2003/08/29.html

http://groovy.codehaus.org/


reply to postreply to post
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:tempo]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2003-09-17 20:42 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
tempo wrote:
這是一個剛開始的計畫, 計畫的主持人同時還有 dom4j, jelly, ... 等計畫..
計畫的目的是希望能有像 python, ruby 一般的動態語言, 不過能同時與靜態的 Java 並存..
覺得還滿有趣的, 之前用 jython 也常常會跟作者一樣會有少許排斥感..
不管是語法會是設計方向..

希望這個計畫可以趕快有產品出來..Smile

http://radio.weblogs.com/0112098/2003/08/29.html

http://groovy.codehaus.org/


畢竟 Jython 是 Python 的一種,只是用 Java platform 來實做,語法方面是遵守 Python 的定義,對 Java programmer 來說當然會有些不習慣。

可是話說回來,我到 Groovy 網頁看了一下,他擷取其他程式語言的一些優點(如 Python, C#),也許可以造就出一個比較完美的程式語言,但說起來你還是在無形中學習了其他的 PL 的部分,雖然他的目標是專為 Java platform 而設計,但是語法部分是個大鍋菜(而不是 base on Java PL 而來),用起來就會比較適應愉快嗎?(和 Java 整合一定是比較吃香)

我個人覺得 Python 的語法和 Java 比較起來又更精鍊許多,如果各位是把自己定位在 programmer(不只是 Java programmer),多學習一些其他語言總是有益的,學習過程可以多加瞭解各語言的優缺點,在面對不同的領域時也有比較多的選擇。有些程式語言的學習曲線比較長(如 C++),剛開始不妨先挑一些簡潔一點的來下手,我覺得 Python 是個不錯的選擇0(Ruby/Icon 可能也是,我還沒摸過),特別是他的姊妹品 Jython 對 Java programmer 而言,可算是不錯的工具了。

我還記得我剛開始對於 C++ 和 Java 之間的一些不同的語法與概念搞的有點亂,看到 C# 甚至產生排斥感了(半 C++,半 Java)。但等到 Groovy 成熟一點,我還是會實際玩玩看。


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:Duncan]
tempo



版主

發文: 645
積分: 7
於 2003-09-17 22:53 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Duncan wrote:
畢竟 Jython 是 Python 的一種,只是用 Java platform 來實做,語法方面是遵守 Python 的定義,對 Java programmer 來說當然會有些不習慣。

有些事情是超越語法的..
語法可以改變, 或是用程式轉換(如 XDoclet)..
我也可以接受用 Tab 來定義 block, 也很喜歡 array 這類東西的操作方式..

不過, jython 在 OO 這方面的支援, 我只能說真的不接受囉..

我會很期待一個新的 script 語言, 能夠繼承這些動態語言語法上的方便性..
可以跟 Java 整合在一起..(最好可以共存, 不要的時候可以拔掉)

不過, 請不要動像 OO (Java/C++方式) 這一類大家很熟的基本面..

當然這些都是我個人的偏好囉..Smile

可是話說回來,我到 Groovy 網頁看了一下,他擷取其他程式語言的一些優點(如 Python, C#),也許可以造就出一個比較完美的程式語言,但說起來你還是在無形中學習了其他的 PL 的部分,雖然他的目標是專為 Java platform 而設計,但是語法部分是個大鍋菜(而不是 base on Java PL 而來),用起來就會比較適應愉快嗎?(和 Java 整合一定是比較吃香)

也許會, 也許不會..
不過看現在有的 syntax 還不錯..Smile

groovy 是要新開創語法, 所以目標是做到 JVM 相容..
跟 Java PL 相容就沒辦法開創新語法了..
Java 不像 Python 一樣有一個很好的 open source group 在背後推動更新..
所以要推動 Java PL 改變實在是不容易..


reply to postreply to post
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:tempo]
yentingchen





發文: 3
積分: 0
於 2003-09-17 23:19 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
tempo wrote:
這是一個剛開始的計畫, 計畫的主持人同時還有 dom4j, jelly, ... 等計畫..
計畫的目的是希望能有像 python, ruby 一般的動態語言, 不過能同時與靜態的 Java 並存..


你好,
有個問題想請教一下, 看到您說python, ruby是屬於動態語言, 而java是屬於靜態語言,
我想問的是, 怎麼區分動態跟靜態語言呢?? 他們是如何定義的呢??

突然想到, 在台灣, 是否有公司有用到python或是ruby, 來開發產品呢??
還是說用在開發內部使用的程式??


reply to postreply to post
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:yentingchen]
tempo



版主

發文: 645
積分: 7
於 2003-09-17 23:44 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
yentingchen wrote:
你好,
有個問題想請教一下, 看到您說python, ruby是屬於動態語言, 而java是屬於靜態語言,
我想問的是, 怎麼區分動態跟靜態語言呢?? 他們是如何定義的呢??

突然想到, 在台灣, 是否有公司有用到python或是ruby, 來開發產品呢??
還是說用在開發內部使用的程式??


對不起, 我不知道怎麼定義..只是覺得這樣而已..Big Smile

應該是說 python, ruby (還有 vb) 都比較依賴 runtime 的判斷與檢查來達到某些語法的目的..
相對而言 java 語法就比較依賴 compiler, 沒有這麼依靠 runtime..

另外, python, ruby 跟 vb 都是為 script 為目的而設計的..
也都有直譯式的 console..又動態一點..Tounge

我有聽說有些公司內部用 python 來做一些東西 (IC 設計)..
不過就軟體產品我猜應該是沒有吧, 國外也很少..


reply to postreply to post
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:tempo]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2003-09-17 23:48 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
tempo wrote:
有些事情是超越語法的..
語法可以改變, 或是用程式轉換(如 XDoclet)..
我也可以接受用 Tab 來定義 block, 也很喜歡 array 這類東西的操作方式..

不過, jython 在 OO 這方面的支援, 我只能說真的不接受囉..

我會很期待一個新的 script 語言, 能夠繼承這些動態語言語法上的方便性..
可以跟 Java 整合在一起..(最好可以共存, 不要的時候可以拔掉)

不過, 請不要動像 OO (Java/C++方式) 這一類大家很熟的基本面..

當然這些都是我個人的偏好囉..Smile


你似乎蠻不能接受 Python 的 OO 觀。

說真的 Groovy 網頁上介紹 syntax 的部分(目前是不是到 1.5),我看起來和 Python 的相似度至少在 50% 以上,不曉得為什麼你的接受度會差這麼多?

而且我覺得要讓 jython 做到與 Java 相容是有可能,最大的問題在於 python 可以 multi-inherit(這應該可以解決,像 Groovy 的 mixin 作法),以及 property/method 動態增刪,這應該也沒問題(Groovy - allow new properties on the fly)。


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:tempo]
yentingchen





發文: 3
積分: 0
於 2003-09-17 23:55 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
tempo wrote:
對不起, 我不知道怎麼定義..只是覺得這樣而已..Big Smile

應該是說 python, ruby (還有 vb) 都比較依賴 runtime 的判斷與檢查來達到某些語法的目的..
相對而言 java 語法就比較依賴 compiler, 沒有這麼依靠 runtime..

另外, python, ruby 跟 vb 都是為 script 為目的而設計的..
也都有直譯式的 console..又動態一點..Tounge

我有聽說有些公司內部用 python 來做一些東西 (IC 設計)..
不過就軟體產品我猜應該是沒有吧, 國外也很少..


小弟了解了, 感謝大大的回答 Big Smile


reply to postreply to post
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:tempo]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2003-09-17 23:58 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
tempo wrote:
對不起, 我不知道怎麼定義..只是覺得這樣而已..Big Smile

應該是說 python, ruby (還有 vb) 都比較依賴 runtime 的判斷與檢查來達到某些語法的目的..
相對而言 java 語法就比較依賴 compiler, 沒有這麼依靠 runtime..

另外, python, ruby 跟 vb 都是為 script 為目的而設計的..
也都有直譯式的 console..又動態一點..Tounge

我有聽說有些公司內部用 python 來做一些東西 (IC 設計)..
不過就軟體產品我猜應該是沒有吧, 國外也很少..


聽說國外的公司使用 python 都不想說出來(記得 Python 的網頁要介紹其實用性,有提到許多公司不允許公開他們使用 Python 的資訊,不知道是不是在彭風Smile)。

一般說靜態/動態型別是指在編譯時期型態是否已經由編譯器確認,Java 是 strong-typed PL 檢查可嚴格,當然不是動態型別語言(但如果你純粹用 reflection 機制來設計程式,就可以比較動態了,除了必要的 first class object 的操作,其他的 object 的型別幾乎都是在 runtime 載入 bytecode 後才知道)。而 Smalltalk/Python 之類的語言在編譯時期都不檢查型別,型別錯誤得等到 runtime 才會出現(語言本身有型別的觀念,但用起來好像沒有型別之分)。


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:Duncan]
tempo



版主

發文: 645
積分: 7
於 2003-09-18 02:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Duncan wrote:
你似乎蠻不能接受 Python 的 OO 觀。

說真的 Groovy 網頁上介紹 syntax 的部分(目前是不是到 1.5),我看起來和 Python 的相似度至少在 50% 以上,不曉得為什麼你的接受度會差這麼多?

而且我覺得要讓 jython 做到與 Java 相容是有可能,最大的問題在於 python 可以 multi-inherit(這應該可以解決,像 Groovy 的 mixin 作法),以及 property/method 動態增刪,這應該也沒問題(Groovy - allow new properties on the fly)。

應該是我接受但是不想用..Smile

我不覺得語法像就代表接受度會高呀~~
之前說過了語法我覺得反而次之, 倒是整個語言背後所代表 "對程式設計的看法" 比較重要呀..

我比較不喜歡 Python 的是:
1. method 跟 function 不分, 只是靠第一個 self 參數..
2. 沒有 access protection, 可以讓使用者選擇要不要比較好嘛..

不過:
1. 多重繼承好耶, 或許衝突的解決方式可以有所改進..
2. 用 tab 來分 block 滿帥的..如果能讓使用者選擇 {} 或是 tab 的話更好~~

而 groovy 在這些程式的基礎觀念上還是保持跟 Java 一致, 再加上一點小 AOP..

當然這些都是 python team 做的 design decisions, 無關對錯, 只是我比較不習慣罷了..


tempo edited on 2003-09-18 02:05
reply to postreply to post
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:tempo]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2003-09-18 12:24 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
tempo wrote:
應該是我接受但是不想用..Smile

我不覺得語法像就代表接受度會高呀~~
之前說過了語法我覺得反而次之, 倒是整個語言背後所代表 "對程式設計的看法" 比較重要呀..

我比較不喜歡 Python 的是:
1. method 跟 function 不分, 只是靠第一個 self 參數..
2. 沒有 access protection, 可以讓使用者選擇要不要比較好嘛..


個人的喜好與使用的方式不同罷了!Smile

我主要是拿 jython 來作一些 Java module 的測試用途(我還沒有用 JUnit 的習慣),主要是因為我可以少打一些字,也可以暫時拋開 Java PL 的一些繁文縟節,改用 Python 的觀點來設計,這樣就讓我覺得 jython 很好用了。


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:tempo]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2003-09-18 21:21 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
tempo wrote:
應該是我接受但是不想用..Smile

我比較不喜歡 Python 的是:
1. method 跟 function 不分, 只是靠第一個 self 參數..
2. 沒有 access protection, 可以讓使用者選擇要不要比較好嘛..


也許不應該再聊下去,接下來的內容和 Java 的關係可能越少。

無關乎你我對 Python 的喜好,我就事論事地表述我的一些看法。Python 對 function 與 method 還是有區分的,雖然兩種皆是用相同 def 語意來製作,但是不同的 scope(context) 有不同的效用(意義),不單單只是用第一個參數來區分。
1
2
3
4
5
6
7
class Integer(Object):
  def __init__(self, val):
    self.value = val
  def inc(self, delta):
    self.value += delta
  def __repr__(self):
    return '%d' % self.value

1
2
def IntInc(obj, delta):
  obj.inc(delta)

1
a = Integer(0)


在 class scope 裡以 def 定義的才是 method,而 IntInc 是普通的 function,兩者都有物件 reference 當作第一個參數,但是用法差蠻多的。首先 method 有分 bound/unbound method,Integer.inc 就是一個 unbound method,你可以把他當作一般的 function 般來使用,在 invoke 時要把物件當作第一個參數 pass 過去。
1
Integer.inc(a, 10)   #作用同 IntInc(a, 10)


如果用同於 Java/C++ 類的寫法,a.inc(10) 來 invoke method 是可以的(一般的 function 如 IntInc 就沒有這種用法),但是在 Python 裡有其他的語意在,a.inc 會產生一個 bound method。
1
2
finc=a.inc
finc(10)   # a 的值會增加 10

finc 參考 a.inc 所產生的 bound method,你可以當作一般的 function 來用,不再需要指明作用的對象(object),其作用的對象就是當初產生 bound method 的那個 object(程式碼中 a 所參考的 object)。

至於 access protection 的確是比較為人詬病,Python 的作者一直堅持封裝代表的只是資料的聚集,不一定要有隱藏的作用。或許可以用 Guido van Rossum 所介紹的名稱破壞或其他技巧來做到類似 access privilege 的功能,但是我也覺得做起來太麻煩了。


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:Groovy, 為 Java 專門設計的動態語言 [Re:Duncan]
tempo



版主

發文: 645
積分: 7
於 2003-09-18 21:50 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Duncan wrote:
...
finc 參考 a.inc 所產生的 bound method,你可以當作一般的 function 來用,不再需要指明作用的對象(object),其作用的對象就是當初產生 bound method 的那個 object(程式碼中 a 所參考的 object)。

謝謝 Duncan 的說明..Smile
我想我不能接受的地方, 不完全是那個 self, 而是一個 '看起來相同" 的 function call 其實包含了很多涵義..
或是不同的用法可以有不同的呼叫方式..
有可能讓人不去看看原始碼就不知道在做什麼..Confused

這就像是 C# 引入 struct 關鍵字但是卻保持跟 class 有相同的呼叫方式..
底下實際操作起來卻有不同的效果..

不太能接受這種模糊..Confused


reply to postreply to post
» JWorld@TW »  Languages on JVM » Groovy

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8