今天这篇文章的主题是:寄生。
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通过在表达能力上做的妥协换取在某一领域内的高效”。
而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从业者一些开阔了眼界的感觉,感谢阅读。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
ABAP (Advanced Business Application Programming) 是 SAP(System, Applications, and Products in Data Processing)的一种专有编程语言,广泛应用于 SAP 的产品和服务中。ABAP NetWeaver 2004s SPS8 是一个重要...
ABAP(Advanced Business Application Programming)是SAP系统中的一种编程语言,主要用于开发企业级的应用程序。在"ABAP351高级编程-动态编程.rar"这个压缩包中,我们聚焦于ABAP的高级主题——动态编程。动态编程是...
ABAP(Advanced Business Application Programming)是一种高级编程语言,由德国软件公司SAP开发,并主要用作SAP的编程语言。以下是对ABAP的详细介绍: 一、起源与背景 起源时间:ABAP最早在20世纪80年代开发,最初...
ABAP(Advanced Business Application Programming)是SAP公司的主要编程语言,用于开发企业级的应用软件,尤其是在SAP R/3和SAP S/4HANA系统中。本教程以"5天轻松学会ABAP编程语言"为主题,将带你深入理解ABAP的...
ABAP 屏幕编程是基于 ABAP 语言的,它是一种高级编程语言,用于开发 SAP 系统中的业务应用程序。ABAP 屏幕编程的主要功能是创建交互式屏幕,以便用户可以与 SAP 系统进行交互。这些屏幕可以是输入屏幕、输出屏幕、...
ABAP(Advanced Business Application Programming)是一种由SAP公司开发的高级商务应用编程语言。它主要用于SAP系统的开发与维护,是SAP技术栈的核心组成部分之一。对于SAP开发者而言,掌握ABAP语言是非常重要的,...
- **NetWeaver Developer Studio**:这个集成开发环境支持Java和ABAP两种编程语言,同时也集成了Adobe LiveCycle Designer,使得开发者能够轻松设计复杂的交互式表单。 - **Adobe Document Service**:作为SAP ...
ABAP(Advanced Business Application Programming)是一种专门为SAP应用软件开发的高级业务应用程序设计编程语言。ABAP语言的核心是支持结构化程序设计,它与传统的第三代编程语言(如C语言和Pascal)有显著的区别...
ABAP(Advanced Business Application Programming)是SAP系统中的核心编程语言,用于开发企业级业务应用程序。这本书通过丰富的实例,旨在帮助读者掌握ABAP的基础知识以及在实际工作中的应用技巧。 首先,我们要...
SAP ABAP(Advanced Business Application Programming)是SAP系统中的编程语言,用于开发和定制企业应用程序。对于想要深入理解SAP编程的初学者,实战SAP程序开发——从实例学SAP ABAP编程这个资源提供了宝贵的实践...
ABAP是高级企业应用程序语言,它支持封装性和继承性,封装性是面向对象的基础,而继承性是建立在封装性基础上的重要特性。ABAP语言适合生成报表,支持对数据库的操作,如:Sqlserver,Oracle,DB2 等主流数据库系统。 ...
ABAP(Advanced Business Application Programming)是一种高级业务应用编程语言,主要用于开发SAP R/3系统中的应用程序。它被定义为第四代编程语言(4GL),其语法与Visual Basic和JAVA有相似之处,但与C、PASCAL等...
**ABAP/4(Advanced Business Application Programming)**是SAP R/3系统中唯一且核心的开发工具,属于第四代编程语言(4GL)。其语法设计借鉴了诸如Visual Basic或Java等高级语言,区别于传统的第三代语言如C、...
ABAP/4编程语法是SAP R/3系统的核心开发工具,它是一种四代编程语言,与Visual Basic和JAVA有相似之处,但又有其独特的特点。对于初学者来说,掌握ABAP/4的基础知识和编程规范是至关重要的。 在ABAP/4中,程序结构...
ABAP是SAP系统的编程语言,可以用来实现复杂的算法和业务逻辑。 那么,如何调用ABAP函数呢?下面是实现相关性程序调用ABAP函数的步骤: 首先,需要创建函数输入特性和输出特性,事务码为CT04。这个步骤是定义...
01_ABAP开发环境和总体介绍.pdf 02_创建HELLO WORLD程序.pdf 03_ABAP语法示例.pdf 04_数据字典和数据表的读取.pdf 05_标准列表和选择屏幕.pdf 06_实战屏幕SCREEN设计.pdf ...14_从实例学SAP ABAP编程13-19章.pdf