ling-lang 2030.1.36

Ling - The Omniglot Systems Language
Documentation
o

`!.jx&�@s�dZddlZddlZddlZdZdZdZdZdZdd	d
dddd
�Z	gd�Z
gd�Zddddddd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zed krOe�dSdS)!z�Render benchmark results.json into an SVG infographic (Ling palette).

Usage:
    python make_infographic.py [results.json] [out.svg]
�Nz#14233Dz#1C2F4Fz#E6ECF5z#8D99AEz#2C4067�#E8B84Az#E84A6Fz#2A9D8Fz#3B6EA5z#7FB069)�Ling�Rust�C�C++�Go�Python)rrrrrr)�fib�loop_sum�leibniz�primes�
mandelbrot�fm_synthu#recursion · function-call overheadztight integer arithmetic loopzfloating-point division loopz branchy integer (trial division)uGRAPHICS — complex float mathuAUDIO — FM synthesis (sin)cCs t|��dd��dd��dd�S)N�&z&amp;�<z&lt;�>z&gt;)�str�replace��s�r�:C:\Users\User\Programs\ling\benchmarks\make_infographic.py�esc's rcCs<|dkr
|d�d�S|dkr|dd�d�S|dd	�d
�S)N��?z.2fz sg����MbP?g@�@�.1fz msg��.A�.0fu µsrrrrr�fmt_time+s
rcCsD|dkrdS|dkr|d�d�S|dkr|d�d�S|dd�d�S)	Ng�������?u
1× (fastest)�
r�×i�ruk×r)�rrrr�	fmt_ratio3sr cCs�ttj�dkrtjdnd}ttj�dkrtjdnd}t|ddd��
}t�|�}Wd�n1s3wYt|�}t|ddd��
}|�|�Wd�n1sSwYtd	|���dS)
N�zresults.json�zling_benchmark.svgrzutf-8)�encoding�wzwrote )	�len�sys�argv�open�json�load�	build_svg�write�print)�src�out�fh�data�svgrrr�main=s��r3c(s���di�}��di���fdd�tD�}t�����D]	}��|���q�fdd�tD�}dd�|D�}tD]3}��|�}|sBq8tdd	�|��D��}|D]}||vrj||d
dkrj||�||d
|�qOq8dd�|�	�D��t
��fd
d�d�}�fdd�}	|	dd�}
|	dd�}d}d}
d}d�d}g�ds�fdd�	}dtddd f�fd!d"�	}d#d�|��D�dg}td$d	�|D��p�d���fd%d&�}|
}||
|d'd(d)d*d+�||
|d,d-dt
d.�|d/7}||
||d0|
d1td2d3�d4}||
d5|d6|d7d*d8d9�g}|
�r|�d:t|
��d;��|�r$|�d:t|��d<��|�d=�||
d5|d>d?�|�d@td.�|dA7}||
|dBdCd*d+�|d@7}t�fdDd	�|D���pWd}|D]a}||7}||
|dE|dd*t�|t�d9�||||dE�|d2tdFdGdH�dF�dFt�t�|d��|}||||dE||d2t�|t�dFd3�|||d2|dEt�|�d@td.��qZ|d'7}||
|dIdCd*d+�|d27}tD]�}��|�}|�sېq�tdJd	�|��D��}|d)7}|dKv}|�r�d8nt}||
||�dLd*|d9�||
dM|t�|dN�dOt
d.�|D]t}||v�r�q||7}||d
}|dk�r-||nd}||
dP|dE|d@t�|t�d.�||||dE�|d2tdFdQdH�||�}||||dE||d2t�|t�dFd3�t|��d?t|���}|||d2|dE|dOtdRdS��q|dE7}�q�|d)7}||
|dC|d0|
dTt�|�dUdV�}|�dWdN�}|�dXdN�} |�dYdZ�}!||
|dEd[|�d\|��dPt
d.�||
|d'd]|!�d^|�d_dN���dPt
d.�||
|d`da| �db�dPt
d.�|dc}"||
dd}#|
dF}$||#dP|$dFdedCt|�dLtdfdgdH�||#|$dPdhdPt
d.�t|�D](\}%}|$d)|%dC}&||#|&d2dPdPt�|t�d0d3�||#d5|&|dOtd.��qdi���}'dj|�dk|"dl�dm|�dn|"dl�do|�dk|"dl�dpt�dq|'�dr�S)tN�meta�
benchmarkscs g|]}|��dt�vr|�qS)�langs)�get�
LANG_ORDER��.0�l)r1rr�
<listcomp>Ks zbuild_svg.<locals>.<listcomp>csg|]}|�vr|�qSrrr9)�presentrrr<PscSsi|]}|g�qSrrr9rrr�
<dictcomp>Sszbuild_svg.<locals>.<dictcomp>cs�$�|]
}|ddkr|dVqdS��timerNr�r:�vrrr�	<genexpr>X��"zbuild_svg.<locals>.<genexpr>rArcSs6i|]\}}|r|t�tdd�|D��t|���qS)cs��|]}t�|�VqdS�N��math�log�r:�xrrrrD\��z'build_svg.<locals>.<dictcomp>.<genexpr>)rI�exp�sumr%)r:r;rCrrrr>\s6cs�|SrGr)r;��geomeanrr�<lambda>]szbuild_svg.<locals>.<lambda>)�keycs�g}tD](}��|�}|r,||vr,||vr,||ddkr,|�||d||d�q|r?t�tdd�|D��t|��SdS)NrArcsrFrGrHrKrrrrDfrMz.build_svg.<locals>.gm_ratio.<locals>.<genexpr>)�BENCH_ORDERr7�appendrIrNrOr%)�a�bZrs�nameZbb)�benchesrr�gm_ratio`s
$�(zbuild_svg.<locals>.gm_ratiorrri��(ihi��rcsB��d|d�d|d�d|d�d|d�d|�d|�d|�d	��dS)
Nz	<rect x="r�" y="z	" width="�
" height="z" rx="�" fill="z" opacity="z"/>)rU)rL�yr$�h�fill�rx�opacity��partsrr�rectss"����zbuild_svg.<locals>.rect��startZnormalFc	sT|rdnd}��d|d�d|d�d|�d|�d|�d	|�d
|�dt|��d��dS)
Nz'Consolas, 'DejaVu Sans Mono', monospacez%'Segoe UI', 'DejaVu Sans', sans-serifz	<text x="rr]z" font-family="z
" font-size="r_z" text-anchor="z" font-weight="z">z</text>)rUr)	rLr`r�sizerb�anchor�weight�monoZfamrerr�textys������zbuild_svg.<locals>.textcSsg|]	}|D]}|�qqSrr)r:rCrrrrr<�scss �|]}t�t|d��VqdS�rN�rI�log10�max)r:rrrrrD�s�cs d�dt�t|d���S)N�rrp)�ratio)�bar_w�max_logrr�logbar_w�s zbuild_svg.<locals>.logbar_w�u Ling 2030 — Language Benchmark�Zbold)rjrl�2uObase language · graphics · audio compute, vs Python · Rust · C · C++ · Go)rjrb�Nr"�Fr)rcz;Ling's tree-walking interpreter trades raw speed for reach.���r)rjrlrb�~z slower than Cz slower than CPythonuR(geometric mean) — its graphics/audio/GPU run as native Rust crates at ~C speed.�4u   ·   ��\u.Overall — geometric-mean slowdown vs fastest�c3s$�|]
}t�t�|d��VqdSrorpr9rPrrrD�rE�rsgffffff�?)rcrdu2Per-benchmark (log-scaled · shorter bar = faster)csr?r@rrBrrrrD�rE)r
r����
�g333333�?T)rjrbrmr!�cpuzunknown CPU�os�date�reps�?z	machine: u  ·  zmin of ux runs · same algorithm/inputs in every language · C/C++ built -O2 -ffp-contract=off · Rust -O · Go build · CPython �python�*z
generated u�  ·  benchmarks/ in the ling repo  ·  mandelbrot=graphics-style float math, fm_synth=audio-style synthesis (these are CPU compute, not the native ling-graphics/ling-audio crates)�<���g�������?Zlegend�
z/<svg xmlns="http://www.w3.org/2000/svg" width="r^rz" viewBox="0 0 � z">
<rect width="r_z"/>
z
</svg>
)rr)r7r8�set�values�update�keysrT�minrU�items�sorted�TEXTrr�MUTED�PANELr �join�COLORS�GRIDrIrq�
BENCH_DESCrr%�	enumerate�BG)(r1r4r6rWZgeorXZtminr;ZrankedrZZ	ling_vs_cZ
ling_vs_py�WZpadZbar_xZrow_hrgrnZ
all_ratiosrwr`Zhl�subZgmax_logZwpixZ	is_subsysZ
title_fill�trtZlabelr�Zosvr�r��HZlxZly�iZyy�bodyr)rurYr1rQrvrfr=rr+Hs�
��

	�
  "$(*

""($"
���* 
�������r+�__main__)�__doc__r)rIr&r�r�r�r�r�r�r8rTr�rrr r3r+�__name__rrrr�<module>sD��

"
�