Soufflé (programming language)
Paradigms | Declarative, Logic programming |
---|---|
Family | Datalog |
Stable release | 2.3[1]
|
Typing discipline | Static |
License | UPL |
Filename extensions | .dl |
Website | https://souffle-lang.github.io/ |
Influenced by | |
Datalog |
Soufflé is an open source parallel logic programming language, influenced by Datalog. Soufflé includes both an interpreter[2] and a compiler[3] that targets parallel C++ (C++ that uses OpenMP). Soufflé has been used to build static analyzers[4] (especially for smart contracts),[5][6][7][8] compilers, tools for reverse engineering,[9] and disassemblers.[10] Soufflé is considered by academic researchers to be high-performance and "state of the art," and is often used in benchmarks in academic papers.[11][12][13]
Programming examples
Given a set of edges in a graph, the following program computes the set of (directed) edges between any two nodes. This is also known as the transitive closure of the edge
relation.
.decl edge(x:number, y:number)
.input edge
.decl path(x:number, y:number)
.output path
path(x, y) :- edge(x, y).
path(x, y) :- path(x, z), edge(z, y).
Features
- Automatic index selection[14]
- Specialized parallel data structures,[15] including disjoint-sets,[16] B-trees,[17] and tries.[18]
- Static typing
- Records and algebraic data types
Related tools
In addition to a compiler and an interpreter the Soufflé project also publishes:
- a profiler,
- a "provenance"-based debugger,[19]
- an "auto-scheduler" that chooses efficient query plans based on a profile, as in profile-guided optimization.[20]
References
Notes
- ^ "Release Release 2.3 · souffle-lang/souffle". GitHub. Retrieved 2023-02-26.
- ^ Hu, Xiaowen; Zhao, David; Jordan, Herbert; Scholz, Bernhard (2021-06-15). "Artifact for Paper: An Efficient Interpreter for Datalog by De-specializing Relations". Artifact Digital Object Group. Retrieved 2023-02-26.
- ^ Scholz, Bernhard; Jordan, Herbert; Subotić, Pavle; Westmann, Till (2016-03-17). "On fast large-scale program analysis in Datalog". Proceedings of the 25th International Conference on Compiler Construction. CC 2016. New York, NY, USA: Association for Computing Machinery: 196–206. doi:10.1145/2892208.2892226. ISBN 978-1-4503-4241-4.
- ^ Antoniadis, Triantafyllou & Smaragdakis 2017.
- ^ Tsankov, Petar; Dan, Andrei; Drachsler-Cohen, Dana; Gervais, Arthur; Bünzli, Florian; Vechev, Martin (2018-10-15). "Securify: Practical Security Analysis of Smart Contracts". Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. CCS '18. New York, NY, USA: Association for Computing Machinery: 67–82. doi:10.1145/3243734.3243780. ISBN 978-1-4503-5693-0.
- ^ Brent, Lexi; Jurisevic, Anton; Kong, Michael; Liu, Eric; Gauthier, Francois; Gramoli, Vincent; Holz, Ralph; Scholz, Bernhard (2018-09-11). "Vandal: A Scalable Security Analysis Framework for Smart Contracts". arXiv:1809.03981 [cs].
- ^ Grech, Neville; Kong, Michael; Jurisevic, Anton; Brent, Lexi; Scholz, Bernhard; Smaragdakis, Yannis (2018-10-24). "MadMax: surviving out-of-gas conditions in Ethereum smart contracts". Proceedings of the ACM on Programming Languages. 2 (OOPSLA): 116:1–116:27. doi:10.1145/3276486.
- ^ Praitheeshan, Purathani; Pan, Lei; Yu, Jiangshan; Liu, Joseph; Doss, Robin (2020-09-16). "Security Analysis Methods on Ethereum Smart Contract Vulnerabilities: A Survey". arXiv:1908.08605 [cs].
- ^ Sun, Yihao; Ching, Jeffrey; Micinski, Kristopher (2021-01-12). "Declarative Demand-Driven Reverse Engineering". arXiv:2101.04718 [cs].
- ^ Flores-Montoya, Antonio; Schulte, Eric (2020-08-12). "Datalog disassembly". Proceedings of the 29th USENIX Conference on Security Symposium. SEC'20. USA: USENIX Association: 1075–1092. doi:10.5555/3489212.3489273. ISBN 978-1-939133-17-5.
{{cite journal}}
: Check|doi=
value (help) - ^ Ketsman, Bas; Koutris, Paraschos (2022-06-28). "Modern Datalog Engines". Foundations and Trends® in Databases. 12 (1): 1–68. doi:10.1561/1900000073. ISSN 1931-7883.
- ^ Gilray, Thomas; Sahebolamri, Arash; Kumar, Sidharth; Micinski, Kristopher (2022-11-21). "Higher-Order, Data-Parallel Structured Deduction". arXiv:2211.11573 [cs].
- ^ Sahebolamri, Arash; Gilray, Thomas; Micinski, Kristopher (2022-03-18). "Seamless deductive inference via macros". Proceedings of the 31st ACM SIGPLAN International Conference on Compiler Construction. CC 2022. New York, NY, USA: Association for Computing Machinery: 77–88. doi:10.1145/3497776.3517779. ISBN 978-1-4503-9183-2.
- ^ Subotić, Pavle; Jordan, Herbert; Chang, Lijun; Fekete, Alan; Scholz, Bernhard (October 2018). "Automatic index selection for large-scale datalog computation". Proceedings of the VLDB Endowment. 12 (2): 141–153. doi:10.14778/3282495.3282500. ISSN 2150-8097.
- ^ Jordan, Herbert; Subotić, Pavle; Zhao, David; Scholz, Bernhard (2022-01-25). "Specializing parallel data structures for Datalog". Concurrency and Computation: Practice and Experience. 34 (2). doi:10.1002/cpe.5643. ISSN 1532-0626.
- ^ Nappa, Patrick; Zhao, David; Subotić, Pavle; Scholz, Bernhard (September 2019). "Fast Parallel Equivalence Relations in a Datalog Compiler". 2019 28th International Conference on Parallel Architectures and Compilation Techniques (PACT): 82–96. doi:10.1109/PACT.2019.00015.
- ^ Jordan, Herbert; Subotić, Pavle; Zhao, David; Scholz, Bernhard (2019-02-16). "A specialized B-tree for concurrent datalog evaluation". Proceedings of the 24th Symposium on Principles and Practice of Parallel Programming. PPoPP '19. New York, NY, USA: Association for Computing Machinery: 327–339. doi:10.1145/3293883.3295719. ISBN 978-1-4503-6225-2.
- ^ Jordan, Herbert; Subotić, Pavle; Zhao, David; Scholz, Bernhard (2019-02-17). "Brie: A Specialized Trie for Concurrent Datalog". Proceedings of the 10th International Workshop on Programming Models and Applications for Multicores and Manycores. PMAM'19. New York, NY, USA: Association for Computing Machinery: 31–40. doi:10.1145/3303084.3309490. ISBN 978-1-4503-6290-0.
- ^ Zhao, David; Subotić, Pavle; Scholz, Bernhard (2020-04-17). "Debugging Large-scale Datalog: A Scalable Provenance Evaluation Strategy". ACM Transactions on Programming Languages and Systems. 42 (2): 7:1–7:35. doi:10.1145/3379446. ISSN 0164-0925.
- ^ Arch, Samuel; Hu, Xiaowen; Zhao, David; Subotić, Pavle; Scholz, Bernhard (2022). Villanueva, Alicia (ed.). "Building a Join Optimizer for Soufflé". Logic-Based Program Synthesis and Transformation. Cham: Springer International Publishing: 83–102. doi:10.1007/978-3-031-16767-6_5. ISBN 978-3-031-16767-6.
{{cite journal}}
: no-break space character in|title=
at position 11 (help)
Sources
- Jordan, Herbert; Scholz, Bernhard; Subotić, Pavle (2016). Chaudhuri, Swarat; Farzan, Azadeh (eds.). "Soufflé: On Synthesis of Program Analyzers". Computer Aided Verification. Cham: Springer International Publishing: 422–430. doi:10.1007/978-3-319-41540-6_23. ISBN 978-3-319-41540-6.
- Antoniadis, Tony; Triantafyllou, Konstantinos; Smaragdakis, Yannis (2017-06-18). "Porting doop to Soufflé: a tale of inter-engine portability for Datalog-based analyses". Proceedings of the 6th ACM SIGPLAN International Workshop on State Of the Art in Program Analysis. SOAP 2017. New York, NY, USA: Association for Computing Machinery: 25–30. doi:10.1145/3088515.3088522. ISBN 978-1-4503-5072-3.
External links
This article has not been added to any content categories. Please help out by adding categories to it so that it can be listed with similar articles. (February 2023) |