npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

optimlog

v0.0.0

Published

> This project is still W.I.P. (Looking for help!)

Downloads

1

Readme

OptiMlog

This project is still W.I.P. (Looking for help!)

A Mindustry Logic Preprocessor, Linter and Optimizer.

This tool will probably not be very useful, but I think it is great learning experience to try and attempt to build a code optimizer on a fairly simple assembly-like language.

Lots of issues!

  • Location provided by the tokenizer is incorrect (according to Monaco Editor)
  • Jump statement operands causes issues
  • And more to be discovered

Optimization Pipeline

Done, but buggy (code is ugly)

  • Tokenize toTokenizedLines
  • Transform tokens to simplify it
    • unlabelJumps (replace labels by their address)
    • replaceCounterAddress (set here @counter to set here <address>)
    • spanLineDirectives
  • Parse into instructions toInstructions
  • Basic infer all values (super set) of all references
  • Divide code into non-branching blocks toBlocks (also considers jump made by set @counter x using above infered values)

Planned

  • Merge blocks (remove useless jump x always or set @counter x)
  • Detect unreachable code and warn
  • Infer the value of all variables at a certain point in time inside each block.
  • Constant-folding
  • Factorize math expressions to reduce instructions
  • Combine redundant variables
  • Try inline jumps (functions) (and optimize, rollback if code ends up being bigger)
  • Repeat until code cannot get any smaller
  • Output optimized code

Directives

@om-keep is a directive to tell the optimizer to not optimize the instruction out of existance. It will internally be handled as a side effect instruction.

set keepMe 123 # @om-keep
set another 123 # @om-keep

or

# @om-keep:begin
set keepMe 123
set another 123
# @om-keep:end

The spanLineDirectives transform will convert the second example to the the first one.

Developping

yarn dev will give you a web interface to see the log messages inside a monaco editor.