proguard-core
Cwerg
Our great sponsors
proguard-core | Cwerg | |
---|---|---|
9 | 59 | |
269 | 398 | |
1.9% | - | |
9.1 | 9.6 | |
4 days ago | 3 days ago | |
Java | Python | |
Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
proguard-core
-
Any news on the Classfile API?
Anyways, have you looked at Proguard core?
-
Resources for generating and execution JVM bytecode
For generating Java bytecode/class files you could take a look at ProGuardCORE . It's a bytecode manipulation and analysis library that grew out of ProGuard.
-
JEP draft: Classfile API
The MethodBuilder "low-level" example looks like the ProGuardCORE API for building classes & code sequences, which can be written as:
-
Show HN: I spent my vacation writing a modern JVM assembler
Something else that could make your code generation for your JVM language easier: ProGuardCORE (https://github.com/Guardsquare/proguard-core). It can be used to read, generate and analyse Java bytecode.
Some examples for code generation: ProGuard where the project originated (https://github.com/Guardsquare/proguard), Brainf*ck compiler (https://github.com/mrjameshamilton/bf), Lox compiler (https://github.com/mrjameshamilton/klox)
Disclaimer: I work at Guardsquare on ProGuardCORE so may be biased ;)
-
Looking for resources on building a compiler
I implemented Lox in Kotlin based on the book's Java interpreter then added a JVM backend using ProGuardCORE: https://github.com/mrjameshamilton/klox
-
Building a simple Log4Shell detector with ProGuardCORE
You can find out more about ProGuardCORE on GitHub and the manual contains some further examples.
-
Is there any books or guides on how to target JVM bytecode?
Not a book or guide but a useful library for working with/generating JVM class files is ProGuardCORE. It's the underlying library used by ProGuard and I also recently used it to add a JVM backend to my implementation of Lox from the Crafting Interpreters book.
-
Concise language to write an interpreter for?
After completing the first part of the book (using Kotlin instead of Java), I added a JVM backend using ProGuardCORE (https://github.com/Guardsquare/proguard-core).
-
AppSweep, mobile application scanning for developers
The biggest difference is our initial goal of creating a tool for application developers rather than a security team. This means we aim to exclude information that the application developer definitely knows and doesn't want to see again, e.g. the list of permissions an application is requesting. Furthermore we try to focus on nice and intuitive UX that is familiar to this audience, enabling an application developer to be very efficient in reading & interpreting the results (e.g. easy comparison of two builds). Also note that this is built on the same core technology as ProGuard. This foundation of compiler components (e.g. our partial evaluator) and the knowledge and experience at Guardsquare that comes with it will unlock many more in-depth code checks.
Cwerg
-
Cwerg: C-like language that can be implemented in 10kLOC
Perhaps these have already been dealt with and I'm missing critical information. If so, my apologies. Great work, in any case.
[1] https://github.com/robertmuth/Cwerg/tree/master/FrontEnd#dis...
-
Where can I find resources and guides on how to build compiler backends?
Cwerg has backend that can be used as JIT and is written with readability in mind. Additional documentation can be found here: https://github.com/robertmuth/Cwerg/tree/master/Docs
- Most important language features not touched in the book "Crafting Interpreters"?
- Lack of resources in creating Assemblers from scratch.
-
Minimum ISA Capabilities to Support Most (Non-Interactive) Programs?
I defined a basic ISA-like IR for Cwerg. It has unlimited registers and no constraints on immediates.
-
How do you design a compiler and a language?
entire compiler front end ast nodes
-
Syntax Design
I was also going down the path of bike shedding concrete syntax for my language Cwerg before pulling the plug on that effort and just using s-exprs. I managed to make the s-expr quite succinct by carefully choosing the order of arguments so I can omit optional ones. Also very helpful was to use square brackets for list, e.g. (call fun-name [arg1 arg2]). This simplifies parsing a little bit and is easier on the eye. Here are some Code Examples
-
November 2022 monthly "What are you working on?" thread
I am iterating over the languages features for Cwerg's Frontend which aims to be a low level language with about the complexity of C but with some of the comforts of modern languages. I am especially happy with the choice of adding sum types. Relative to C the current feature set looks like this: Removed: * arrays decay to pointers * bitfields * separate compilation (more of a backend issue) * pre-processor * varargs * implcit type conversions * (untagged) unions * ++/-- * comma operator * implicitly nullable pointers * goto
- typed asts and codegen
- Features Compendium
What are some alternatives?
proguard - ProGuard, Java optimizer and obfuscator
mir - A lightweight JIT compiler based on MIR (Medium Internal Representation) and C11 JIT compiler and interpreter based on MIR
JaCoCo - :microscope: Java Code Coverage Library
tinycc - Unofficial mirror of mob development branch
emv-qrcode - Java Based EMV QR Code Generator and Parser (MPM, CPM)
asmjit - Low-latency machine code generation
appsweep-gradle - This Gradle plugin can be used to continuously integrate app scanning using AppSweep into your Android app build process
bluebird - A work-in-progess programming language modeled after Ada and C++
bytecode-viewer - A Java 8+ Jar & Android APK Reverse Engineering Suite (Decompiler, Editor, Debugger & More)
konna - A fast functional language based on two level type theory
Maker - Lightweight, full-featured, low-level dynamic Java class generator designed for ease of use.
boring-lang - A very boring programming language