2026-03-25 23:38:04 +01:00
|
|
|
|
#!/usr/bin/env fun
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
* This file is part of the Fun programming language.
|
|
|
|
|
|
* https://fun-lang.xyz/
|
|
|
|
|
|
*
|
|
|
|
|
|
* Copyright 2026 Johannes Findeisen
|
|
|
|
|
|
* Licensed under the terms of the Apache-2.0 license.
|
|
|
|
|
|
* https://opensource.org/license/apache-2-0
|
|
|
|
|
|
*
|
|
|
|
|
|
* Added: 2026-03-25
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
// String helpers
|
|
|
|
|
|
#include <strings.fun>
|
|
|
|
|
|
|
|
|
|
|
|
path = "./README.md"
|
|
|
|
|
|
txt = read_file(path)
|
|
|
|
|
|
if (len(txt) == 0)
|
|
|
|
|
|
print("no content: " + path)
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
txt = str_to_lower(txt)
|
|
|
|
|
|
txt = str_replace_all(txt, "\n", " ")
|
|
|
|
|
|
parts = str_split(txt, " ")
|
|
|
|
|
|
freq = {}
|
|
|
|
|
|
for w in parts
|
|
|
|
|
|
w = str_trim(w)
|
|
|
|
|
|
if (len(w) == 0) continue
|
|
|
|
|
|
c = to_number(freq[w])
|
|
|
|
|
|
if (c <= 0) c = 0
|
|
|
|
|
|
freq[w] = c + 1
|
|
|
|
|
|
|
|
|
|
|
|
for k in keys(freq)
|
|
|
|
|
|
print(k + ": " + to_string(freq[k]))
|
|
|
|
|
|
|
|
|
|
|
|
/* Possible output (first 10 lines; counts depend on README.md contents):
|
|
|
|
|
|
#: 1
|
|
|
|
|
|
fun: 19
|
|
|
|
|
|
([https://fun-lang.xyz](https://fun-lang.xyz)): 1
|
|
|
|
|
|
##: 9
|
|
|
|
|
|
what: 2
|
|
|
|
|
|
is: 16
|
|
|
|
|
|
fun?: 1
|
|
|
|
|
|
a: 9
|
|
|
|
|
|
small,: 1
|
|
|
|
|
|
strict,: 1
|
|
|
|
|
|
and: 15
|
|
|
|
|
|
simple: 3
|
|
|
|
|
|
programming: 5
|
|
|
|
|
|
language: 5
|
|
|
|
|
|
that: 4
|
|
|
|
|
|
runs: 1
|
|
|
|
|
|
on: 3
|
|
|
|
|
|
compact: 1
|
|
|
|
|
|
stack-based: 1
|
|
|
|
|
|
virtual: 1
|
|
|
|
|
|
machine.: 1
|
|
|
|
|
|
the: 24
|
|
|
|
|
|
c: 2
|
|
|
|
|
|
core: 3
|
|
|
|
|
|
intentionally: 1
|
|
|
|
|
|
minimal;: 1
|
|
|
|
|
|
most: 6
|
|
|
|
|
|
functionality: 1
|
|
|
|
|
|
standard: 2
|
|
|
|
|
|
libraries: 2
|
|
|
|
|
|
are: 6
|
|
|
|
|
|
implemented: 2
|
|
|
|
|
|
in: 19
|
|
|
|
|
|
itself.: 2
|
|
|
|
|
|
emphasizes: 1
|
|
|
|
|
|
simplicity,: 1
|
|
|
|
|
|
consistency,: 1
|
|
|
|
|
|
joy: 3
|
|
|
|
|
|
coding.: 2
|
|
|
|
|
|
an: 1
|
|
|
|
|
|
experiment,: 1
|
|
|
|
|
|
just: 2
|
|
|
|
|
|
for: 6
|
|
|
|
|
|
fun,: 3
|
|
|
|
|
|
but: 5
|
|
|
|
|
|
works!: 1
|
|
|
|
|
|
highly: 2
|
|
|
|
|
|
strict: 1
|
|
|
|
|
|
language,: 1
|
|
|
|
|
|
also: 1
|
|
|
|
|
|
simple.: 1
|
|
|
|
|
|
it: 2
|
|
|
|
|
|
looks: 2
|
|
|
|
|
|
like: 4
|
|
|
|
|
|
python: 1
|
|
|
|
|
|
(my: 1
|
|
|
|
|
|
favorite: 1
|
|
|
|
|
|
language),: 1
|
|
|
|
|
|
there: 2
|
|
|
|
|
|
differences.: 1
|
|
|
|
|
|
influenced: 1
|
|
|
|
|
|
by: 2
|
|
|
|
|
|
**[bash](https://www.gnu.org/software/bash/)**,: 1
|
|
|
|
|
|
**[c](https://en.wikipedia.org/wiki/the_c_programming_language)**,: 1
|
|
|
|
|
|
**[lua](https://www.lua.org/)**,: 1
|
|
|
|
|
|
php,: 1
|
|
|
|
|
|
**[python](https://www.python.org/)**,: 1
|
|
|
|
|
|
rust: 1
|
|
|
|
|
|
(most: 1
|
|
|
|
|
|
influences: 1
|
|
|
|
|
|
came: 1
|
|
|
|
|
|
from: 2
|
|
|
|
|
|
linked: 1
|
|
|
|
|
|
languages).: 1
|
|
|
|
|
|
will: 4
|
|
|
|
|
|
ever: 1
|
|
|
|
|
|
be: 5
|
|
|
|
|
|
100%: 1
|
|
|
|
|
|
free: 1
|
|
|
|
|
|
under: 1
|
|
|
|
|
|
terms: 1
|
|
|
|
|
|
of: 3
|
|
|
|
|
|
[apache-2.0: 1
|
|
|
|
|
|
license](https://opensource.org/license/apache-2-0).: 1
|
|
|
|
|
|
idea: 1
|
|
|
|
|
|
-: 48
|
|
|
|
|
|
simplicity: 2
|
|
|
|
|
|
consistency: 2
|
|
|
|
|
|
to: 7
|
|
|
|
|
|
extend: 1
|
|
|
|
|
|
hackable: 1
|
|
|
|
|
|
coding: 2
|
|
|
|
|
|
fun!: 1
|
|
|
|
|
|
characteristics: 1
|
|
|
|
|
|
dynamic: 1
|
|
|
|
|
|
optionally: 1
|
|
|
|
|
|
statically: 1
|
|
|
|
|
|
typed: 1
|
|
|
|
|
|
type: 1
|
|
|
|
|
|
safety: 1
|
|
|
|
|
|
written: 6
|
|
|
|
|
|
(c99): 1
|
|
|
|
|
|
internal: 1
|
|
|
|
|
|
libs: 2
|
|
|
|
|
|
with: 2
|
|
|
|
|
|
no_camel_case: 1
|
|
|
|
|
|
even: 1
|
|
|
|
|
|
when: 1
|
|
|
|
|
|
except: 1
|
|
|
|
|
|
class: 1
|
|
|
|
|
|
names: 1
|
|
|
|
|
|
only: 2
|
|
|
|
|
|
minimal: 1
|
|
|
|
|
|
function: 1
|
|
|
|
|
|
set: 1
|
|
|
|
|
|
c,: 1
|
|
|
|
|
|
other: 1
|
|
|
|
|
|
functions: 1
|
|
|
|
|
|
manifesto: 1
|
|
|
|
|
|
built: 2
|
|
|
|
|
|
idea:: 1
|
|
|
|
|
|
should: 6
|
|
|
|
|
|
enjoyable,: 1
|
|
|
|
|
|
elegant,: 1
|
|
|
|
|
|
consistent.: 1
|
|
|
|
|
|
###: 5
|
|
|
|
|
|
philosophy: 1
|
|
|
|
|
|
**fun: 2
|
|
|
|
|
|
fun**<br>: 1
|
|
|
|
|
|
spark: 1
|
|
|
|
|
|
creativity,: 1
|
|
|
|
|
|
not: 4
|
|
|
|
|
|
frustration.: 1
|
|
|
|
|
|
code: 3
|
|
|
|
|
|
feels: 3
|
|
|
|
|
|
light,: 1
|
|
|
|
|
|
playful,: 1
|
|
|
|
|
|
rewarding.: 1
|
|
|
|
|
|
uses: 1
|
|
|
|
|
|
nothing**<br>: 1
|
|
|
|
|
|
minimalism: 1
|
|
|
|
|
|
power.: 1
|
|
|
|
|
|
no: 7
|
|
|
|
|
|
unnecessary: 1
|
|
|
|
|
|
features,: 1
|
|
|
|
|
|
endless: 1
|
|
|
|
|
|
syntax: 1
|
|
|
|
|
|
variations,: 1
|
|
|
|
|
|
formatting: 1
|
|
|
|
|
|
debates.: 1
|
|
|
|
|
|
clean,: 1
|
|
|
|
|
|
uniform: 1
|
|
|
|
|
|
code.: 1
|
|
|
|
|
|
**indentation: 1
|
|
|
|
|
|
truth**<br>: 1
|
|
|
|
|
|
two: 1
|
|
|
|
|
|
spaces,: 1
|
|
|
|
|
|
always.: 1
|
|
|
|
|
|
tabs,: 1
|
|
|
|
|
|
four-space: 1
|
|
|
|
|
|
wars.: 1
|
|
|
|
|
|
look: 1
|
|
|
|
|
|
same: 2
|
|
|
|
|
|
everywhere,: 1
|
|
|
|
|
|
your: 1
|
|
|
|
|
|
laptop: 1
|
|
|
|
|
|
/usr/bin/fun.: 1
|
|
|
|
|
|
**one: 1
|
|
|
|
|
|
way: 1
|
|
|
|
|
|
do: 1
|
|
|
|
|
|
it**<br>: 1
|
|
|
|
|
|
clutter,: 1
|
|
|
|
|
|
15: 1
|
|
|
|
|
|
ways: 1
|
|
|
|
|
|
writing: 1
|
|
|
|
|
|
thing.: 1
|
|
|
|
|
|
means: 1
|
|
|
|
|
|
clarity.: 1
|
|
|
|
|
|
**hackable: 1
|
|
|
|
|
|
nature**<br>: 1
|
|
|
|
|
|
small: 1
|
|
|
|
|
|
embeddable,: 1
|
|
|
|
|
|
lua.: 1
|
|
|
|
|
|
easy: 1
|
|
|
|
|
|
understand,: 1
|
|
|
|
|
|
extend,: 1
|
|
|
|
|
|
tinker: 1
|
|
|
|
|
|
—: 2
|
|
|
|
|
|
true: 1
|
|
|
|
|
|
hacker: 1
|
|
|
|
|
|
spirit.: 1
|
|
|
|
|
|
**beautiful: 1
|
|
|
|
|
|
defaults**<br>: 1
|
|
|
|
|
|
doesn’t: 1
|
|
|
|
|
|
need: 1
|
|
|
|
|
|
linters,: 1
|
|
|
|
|
|
formatters,: 1
|
|
|
|
|
|
or: 3
|
|
|
|
|
|
style: 1
|
|
|
|
|
|
guides.: 1
|
|
|
|
|
|
beauty: 1
|
|
|
|
|
|
in.: 1
|
|
|
|
|
|
community: 3
|
|
|
|
|
|
about: 2
|
|
|
|
|
|
being: 1
|
|
|
|
|
|
fastest: 1
|
|
|
|
|
|
feature-rich.: 1
|
|
|
|
|
|
it’s: 1
|
|
|
|
|
|
sharing: 1
|
|
|
|
|
|
be:: 1
|
|
|
|
|
|
respectful: 1
|
|
|
|
|
|
curious: 1
|
|
|
|
|
|
creative: 1
|
|
|
|
|
|
open: 1
|
|
|
|
|
|
everyone: 1
|
|
|
|
|
|
name: 1
|
|
|
|
|
|
says:: 1
|
|
|
|
|
|
unites: 1
|
|
|
|
|
|
nerds.: 1
|
|
|
|
|
|
please: 1
|
|
|
|
|
|
visit: 1
|
|
|
|
|
|
[fun: 1
|
|
|
|
|
|
page](https://fun-lang.xyz/community/): 1
|
|
|
|
|
|
get: 1
|
|
|
|
|
|
touch.: 1
|
|
|
|
|
|
goal: 1
|
|
|
|
|
|
home: 1
|
|
|
|
|
|
developers: 1
|
|
|
|
|
|
who:: 1
|
|
|
|
|
|
love: 1
|
|
|
|
|
|
minimal,: 1
|
|
|
|
|
|
elegant: 1
|
|
|
|
|
|
tools: 1
|
|
|
|
|
|
believe: 1
|
|
|
|
|
|
freedom: 1
|
|
|
|
|
|
want: 1
|
|
|
|
|
|
write: 1
|
|
|
|
|
|
good: 2
|
|
|
|
|
|
may: 2
|
|
|
|
|
|
change: 1
|
|
|
|
|
|
world: 1
|
|
|
|
|
|
make: 1
|
|
|
|
|
|
little: 1
|
|
|
|
|
|
more: 1
|
|
|
|
|
|
fun.: 1
|
|
|
|
|
|
features: 2
|
|
|
|
|
|
functions/classes/objects: 1
|
|
|
|
|
|
if/else: 2
|
|
|
|
|
|
try/catch/finally: 1
|
|
|
|
|
|
lib: 1
|
|
|
|
|
|
(./lib/): 1
|
|
|
|
|
|
see: 2
|
|
|
|
|
|
[./lib/](https://git.xw3.org/fun/fun/src/branch/main/lib): 2
|
|
|
|
|
|
library: 1
|
|
|
|
|
|
provides.: 1
|
|
|
|
|
|
optional: 1
|
|
|
|
|
|
extensions: 1
|
|
|
|
|
|
(build-time: 1
|
|
|
|
|
|
selectable: 1
|
|
|
|
|
|
/: 2
|
|
|
|
|
|
testing: 1
|
|
|
|
|
|
this: 1
|
|
|
|
|
|
linux: 1
|
|
|
|
|
|
actually):: 1
|
|
|
|
|
|
[cgi](https://en.wikipedia.org/wiki/common_gateway_interface): 1
|
|
|
|
|
|
support: 1
|
|
|
|
|
|
builtin: 1
|
|
|
|
|
|
using: 1
|
|
|
|
|
|
[kcgi](https://kristaps.bsd.lv/kcgi/): 1
|
|
|
|
|
|
(optional): 11
|
|
|
|
|
|
☐: 2
|
|
|
|
|
|
[curl: 1
|
2026-04-19 00:02:36 +02:00
|
|
|
|
(libcurl)](./docs/extensions/curl.md): 1
|
2026-03-25 23:38:04 +01:00
|
|
|
|
☑: 11
|
|
|
|
|
|
[ini: 1
|
2026-04-19 00:02:36 +02:00
|
|
|
|
(iniparser)](./docs/extensions/ini.md): 1
|
2026-03-25 23:38:04 +01:00
|
|
|
|
[json: 1
|
2026-04-19 00:02:36 +02:00
|
|
|
|
(json-c)](./docs/extensions/json.md): 1
|
|
|
|
|
|
[libsql](./docs/extensions/libsql.md): 1
|
|
|
|
|
|
[pcre2](./docs/extensions/pcre2.md): 1
|
2026-03-25 23:38:04 +01:00
|
|
|
|
[pcsc: 1
|
|
|
|
|
|
(smart: 1
|
2026-04-19 00:02:36 +02:00
|
|
|
|
cards)](./docs/extensions/pcsc.md): 1
|
|
|
|
|
|
[openssl](./docs/extensions/openssl.md): 1
|
|
|
|
|
|
[sqlite](./docs/extensions/sqlite.md): 1
|
2026-03-25 23:38:04 +01:00
|
|
|
|
[xml: 1
|
2026-04-19 00:02:36 +02:00
|
|
|
|
(libxml2)](./docs/extensions/xml2.md): 1
|
2026-03-25 23:38:04 +01:00
|
|
|
|
=: 2
|
|
|
|
|
|
done: 1
|
|
|
|
|
|
planned: 1
|
|
|
|
|
|
progress.: 1
|
|
|
|
|
|
note:: 2
|
|
|
|
|
|
all: 1
|
|
|
|
|
|
above: 1
|
|
|
|
|
|
implemented.: 1
|
|
|
|
|
|
those: 1
|
|
|
|
|
|
who: 1
|
|
|
|
|
|
marked: 1
|
|
|
|
|
|
"done": 1
|
|
|
|
|
|
probaly: 1
|
|
|
|
|
|
remain: 1
|
|
|
|
|
|
i: 1
|
|
|
|
|
|
don't: 1
|
|
|
|
|
|
know: 1
|
|
|
|
|
|
actually...: 1
|
|
|
|
|
|
;): 1
|
|
|
|
|
|
some: 2
|
|
|
|
|
|
available: 1
|
|
|
|
|
|
diretory.: 1
|
|
|
|
|
|
future: 1
|
|
|
|
|
|
enhancements: 1
|
|
|
|
|
|
openssl: 1
|
|
|
|
|
|
quickstart: 1
|
|
|
|
|
|
(md5): 1
|
|
|
|
|
|
dedicated: 1
|
|
|
|
|
|
page:: 1
|
2026-04-19 00:02:36 +02:00
|
|
|
|
./docs/extensions/openssl.md: 1
|
2026-03-25 23:38:04 +01:00
|
|
|
|
documentation: 2
|
|
|
|
|
|
looking: 1
|
|
|
|
|
|
docs?: 1
|
|
|
|
|
|
start: 1
|
|
|
|
|
|
here:: 1
|
|
|
|
|
|
local: 1
|
|
|
|
|
|
index:: 1
|
|
|
|
|
|
[docs/readme.md](./docs/readme.md): 1
|
|
|
|
|
|
handbook:: 1
|
|
|
|
|
|
[docs/handbook.md](./docs/handbook.md): 1
|
|
|
|
|
|
types: 1
|
|
|
|
|
|
overview:: 1
|
|
|
|
|
|
[docs/types.md](./docs/types.md): 1
|
|
|
|
|
|
repl: 1
|
|
|
|
|
|
guide:: 1
|
|
|
|
|
|
[docs/repl.md](./docs/repl.md): 1
|
|
|
|
|
|
testing:: 1
|
|
|
|
|
|
[docs/testing.md](./docs/testing.md): 1
|
|
|
|
|
|
troubleshooting:: 1
|
|
|
|
|
|
[docs/troubleshooting.md](./docs/troubleshooting.md): 1
|
|
|
|
|
|
additional: 1
|
|
|
|
|
|
references:: 1
|
|
|
|
|
|
specification:: 1
|
|
|
|
|
|
[spec/v0.3.md](./spec/v0.3.md): 1
|
|
|
|
|
|
(work: 1
|
|
|
|
|
|
progress): 1
|
|
|
|
|
|
examples: 1
|
|
|
|
|
|
demonstrating: 1
|
|
|
|
|
|
features:: 1
|
|
|
|
|
|
[examples/](./examples/): 1
|
|
|
|
|
|
internals: 1
|
|
|
|
|
|
vm: 1
|
|
|
|
|
|
opcodes: 1
|
|
|
|
|
|
live: 1
|
|
|
|
|
|
[src/](./src/): 1
|
|
|
|
|
|
(see: 1
|
|
|
|
|
|
[src/vm/](./src/vm): 1
|
|
|
|
|
|
opcode: 1
|
|
|
|
|
|
implementations): 1
|
|
|
|
|
|
project: 1
|
|
|
|
|
|
evolving;: 1
|
|
|
|
|
|
documents: 1
|
|
|
|
|
|
lag: 1
|
|
|
|
|
|
behind.: 1
|
|
|
|
|
|
docs: 1
|
|
|
|
|
|
index: 1
|
|
|
|
|
|
`./docs/readme.md`: 1
|
|
|
|
|
|
up‑to‑date: 1
|
|
|
|
|
|
entry: 1
|
|
|
|
|
|
point.: 1
|
|
|
|
|
|
author: 1
|
|
|
|
|
|
johannes: 1
|
|
|
|
|
|
findeisen: 1
|
|
|
|
|
|
<you@hanez.org>: 1
|
|
|
|
|
|
*/
|