// the find
argotorg/solidity
Solidity, the Smart Contract Programming Language
Solidity is the primary smart contract language for the Ethereum Virtual Machine — a statically-typed, curly-brace language that compiles to EVM bytecode. If you're writing contracts on Ethereum or any EVM-compatible chain, this is the compiler you're using. It's not a library or framework; it's the language itself.
The IR codegen pipeline (Yul as an intermediate representation) is architecturally sound — it separates high-level Solidity semantics from EVM-specific lowering, which makes optimizer passes cleaner and more testable. The SMT checker integration (`libsmtutil`) is a real differentiator: formal verification built into the compiler itself, not bolted on externally. The type system has gotten meaningfully better over time — user-defined value types, custom operators, and proper immutables reduce foot-guns that plagued earlier contract code. Documentation is genuinely good: the `bugs.json` machine-readable vulnerability ledger is the kind of thing most language projects skip entirely.
Still stuck on 0.x versioning despite being the dominant smart contract language for a decade — breaking changes ship regularly and every minor version bump can silently change ABI or bytecode, which is a serious operational problem for deployed contracts. Error messages have improved but remain worse than modern compilers; type errors involving complex inheritance hierarchies are still cryptic. The legacy `libevmasm` codegen path and the newer IR/Yul path coexist, creating two code paths to maintain and subtle behavioral differences that only show up in edge cases. No first-class package manager or standard library — the ecosystem depends entirely on third-party tools (Hardhat, Foundry) to fill gaps the language itself should own.