如何查看 SAP ABAP Kernel Module 的源代码

文摘   2024-11-14 08:08   北京  

StackOverflow 上有个网友提问,想查看 ABAP 系统生成 UUID 方法,在 Kernel Module pf_create_uuid16c32 里实现的源代码:

https://stackoverflow.com/questions/42110195/how-to-open-kernel-module-in-abap

笔者之前的文章提到,类似上图高亮这种 ABAP Kernel Module,通过 C 语言开发并编译,普通的 ABAP 开发人员,无法查看其源代码。

这个帖子下有人回答:

去 SAP 应聘一个 Developer 的职位,入职后就可以查看源码了。因为这些 Kernel Module 是闭源的,没有对客户和合作伙伴开放。

提问的网友又追问了一句:如何才能成功被录用

另一个热心的网友补充了一句:我可以给你提供一些信息,我之前的同事,在 Walldorf 的 NWDS 团队工作。

提问的网友马上打退堂鼓:你的好意我心领了。我还是先温习一下我的德语吧。

作为 ABAP 开发人员,虽然无法查看 Kernel Module 源代码,但至少要了解,为什么某些 ABAP 方法,SAP 会选择把它们的实现,放到 Kernel 中采取 C 语言来编写

一言以蔽之,出于性能优化、效率提升及对底层系统能力的充分利用等方面的考虑。

性能优化

ABAP 内核模块使用 C 语言编写,其执行速度明显优于等效的 ABAP 代码。这对于需要高密度计算或大数据量快速处理的场景尤为关键。

比如 ABAP 计算 MD5 HASH 值的 Function Module CALCULATE_HASH_FOR_CHAR,内部通过 C 语言实现的 System Call 来高效完成计算。

底层系统资源的访问

C 语言提供了与底层操作系统及硬件直接交互的能力。这对于涉及底层操作(如内存管理或硬件直接交互)的任务至关重要,而这些功能通过 ABAP 来实现往往不可行或效率较低。通过 C 语言,内核模块能够更直接地操作硬件资源,实现更精细的控制。

比如笔者在文章 SAP ABAP 和 Java 里的弱引用(WeakReference)和软引用(SoftReference) 里提到的 ABAP 一个内存管理的工具类:CL_ABAP_MEMORY_UTILITIES

其手动触发内存垃圾回收的方法:DO_GARBAGE_COLLECTION,就是调用 SYSTEM-CALL 来完成。

C 语言允许直接操控内存和系统资源,从而显著降低执行时间,提升整体系统的响应性和效率。例如 C 语言可以通过系统调用,直接操作 TCP 套接字。因此 CL_HTTP_CLIENT 和 CL_HTTP_SERVER 这些通过 ABAP 实现 HTTP 交互场景的工具类,其数据收发等实现,也通过 Kernel 的 C 代码完成。

增强的功能实现

某些功能,例如复杂的数学计算或特定的算法(如加密算法),更加适合通过 C 来实现。C 语言提供了丰富的库以及优异的性能,使 ABAP 应用能够无缝地利用这些高级功能,而不必在性能上做出妥协。这种方法确保了复杂逻辑的实现既高效又可靠。

比如通过 CL_ABAP_GZIP 提供的 ZIP 压缩和解压操作:

再比如 CRC 即循环冗余校验码的计算,有很多成熟的 C 语言库可供使用。因此在 ABAP 里把它放到 Kernel 里实现也是一件顺理成章的事情。

安全性与稳定性

内核方法和普通的 ABAP 方法一样,经过了相同的安全性检查,确保其在 ABAP 环境中的安全使用。此外,通过使用 C 语言实现关键功能,SAP 能够保证这些功能的优化和稳定性,从而在高负载环境中降低性能瓶颈的风险,确保系统的整体稳定性。

总之,在 ABAP 中通过 C 语言将某些方法实现为内核模块,主要是为了最大限度地优化系统性能,直接访问底层资源,增强功能实现的能力,同时保障安全性和可维护性。

这些考虑使得 SAP 应用程序能够在高要求的企业环境中保持高效、稳定的运行,为复杂业务需求提供强有力的技术支撑。

码农干货铺
永远要保持一种无论何时何地都逼着自己更努力更优秀来享受更好生活的学习状态
 最新文章