我覺得因為它是Lisp,不是Scheme,所以那個尾端遞迴優化本來就不是它保證要做的東西。也就是說你很簡單的就可以用Java本來的Collection iterator,就是說你其實並不需要很執著的說什麼都用recursion或Pure Function去寫,而是說在該用iterator的時候就是用iterator,該用Collection的時候就是用Collection。
對,很少看到數學界的paper說接下來是56行,它就是我的Model這樣子,對,我覺得像你去arXiv上面,arXiv就是大家送preprint的一個server,應該還是找得到,就是某些特定的數學分支會比較率先開始使用,但是距離一般的⋯
對,離散隨便翻譯都會動,對,但是距離就是一般的*都用*,我覺得那時候ccshan有一句話講得很好,他花了非常多力氣試著教語言學家學會什麼叫 continuation?就是*的這個概念,在Functional Programming的一個概念。
因為他有一個想法,語言學裡面三四個不同的派別都可以用 continuation 來表達,講話的分析可以用*來表達,然後這個可以用 Monoid 來表達,他就發現說他教語言學家這些東西,遠不如他教資訊科學家一點語言學來得容易(笑)
所以我覺得可能還是要*,就是像*,像新一代的數學家,他一開始就有接觸這個,可能不一定非常熟,知道說哪些時候可以拿去用,等到你發展出你自己的一套理論的時候,你就會覺得說我把這個同時給資訊學家是有可能的。
上次*,所以說當我們在數學論文中大量使用這個等於那個、那個等於這個這個的時候,就是我們的怎麼講?論述說這兩個等不等於的那些要素,也許*。就是我一直在想說是不是有一個像這樣的問題?就是數學論文裡面有很多派系?
對啊,可是就是說這有點像那個*寫程式的時候,說:「我只是證明它是對,我沒有跑過喔。」可是它的那個證明畢竟還是 formal language,你現在講的是說我用英文稍微帶過去。如果是就是做結構式數學的朋友的話,就會覺得說這根本不用證明啊!
它可以 embed,它可以 embed 進去,比如說你可以加。
對,你可以把它 model 進一個*,事實上他們雙方都有 embed 的方法,其實你在之後就*,就是你要寫很多字,而且並不是那麼容易看得懂,但是是存在這種方法,這個我並不是很熟悉。
如果我想要*,就是因為我們知道說*,知道現在有人在⋯我們也要讓*。
有幾個 mail list,有幾個…有幾個討論區,我可能要稍微Google一下,然後再回給你,就是我有空的時候看,其實大家有空的時候都可以加我臉書,你有其他的問題就再message我,然後我再把 url 貼給你。
目前有在用 haskell 做 openCV 的問題,就是*不管商業上或*。
做那個...network machine learning 是有人這樣,那個也可以拿來做*,當然直接往 OpenCV 做 binding 那個也是有 binding 的,所以其實這個問題滿廣的,其實是要看你要解決的是機器人學的問題還是一般的字元辨識還是什麼的?我想都有相應的 library,當然有些是 Haskell 自己寫的,但是有些是翻譯成別國語言,然後他們去處理這樣子。
反正Haskell在這方面並不是*,所以你上 Hackage 去找一下,它自己有一個分類好像叫做 Computer Vision,稍微看一下應該可以看得到。
因為我想說都可以寫編譯器、都可以寫 compiler,它的速度就應該不是問題。
不是問題啊!像GHC很少,因為GHC它其實內部就有一個Scheduler了,然後自己做 current management ,所以基本上它就是 micro kernel,它GHC自己內嵌一個小 kernel 這樣子,對,所以就點像那種…核能反應爐那種感覺。
所以其實很早就有GHC自己來寫作業系統的一些Project,Google一下可以找得到,然後新的語言像Rust或者是像甚至 Javascript V8,都有人直接把它拿在*裡面跑,然後因為這些Functional Programming 的語言有一個好處是它可以證明說在某個程度上,這個sandbox不會破掉,它不存在任何 construct 讓它記憶體溢出啊或什麼這些問題,所以它可以整個丟進*裡面跑也不會發災難這樣子,對。
所以這是滿多人 research 或者就只是自己好玩, project 其貫都還蠻多。
你只要任選一種 Functional Program language,然後再加上 kernel 或者 operating system 應該都可以找得到相關的 GitHub project。
這非常好的問題。基本上這個問題分兩層嘛,一個是說如果是以 embedded system,然後它的記憶體非常不足,以致於連 GC 都不太能夠做的時候,還有沒有Functional language生存的空間?這是一個。
另外一個是說當你需要是 real-time system 的時候,真正的 RTOS 的時候,你終端一個都不能漏的時候,像就是之前那個 Scheduler 是不是夠處理這個問題?這兩個都是非常 active 的,even 隨便找就一大堆論文的,對。
在後者的話,我記得目前那個什麼 software defined networking 就是用軟體去寫 router,去顧 router,對,SDN,最快的實作就是 Haskell 寫的,它能夠 dispatch 非常非常多的 request per second,好像比第二名多一個數量級之類的,很扯的一個*。
它所做的就是把 GHC 裡面的那個 micro kernel 的那個Scheduling tune 到完全是跟硬體同步的一個狀況。那個詳情可以去看*paper,但是這需要當然很多精神,在最這邊就是你幾乎沒有記憶體可以用的 embedded system 的話,現在一般來講會用ghc,然後編譯成它的 assembly ,就是 GHC 只是當作一個語法上面的 short hand。
你可能沒辦法支援完整的 Haskell,但你可以支援一小部分,然後出一個 assembly,它不需要 memory management 。
這個部分就是可以,因為它只是一個語法的代換,但你就可能沒有辦法用非常完整的GHC,可能只能用其中的某些特定部分這樣,但仍然是可以做到。
對,它是整個...就是叫作 whole program optimization 嘛,GHC 是每個模組分別最佳化,然後JHC系列是把所有都先變成一個超級大 C程式,然後再一次編譯起來,然後下去跑。
AJHC 我記得是接了 JHC 去改,日本的一些朋友去做 embedded system 的,然後去繼續優化它的 strategy 。
因為現在直接接 LLVM 了嘛,所以就是每一層都再多加一大堆*。
反正因為現在硬碟不用錢,在一般的情況下這個不是問題,在 embedded 的話就是一個問題。
剛才提到現在大部分語言都包含了λ,不包含的那一部分,我不太清楚說為什麼要特別包含?一般參考語言叫 Functional language ,就是他們是有什麼?是Functional language是為了取代傳統語言?還是它是做不同的事情?有點不太懂。
或者你可以像試算表那樣子說這個的產生是靠這兩個格子加起來,這個的產生是靠這一排加起來,這個的產生是靠⋯對不對,試算表裡面,像Excel你也可以說 A2 的值等於 A1 加到 A9 ,不對,這樣會 recursive,A2 的值是 B1 加到 B9 或之類的,這樣子就是一個 Functional language,就是說它完全是純粹…不是一行一行算出來的,而是每一個格子的值是由某些別的格子決定的,所以你就從某一些基本的輸入開始,然後你只要填入年月日跟小時,它就自動幫你把其他的能夠帶出來的數值都帶出來。
這個想法就是 Functional Programming 的想法,Haskell 就是類似的想法,但是是做一般的操作的實作,所以他們能夠解決的問題是同樣的,就是 general purpose programming,可是解決的方式的差別就是說,Haskell 是你先把問題分成你要解決哪些子問題?每個子問題需要的值是由哪些子問題更小的問題可以產生出來的?然後這樣子一路分到最小最小的為止。
但是一般的程式的話是說有點像物件導向,是你把它想像成各個不同的 agent ,然後每一個有自己的作用,每一個裡面有一些狀態,他們交互作用產生出結果,其實要解決問題是一樣的,只是說在腦裡構築那個問題的方式是不同的。
所以它也有可能一個問題,如果第一個是各種方法都可以解決問題,然後有沒有可能是同時使用這些方法?
當然,所以像新的,像 Scala 或者是 Perl 6 或者 Rust 或者這些語言,他們都是同時綜合了Functional、imperative、object-oriented,有些還有 logic 的這些思路,然後你可以把這些思路混合在一起使用這樣子。
Haskell 當然是最純粹的,你只能用 Functional 的思路來寫,學它的好處就是說你可以把這個完全學到,覺得說任何東西都可以用這個方式,等到你回去學例如像 Java 的時候,還是不需要這個方式,你可以按照當時的狀況判斷。
就是2004年的時候,IBM就這麼 Open 了嗎?或是怎麼樣才說服他們用 haskell?是怎麼樣去協調?
當然首先就是如果不讓我 Open Source 的話我要收兩倍的錢,這是一個。
很公平嘛,因為我工作完之後我還要花一倍的時間重新寫過再 open source 出來。付我兩倍的錢,對,這是一個。
另外一個就是說其實銀行業並不 Care,並不 Care 它的 Source 是不是 Open 的,因為他們的重點都在 business logic 。
他們會不會 Care 說沒有人可以接手?
對,他們就是因為是 Care 這個才願意 Open Source。
就是因為你Open Source出來之後,就會有一大堆不相干的人跑來學這個東西,然後就會變成是說即使我今天跑走了,那些自己跑來學的人他有一個社群。即使沒有社群,至少有之前討論跟 commit 的紀錄。
如果是一般公司裡面的 hand off 的話,常常是把那個程式碼打包之後就丟給下一個人,可是Open Source 的話是你每一步 commit 的時候,你的思路、你的問題,你在討論什麼?是為了什麼解決這個 ticket 才怎麼...全部都攤在陽光底下,那你接下來的人要來接,即使你跟作者已經失去聯絡,你還是可以重新追溯它,這樣其實對於 maintain 來講是一個優勢,當時也是用這種方式去講,銀行都覺得很OK。
那時的是跟台灣的IBM還是?
我們算是台灣IBM的系統整合商,然後談的話也是直接去跟銀行接案,就等於我們是某些 component licensed IBM 的來用,然後 IBM 也願意這樣子等於聯名吧,這樣子去用,所以他們其實不會管我們技術上面用什麼 set,只要能夠結案就好了,自由度還滿大的。
所以現在公司*算是長期?
對啊,而且因為Open Source出來,所以不只耀宏,就是台灣幾大處理 AFP 的公司,基本上都是直接跑 NFP,上面 compile 好用來轉PDF或是用來做什麼,就是變得大家都可以用*。
我想銀行業比較特別,因為他們 core logic 是COBOL,所以不管什麼語言都比COBOL好,現在很難找到比COBOL差的語言,而且COBOL現在新一代大學畢業生誰願意去 maintain COBOL?開玩笑,所以Haskell再冷門也沒有COBOL冷門。
這是一個比較特殊的情況,就是說他們並不會一聽 Haskell 就說那沒有人接怎麼辦?因為他們一天到晚都在處理「沒有人接COBOL怎麼辦?」這個問題。
他們現在在跑 AIX 嗎?其他...。
...