栗子現場直播 千篇一栗
有很多簡單的道理,若不是被遺忘,不是察覺不到,就是知易行難。

2011年4月27日 星期三

  對人體有害的編程分享時間。

  我的新 project,「通」。簡單而言,就是「Universal remote procedure call binding」。

  這個世界,有很多程式語言:C,C++,Java,PHP,Python,云云。
  這個世界,有很多遠端溝通機制:JSON,XML,云云。
  一個遠端作業程式,有很多 method。

  現時坊間已經有很多「語言x遠端溝通機制」的 lib 可用,節省不少開發者的工作量。但當系統變得龐大,要同時橫跨多個程式語言及遠端溝通機制,要維護就變得非常困難。無論你想支持多一個程式語言,支持多一個遠端溝通機制,或者只想在程式裡加減修改一個 method,都會變成極度麻煩的工作。
  就以 YouTube 的 Data API 為例,它的遠端溝通機制以 XML 為主,亦提供了 Java/.NET/PHP/Python/Obj-C 的 lib,甚至為 Javascript 提供 JSON。YouTube 如果要用人力維護這堆工具同步,需要相當多的人力,而且非常容易犯錯。

  我自己的數個 project,都被這個問題卡住。

  而「通」的主要目的,是解決以上的問題。
  開發者先建立自己系統 method call 的 spec,然後再交由「通」去生產出 Client/Server Adaptor。到最後開發者只要使用那些 Adaptor,就能做到 remote procedure call (RPC)。
  這個做法比傳統 binding generator 的好處是,開發者有非常大的彈性。如果要弄了一個 AJAX 網站,Server 用 PHP,Client 用 GWT,中間以 JSON 連著。在過往的做法,開發者要先為各 method 做 GWT-JSON 和 PHP-JSON 的 Binding。每次改變 method 的結構,Server 和 Client 都要修改。如果我要加入 Java 的 Server,或者 Python 的 Client,或者改用 XML,就要把所有 Binding 重做。這是非常沒有效率。但在「通」上,開發者只要建立一份 spec,所有 binding 就能自動生成,開發者就能用更多心力來完善系統。

  這東西會應用到我多個 project 上,包括手上的「Icon match」,「Owatube」,以及未來的「香港電話網絡訊號資料庫」,「Arahabika-天空」。

  「通」已經放在 github 上,還未完成。
  現時已經確立了使用者 protocol spec 的 format,而且已經有 parser。
  但 code 輸出方面,就應該會根據我需要邊寫邊用。當然,其他人也可以 fork 那個東西,製作自己的輸出方式。

  就這樣。

沒有留言: