objectionary/soap26-paper

GitHub: objectionary/soap26-paper

该仓库包含一篇探讨如何利用 φ-calculus 重写规则将 Java Stream API 中的连续操作融合为 mapMulti() 调用从而实现性能优化的学术论文及其全部可复现实验工件。

Stars: 4 | Forks: 0

# 通过 𝜑-Calculus 实现 Java Stream Fusion (LaTeX 论文) [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/objectionary/soap26-paper/blob/master/LICENSE.txt) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.19837769.svg)](https://doi.org/10.5281/zenodo.19837769) [![make](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/cf6e767109100446.svg)](https://github.com/objectionary/soap26-paper/actions/workflows/make.yml) 此仓库包含实验工件 以及 LaTeX 格式的研究论文。 本研究探讨了一种针对 [Java Stream API] 的 bytecode 到 bytecode 优化技术, 该技术将连续的 `map()` 和 `filter()` 操作替换为单次 `mapMulti()` 调用 (该方法在 Java 16 中引入)。 该优化是通过 [φ-calculus] 重写规则以声明式的方式实现的, 而不是通过命令式的 bytecode 操作。 在 [Biboudis et al.] 提出并被 [Møller et al.] 使用的九个基准测试上进行的实验表明, 该转换保留了所有程序行为,并且没有引起性能衰退; 在部分情况下,它还缩短了执行时间。 此仓库中的所有工具、基准测试和数据 均可复现论文中报告的结果。 本研究使用了以下开源工具: * [Streamliner] 用于将 stream pipeline 展开为循环 * [hone-maven-plugin] 用于使用 [φ-calculus] 重写规则融合 stream 操作 * [Phino] 用于重写 [φ-calculus] 表达式 * [jeo-maven-plugin] 用于将 bytecode 转换为 [φ-calculus] 并转回 * [JMH] 用于基准测试 为了复现实验并编译论文, 你需要运行: ``` git clone --recurse-submodules https://github.com/objectionary/soap26-paper.git make REPEAT=2 NUMBERS=15 ``` 如果出现问题,请检查 `log.txt` 文件。 你可以提供以下变量: * `REPEAT=5` 请求进行五次重复测试运行 (推荐:10) * `NUMBERS=7` 使我们的测试在测试数组中使用七百万个数字 (推荐:100) * `VENDORS=3` 使我们的测试使用不超过三个 JVM 供应商 (推荐:10) * `ITERATIONS=3` 请求 JMH 进行三次测量迭代 (推荐:10) * `WARMUPS=2` 请求 JMH 进行两次预热迭代 (推荐:10) 默认情况下,所有这些参数都被设置为其最小值。 运行 `make clean ultimate` 以使用所有推荐值。 ## 前置条件 你需要安装以下组件: * [GNU Make] 4+ * [Docker](即使你使用 `make` 运行它,而不是 `docker`) * 包含宏包的 LaTeX(完整列表请参见 [DEPENDS.txt](/DEPENDS.txt)) * [Poppler] * [SdkMan] * Ruby 3.3+ * [GNU Bash] 5+(不是默认安装的 bash!) * [GNU coreutils],特别是 `print`、`awk`、`sed`、`grep` 和 `find` * [Vale] * [GNU Aspell] * [texsc] * [texqc] 不支持在 Windows 上进行构建。 你需要使用 Ubuntu 或 macOS。 ## Docker 你可以运行所有实验,然后使用 Docker 渲染论文。 但是,基准测试的准确性可能会降低。 像这样运行它: ``` make docker REPEAT=2 NUMBERS=15 ``` 完成后,你将在当前目录中获得构建好的 `paper.pdf`。 不支持 `make docker ultimate` 命令。 相反,请手动指定所有参数 及其推荐值。 ## 仓库结构 子目录包含: * `tex/` 包含论文的各个章节,格式为 TeX。 * `tables/` 包含一些带有独立 Make 项目的目录, 这些项目运行基准测试并收集结果,以生成 TeX 表格。 * `tikz/` 包含论文的 TikZ 图表。 * `streamliner/` 包含 [Streamliner] 源代码,不包含测试以及 与本次实验无关的其他一些文件。
标签:JS文件枚举, TruffleHog, φ演算, 域名枚举, 学术论文, 性能基准测试, 流融合, 编译器优化, 请求拦截