Source
To run iogii save the "1 File" from the latest release (below) as iogii and chmod +x it, then run iogii <filename.iog> (it is standalone ruby code with no dependencies).
You can also download "All Source" and run cd src; ruby main.rb <filename.iog>. This includes the original source files, all tests, and site generation code.
The current version is compatible with Ruby 2.7.2 - 3.1.2 (and likely beyond in both directions). And if you use Haskell code generation (with the -hs flag), it is compatible with GHC 8.10.7.
I am not using github due to them not respecting licenses by training LLMs on code without crediting said code when used in a response.
0.3 (Beta) - March 18, 2025
Apologies for the large number of major changes. I have no further plans for large changes and should just be making minor changes and fixing bugs/documentation in the future.
Changes:
- Remove block syntax, now ops that create loops act like regular values syntactically
- Removes need for
!and nested rotation trick, instead just place values that needed to be to the left of the arg to the left of the loop op. - Allow
>,to match previous loop creation ops skipping initial match
- Removes need for
>in main function overrides implicit values like how@did.- Additional implicit values beyond the initial input use the
$of where they are used (they are also placed at beginning of unrotated program). - Auto input is removed from the stack if empty and implicits used instead.
- Add set next var (
=). - Remove
[,], and@ops, use new=instead. mdup/mpeekcannot match>(this allows them to always be skipped when matching>, use set next var instead if you needed that).- Rename assignment from
~tosetand addletsyntax (alias forset...del). - Change broadcasting when there is excess rank.
- Better handling of ops with two generic types, e.g. sortBy.
- Fix an assortment of bugs (please report any new ones!).
- Support negation in data format, e.g.
1,2~,3 = [1,-2,3] - Use the system's character encoding rather than bytes. You can force a string literal to still use bytes with
""b. -cannot subtract char from char (use^now), this is to uphold an invariant that makes circular type inference sound.- Change
charClassop to be a unary function that returns all chars in given character class. iteratetakes a list to prepend instead of a single value- empty auto input is
nilinstead of empty string - Empty type defaults to Int when used as a scalar (before errored).
- You can do a vectorized op with a list of empty type (nil), this would usually be useless since result will always be an empty list (before errored).
keeppromotes first via repeat (to easily generate a fixed number of scalars for example).chunkWhenreturns rest of first list when second list runs out- Raw mode for stdin does not break input into lines (also created with
,now).- Add
lines(p) low rank overload to approximate old behavior.
- Add
- Add
peek,mpeek,consDefault,rightJustify,dropUntilAfterSubstring,keepUntilSubstring,getSubstring, andinitops - Remove
or(usemaxorifElseinstead) - Renaming of several ops, the purpose of which is to provide better mnemonics and make some ops more generic.
=→q(equal)s→&(sortBy)q→s(len)#→_(sum)P→.(prod)|→L(abs) (low rank overload)_→~(negate / read)|→.(ord)P→_(words)A→(,(min) (now generic and not a low rank overload).X→x(max) (now generic and not a low rank overload).x→\(setDiff)&→#(reshape)\→|(chunkWhen)W→#(fromBase) (Wnot valid overload with new behavior ofabtypes).
0.2 (Alpha) - Dec 11, 2024
Changes:
- Clarified
reshapebehavior, explained in new Ops page. - Fix bug with
,following token that was split up, e.g.nJ, - Add Graphviz visualizations to online interpreter.
- Support Haskell code generation (~50x speedup + no stack overflow limit)
- Remove
pp shownow prints like Haskell would- Rename
nuketodel - Remove regex
match - Add
charClassop - Output chars mod 256 rather than error if out of range
expanddoes not return the initial value now (thanks UnrelatedString for the suggestion).- Change
transposeto insert default values so that truncation is never needed. - Support input from command line args after
--.
0.1 (Alpha) - Nov 7, 2024
Changes:
- Add more string ops
charRange ^uppercase Ulowercase Lparts P(split on whitespace)chr |,(convert int to char)match +to match regexes.
- Allow unterminated strings.
- Allow implicit args.
- Add auto parsing of input.
@also sets input if none present.- Make
pow ^work more consistently for negative numbers and not overflow for large numbers. - Remove ops:
nfoldProd p,and y - Add ops:
pad p,index .,get g - Rename ops:
chunkWhen.→\transpose\→p(pivot). So that it can be unvectorized and also provide nice overload forprod.digits\→p(it's like transposing a string)lastz→llenl→q(quantity)equalq→=assignment=→~generateg→K(kCopy), no longer genericif→y(yes no)sum_→#negate / read~→_pow10Z→H(hyper)sqrtH→u(unsquare)toBase#→D(digitize)fromBase#,→WbaseFrom(base was). Note that arg order is also swapped - necessary to have vectorized overload.
0.0 (Alpha) - Oct 29, 2024
Initial release. Uses Ruby 3.1.2.
SHA256 sum of 1 File: d325338fab8c0d44a94a2dd85c9deda61d32fe20521e4c125c99d142e37e5a5c