聊聊 C 语言和 ABAP 这两门编程语言的关系(二)

简介: TIOBE 2022年3月的编程语言排行榜显示:https://www.tiobe.com/tiobe-index/C 语言和 C++ 分别名列第二和第四位:

下面我们来聊聊 ABAP.

image.png

SAP note 1230076 Generation of ABAP loads: Tips for the analysis 介绍了一个工具程序:RSDEPEND。这个 note 提到,一个即便看起来最简单的 ABAP Hello World 报表,其实也依赖于许多标准的 Repository 对象,这些依赖我们假定称其为 A,B,C.


假设 A,B,C 其中有任何一个有改动产生,比如 A 是一个 include 程序,里面使用到了一个 DDIC 结构,在某个时刻,系统导入了一个传输请求(Transport Request), 里面包含了针对这个 DDIC 结构的更改,那么此时这个最简单的 Hello World 报表的 load 就成为了 obsolete 状态。在重新执行该报表之前,ABAP Runtime(中文译成 ABAP 运行时)会自动做一个 load invalidation 操作,生成一个最新版本的 load.


什么是 ABAP load?看 ABAP help 里的官方定义:

In the ABAP environment, a load describes a binary representation of a repository object which is optimized for fast access, in the memory or on the database.

翻译成中文:ABAP load 是 Repository 对象的二进制表现形式,针对 ABAP 环境的快速访问而做过特别优化,可以存储在数据库表中或者加载于内存里。


我们用一个实际的例子来理解 ABAP 报表激活和运行时发生的事情。


创建一张非常简单的透明表 ZLOADTEST:

image.png

写一个简单的报表,命名 为ZTESTLOAD.

报表的源代码以压缩的格式存储在表 REPOSRC 的 DATA 字段里。

image.png

测试报表的源代码很简单,把表里的数据全部读取出来:

image.png

激活这个简单的报表(是的,在 ABAP 世界里,我们习惯说激活,而不是编译)。激活后生成的 ABAP load 存储在表 REPOLOAD 的字段 LDATA 和 QDATA 里。

image.png

这两个字段存储的内容就是前面 ABAP help 提到的 ABAP load 在数据库表中的存储形式。

菜单 Goto->Navigate to->Switch to Classic Debugger:

image.png

Goto->System Areas->Internal Information:

image.png

在 System Area 区域输入CONT,就能在下图的 NAME 列看到 ABAP load 里包含的指令。当然同开源的 JVM 不同,JVM 字节码指令集在网上能够查到,而这些 ABAP load 的指令是 SAP internal 的,因此不能在这里做解释。

25.png

然后执行前面提到的工具报表 RSDEPEND, 输入参数 program name = ZTESTLOAD, 得到结果,其中测试报表的 ABAP Load 时间戳为 07:21:02, 这个报表依赖的标准Include 有:

26.png

image.png

由此看出,每一个标准的 ABAP 报表都自动包含了这些 include.

如果开发人员显式地再包含其中任意一个,会遇到语法错误: Module %_PF_STATUS is already defined as a OUTPUT module.

image.png

image.png大家觉得这个 <REPINI> 是不是很像前文 C 语言部分提到的 #include<stdio.h>

下面我们再做几轮测试。

目录
相关文章
|
7月前
|
算法 程序员 编译器
C++与C语言的差异:编程语言之间的奥秘探索
C++与C语言的差异:编程语言之间的奥秘探索
106 0
|
3月前
|
Unix 编译器 Shell
[oeasy]python0033_先有操作系统还是先有编程语言_c语言是怎么来的
本文回顾了计算机语言与操作系统的起源,探讨了早期 Unix 操作系统及其与 C 语言的相互促进发展。Unix 最初用汇编语言编写,运行在 PDP-7 上,后来 Thompson 和 Ritchie 开发了 C 语言及编译器,使 Unix 重写并成功编译。1974 年 Ritchie 发表论文,Unix 开始被学术界关注,并逐渐普及。伯克利分校也在此过程中发挥了重要作用,推动了 Unix 和 C 语言的广泛传播。
65 9
[oeasy]python0033_先有操作系统还是先有编程语言_c语言是怎么来的
|
21天前
|
缓存 安全 编译器
C 语言作为经典编程语言,其函数编程技巧对提高代码质量至关重要
C 语言作为经典编程语言,其函数编程技巧对提高代码质量至关重要。本文深入探讨了函数的定义、设计原则、参数传递、返回值处理、调用约定、嵌套与递归调用、优化技巧及常见错误,旨在帮助读者提升编程水平。
39 1
WK
|
4月前
|
人工智能 算法 C语言
为什么C语言不是人工智能领域的首选编程语言?
尽管多种编程语言在人工智能领域均有应用,Python却因其独特优势成为了首选。Python的简洁语法提高了开发效率与易用性;其庞大的生态系统,尤其是丰富的AI库和框架如TensorFlow、PyTorch等,简化了算法实现过程;Python适用于快速原型设计与实验,加速项目迭代;良好的跨平台兼容性减少了配置负担;庞大的社区支持与丰富的文档资源便于学习和技术交流。尽管如此,C语言在性能等方面仍具优势,在特定场景下不可或缺。
WK
225 60
|
7月前
|
程序员
开发语言漫谈-ABAP
ABAP是SAP公司专门用于SAP软件环境的专门语言
|
7月前
|
C语言 iOS开发 MacOS
Objective-C是一种面向对象的编程语言,它扩展了C语言,添加了面向对象编程的特性
【5月更文挑战第9天】Objective-C是苹果公司的面向对象编程语言,用于iOS和macOS应用开发。它扩展了C语言,包含类定义(接口和实现)、对象创建、消息传递、属性、协议、块和类别等语法特性。例如,类通过`@interface`和`@implementation`定义,对象用`alloc`和`init`创建,方法通过消息传递调用。属性简化变量声明,协议定义可选方法集合,块支持代码块作为参数,类别用于扩展已有类。错误处理常使用NSError对象。要深入了解,建议查阅相关教程和文档。
62 0
|
7月前
|
Java Unix C语言
在我掉入计算机的大坑并深陷其中时,一门名为“C语言”的编程语言让我沉迷
在我掉入计算机的大坑并深陷其中时,一门名为“C语言”的编程语言让我沉迷
|
存储 Ubuntu Java
聊聊 C 语言和 ABAP 这两门编程语言的关系(一)
TIOBE 2022年3月的编程语言排行榜显示: https://www.tiobe.com/tiobe-index/ C 语言和 C++ 分别名列第二和第四位:
148 0
聊聊 C 语言和 ABAP 这两门编程语言的关系(一)
|
机器学习/深度学习 人工智能 Java
2020 年度编程语言排行榜出炉!C 语言称霸,Java 遭遇滑铁卢…….
最近,TIOBE 发布了过去一年的编程语言排行榜:
236 0
2020 年度编程语言排行榜出炉!C 语言称霸,Java 遭遇滑铁卢…….
下一篇
DataWorks