ABAP Netweaver體內的那些寄生式編程語言

      網友投稿 593 2022-05-30

      今天這篇文章的主題是:寄生。

      Jerry最近看到朋友圈里一位朋友分享的一張寄居蟹的照片,對于Jerry這種在內地長大的又很宅的人來說,沒有機會看到寄居蟹,所以覺得很新鮮:

      寄居蟹主要以螺殼為寄體,寄居的最大螺體直徑可達15厘米以上。其外形介于蝦和蟹之間,多數寄居于螺殼內。

      另一種比較出名的寄生生物,就是Jerry小時候在電視上看到的《異形》,這種生物通過卵生的方式降生,成為下圖這種俗名叫抱臉蟲的二階形態后,通過口器管將異形幼蟲注入宿主體內,這樣抱臉蟲就完成了自己的使命,不多時便會死去。

      異形幼蟲在宿主體內發育約一天后,會從宿主體內破腔而出,經歷如蠶寶寶的幾次蛻皮后,成長為完全體。

      Jerry距離寄生式生物最近的一次,就是前年全家去西嶺雪山泡溫泉,當時看到有一個室外游泳池,馬上跳下去游起來。

      正游得高興,透過泳鏡一看,一只像頭發絲一樣,長約十余厘米的生物在Jerry斜前方的水里蠕動,其運動軌跡明顯是一種生物,而不是普通的頭發絲。

      見多識廣的Jerry一下子就辨認出,這是寄生在螳螂體內的鐵線蟲。小學時Jerry和小伙伴們曾經捕捉過螳螂來玩,把螳螂踩死后,曾親眼目睹體內的鐵線蟲鉆出來。

      這種生物的防御力和它的名稱一樣,當時我們用磚頭砸都砸不爛。

      眼看Jerry馬上就要和它親密接觸了,嚇的Jerry馬上起水,再也不游了。

      鐵線蟲寄生在螳螂等節肢動物體內,到了產卵季節,就會控制著螳螂去一些靠近水源的地方,等宿主淹死之后,鐵線蟲從宿主體內鉆出來,在水里產卵。這些卵或者孵出的幼蟲被其他節肢動物吞食后,就開始下一個寄生的循環。

      至于鐵線蟲為什么可以控制宿主的行動,至今科學家們也沒研究個所以然出來。Jerry在這里給廣大游泳愛好者提個醒,到室外露天游泳池游泳時,如果附近樹木茂盛,最好還是提高警惕,可以環顧游泳池四周有無節肢動物的尸體,當然不下水最安全。

      鐵線蟲的圖片Jerry就不貼了,非常惡心,好奇的朋友可以看看韓國電影《鐵線蟲入侵》,一部幻想的災難片。

      平時大家提起SAP的Netweaver,總是習慣稱之為“SAP ABAP Netweaver”,然而Netweaver內部也存在一些寄生式的編程語言——絕大多數ABAP編程人員可能從未意識到它們的存在。原因在于,盡管大多數的這些寄生式編程語言的名稱早已為大眾所熟知,但它們實際上僅僅是ABAP Netweaver內核里用C/C++實現的精簡版的語言編譯和運行環境,并未直接開發給ABAP開發人員使用,或者已經被標注為obsolete.

      下面就跟著Jerry來逐一了解一下吧。

      JavaScript

      在Netweaver里隱藏了這樣一個包:SJAVASCRIPT,光看名字就知道它要干啥了。

      Netweaver的C/C++內核實現了一個微型的JavaScript引擎,其接口通過ABAP類CL_JAVA_SCRIPT暴露,可以讓ABAP開發人員在Netweaver里編寫和執行JavaScript語言。

      這個類于2000年2月創建,這個時間點Jerry還在讀高中,囧。

      如果您想使用Netweaver里這個JavaScript引擎操練操練ECMAScript 6.0規范里定義的那些新特性,比如Class關鍵字,異步操作和Async函數等,那Jerry覺得您應該是想多了,因為這個類已經明確標注為obsolete,因此SAP不建議使用在生產代碼里,風險自擔。

      當然,執行包里的報表SJSEU,把一些教科書上的JavaScript代碼粘貼進去玩玩,是沒有任何問題的。比如下面這段用JavaScript遞歸實現的整數階乘代碼,

      可以正常運行在ABAP Netweaver里:

      在Jerry看來,不存在必須在ABAP Netweaver里執行JavaScript的場景。如果大家有基于JavaScript的應用需要和Netweaver里的ABAP應用集成,SAP推薦的做法是把這些JavaScript應用部署在SAP Cloud Platform上。

      Ruby

      Jerry最開始使用Ruby,是2000年的《暗黑破壞神2》里。

      把品質各異的紅寶石鑲嵌到頭盔,鎧甲,武器和盾牌上,能獲得下表里定義的各種屬性加成。

      SAP Cloud for Customer的開發人員,想必在UI designer里都編寫過Ruby代碼:

      Jerry第一次接觸C4C UI designer里的Ruby代碼時,覺得很新鮮:這些代碼在運行時怎么能夠被瀏覽器處理呢?

      帶著這個好奇心,我打開包含了這段Ruby代碼的UI視圖,發現在編寫完畢Ruby代碼后,保存激活時,Netweaver后臺會自動把這些Ruby代碼轉換成對應的JavaScript代碼,最后瀏覽器執行的當然就是后者,即轉換后的JavaScript代碼。

      也就是說,SAP Cloud for Customer的Netweaver系統里,存在一個微型的Ruby解析器。Jerry把這些觀察和研究寫到了SAP社區的這篇博客里:

      Ruby Script in C4C Oberon View

      https://blogs.sap.com/2017/07/29/ruby-script-in-c4c-oberon-view/

      因為C4C后臺沒有對客戶和Partners開發,因此我無法像CL_JAVA_SCRIPT那樣,貼出這個Ruby解析器的ABAP實現類的名稱和代碼,不過其原理和CL_JAVA_SCRIPT一樣,都是使用ABAP的關鍵字SYSTEM-CALL,調用ABAP內核的Ruby接口。

      ABSL - ABAP Script Language

      Netweaver里的ABSL和前面介紹的兩種精簡版語言引擎JavaScript和Ruby有所區別——ABSL是一門DSL-Domain Specific Language(領域特定語言).

      Wikipedia對領域特定語言的定義是“為了解決某一類任務而專門設計的計算機語言”,Martin Fowler則認為,

      “DSL通過在表達能力上做的妥協換取在某一領域內的高效”。

      ABAP Netweaver體內的那些寄生式編程語言

      而ABSL,則是SAP為了確保C4C partners能夠高效安全地在多租戶云上開發自定義邏輯而設計出的一門寄生于ABAP Netweaver的領域特定語言。

      我們在Cloud Application Studio里編寫完ABSL,保存激活后,ABAP Netweaver后臺就會自動生成對應的ABAP代碼。同之前介紹的JavaScript和Ruby一樣,在C4C的ABAP Netweaver后臺,存在一個針對ABSL的語言解析器和編譯器來完成ABS對應的ABAP代碼的生成。

      C4C的運行時,執行的就是轉換后生成的ABAP代碼。

      Jerry 2011年還在SAP BYD部門工作時,也曾經參與過基于ABSL生成對應的ABAP代碼的開發工作,當時我所在的團隊負責的任務是把Cloud Application Studio里編寫的Application Exit ABSL代碼,轉換成ABAP Netweaver里的BAdI模型和對應的ABAP代碼。

      最后再來說說C/C++. 人類是異形的宿主,而C/C++則是ABAP的宿主。這一點在Jerry之前的文章 聊聊C語言和ABAP里已經闡述清楚了。

      我們可以在F1喚出的ABAP幫助文檔里根據關鍵字“Kernel"查找出ABAP kernel的相關信息:

      在SAP內部的Netweaver服務器上,我們是能夠查看這些C/C++的源代碼的,只是我不能將這些代碼貼出來:

      希望這篇文章能夠給廣大ABAP從業者一些開闊了眼界的感覺,感謝閱讀。

      ABAP

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:萬維網誕生30周年:看HTTP和HTTPS的起源發展
      下一篇:Android 進階路線(思維導圖)
      相關文章
      亚洲色自偷自拍另类小说| 国产天堂亚洲国产碰碰| 67pao强力打造67194在线午夜亚洲 | 亚洲精品国产日韩| 久久精品国产亚洲av麻豆小说 | 国产亚洲精品成人AA片| 亚洲国产美女在线观看| 99久久亚洲精品无码毛片 | 久久水蜜桃亚洲AV无码精品| 亚洲日韩精品国产3区| 亚洲一区二区三区写真| 久久国产精品亚洲一区二区| 亚洲αv在线精品糸列| 亚洲国产精品国产自在在线| 亚洲美日韩Av中文字幕无码久久久妻妇 | 亚洲国产婷婷六月丁香| 亚洲熟妇无码八AV在线播放| 亚洲真人无码永久在线| 亚洲老妈激情一区二区三区| 亚洲精品成人片在线播放| 亚洲AV无码专区在线播放中文| 国产成人亚洲综合无码精品| 久久精品国产亚洲AV麻豆不卡| 亚洲欧洲国产精品你懂的| 久热综合在线亚洲精品| 久久亚洲日韩看片无码| 亚洲第一网站免费视频| 亚洲网站在线观看| 噜噜噜亚洲色成人网站∨| wwwxxx亚洲| 亚洲爆乳成av人在线视菜奈实| 国产亚洲精彩视频| 久久精品国产亚洲精品| 久久夜色精品国产亚洲AV动态图 | 亚洲第一区香蕉_国产a| 337p日本欧洲亚洲大胆艺术| 亚洲国产片在线观看| 亚洲色大成网站www久久九| 亚洲成av人在片观看| 亚洲日韩av无码中文| 老司机亚洲精品影院在线观看|