-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
193 lines (175 loc) · 11.6 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
<!DOCTYPE html>
<html lang="en_us">
<head>
<title>LILduino</title>
<meta charset="utf-8" />
<meta name="generator" content="Pelican" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="/static/css/main.css" />
<link rel="stylesheet" href="/static/css/theme.css" />
<link rel="icon" href="/images/yazani/yazani_1_extracted_bg_big_eyes_cropped.png" type="image/png" />
<link rel="apple-touch-icon" href="/images/yazani/yazani_1_extracted_bg_big_eyes_cropped.png" type="image/png" />
<script src="/static/misc.js"></script>
<script src="/blog/banner_image.js"></script>
<meta name="tags" content="programming, arduino, c" />
<meta property="og:site_name" content="dragoncoder047’s blog" />
<meta property="og:title" content="LILduino" />
<meta property="og:description" content="Congratulations, you have reached the end of this series. I finally found a programming language that I can use on my Arduino: LIL, written by Kostas Michalopoulos. It’s a lot like Tcl (but not quite), and it has a simple to use C API so I can add custom …" />
<meta property="og:image" content="/images/yazani/yazani_1_extracted_bg.png" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://dragoncoder047.github.io/blog/2023/lilduino" />
<meta property="og:locale" content="['']" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="dragoncoder047’s blog - LILduino" />
<meta name="twitter:description" content="Congratulations, you have reached the end of this series. I finally found a programming language that I can use on my Arduino: LIL, written by Kostas Michalopoulos. It’s a lot like Tcl (but not quite), and it has a simple to use C API so I can add custom …" />
<meta name="twitter:image" content="/images/yazani/yazani_1_extracted_bg.png" />
<!-- PrismJS -->
<script src="/static/prism.js" data-autoloader-path="https://cdn.jsdelivr.net/npm/prismjs@v1.x/components/"></script>
<script src="/static/prism-runbutton.js"></script>
<script src="/phoo/prism-phoo.js"></script> <!-- /PrismJS -->
</head>
<body class="match-braces rainbow-braces">
<header>
<a href="https://dragoncoder047.github.io/blog" class="flex-row"><div class="flex-row"><img src="/images/yazani/yazani_1_extracted_bg.png" style="max-height:10em" id="banner-image" /><div id="sitename-text"><h1>dragoncoder047’s blog</h1><h2>random thoughts about nonrandom things</h2></div></div></a>
<nav>
<ul>
<li><a href="https://dragoncoder047.github.io/blog/">Home</a></li>
<li><a href="https://dragoncoder047.github.io/blog/archives">Archives</a>
</li>
<li><a href="https://dragoncoder047.github.io/blog/tags">By tag</a>
</li>
<li><a href="/">Site root</a>
</li>
<li><a href="#">Projects</a>
<ul>
<li><a href="https://dragoncoder047.github.io/thuepaste">Thuepaste</a>
</li>
<li><a href="https://dragoncoder047.github.io/armdroid">Armdroid</a>
</li>
<li><a href="https://dragoncoder047.github.io/langton-music">Langton's Ant Music</a>
</li>
<li><a href="https://dragoncoder047.github.io/schemascii">Schemascii</a>
</li>
<li><a href="https://dragoncoder047.github.io/parasite">Parasite</a>
</li>
</ul>
</li>
<li>
<form action="https://www.google.com/search" method="GET">
<input name="q" type="search" placeholder="Search"></input>
<input type="hidden" name="as_sitesearch" value="https://dragoncoder047.github.io/blog"></input>
<input type="submit" value="Search"></input>
</form>
</li>
</ul>
</nav>
</header>
<main>
<h1><a href="https://dragoncoder047.github.io/blog/2023/lilduino" rel="bookmark" title="Permalink to this page">LILduino</a></h1>
<div class="flex-row">
<span style="flex: 1">← Previous:
<a href="https://dragoncoder047.github.io/blog/2022/systems-tested">
Systems Tested
</a>
</span>
<span>Next:
<a href="https://dragoncoder047.github.io/blog/2023/hairy-circuit-layout-issues">
Hairy Circuit Layout Issues
</a> →
</span>
</div>
<div class="post-info">
Posted <time class="published" datetime="2023-01-04T00:00:00-05:00">Wed 04 January 2023</time>
<address>By
<a href="https://dragoncoder047.github.io/blog/">dragoncoder047</a>
</address>
<div class="tags">
Tags:
<a href="https://dragoncoder047.github.io/blog/tag/arduino">arduino</a>
<a href="https://dragoncoder047.github.io/blog/tag/c">c</a>
<a href="https://dragoncoder047.github.io/blog/tag/programming">programming</a>
</div>
</div>
<p><em>This post is part 6 of the arduino-scripting series:</em></p>
<ol class="series">
<li >
<a href='https://dragoncoder047.github.io/blog/2022/ulisp-thoughts'>uLisp Thoughts</a>
</li>
<li >
<a href='https://dragoncoder047.github.io/blog/2022/partcl'>ParTcl</a>
</li>
<li >
<a href='https://dragoncoder047.github.io/blog/2022/scratching-my-head-again'>Scratching My Head Again</a>
</li>
<li >
<a href='https://dragoncoder047.github.io/blog/2022/some-unrelated-ideas'>Some Unrelated Ideas</a>
</li>
<li >
<a href='https://dragoncoder047.github.io/blog/2022/segfaults'>Segfaults</a>
</li>
<li class="active">
<a href='https://dragoncoder047.github.io/blog/2023/lilduino'>LILduino</a>
</li>
</ol>
<p>Congratulations, you have reached the end of this series.</p>
<p>I finally found a programming language that I can use on my Arduino: <a href="https://runtimeterror.com/tech/lil/">LIL</a>, written by Kostas Michalopoulos. It’s a lot like Tcl (but not quite), and it has a simple to use C API so I can add custom Arduino functions. I added a few, and after working out the bugs, it worked perfectly.</p>
<p>My only gripe is that LIL has absolutely no garbage collector. Whenever it needs two of a value, LIL allocates memory for a copy, instead of simply pointing to it and garbage-collecting unreachable objects like other languages do. This inherently means that everything is immutable. The other problem is that LIL stores everything as a string, including numbers. So if you try to pass a non-number string to a function that expects a number, it won’t throw an error, it will simply use 0 instead of what you had meant to pass in. And this everything-is-a-string scheme also increases memory: a 64-bit integer could take up to 19 bytes of a string, but it will only take 8 bytes if actually stored as a number (and would be faster).</p>
<p>I’ll try to improve LIL a little bit as well as writing extension modules for it to utilize all the capabilities of my ESP32 Arduino board. I have already written a few modules, and patched LIL to allow hexadecimal number literals (instead of just base 10). Using my experience from all the other programming languages I’ve tried to use and/or write, I might also patch the <code>lil_value_t</code> struct to allow the number to be represented as an actual <code>double</code> or <code>int64_t</code> instead of a string, add a type field to distinguish between them, and then the converter functions (<code>lil_to_X</code>) would <a href="https://wiki.tcl-lang.org/page/shimmering">“shimmer”</a> the value back and forth as needed between string, int, and float.</p>
<p>Not sure if this is going to work at all, but it seems like it would. I’m deathly afraid of memory leaks, but LIL’s code is easy enough to understand and it is pretty clear when it’s allocating and freeing memory. Hopefully, LIL will continue to work. If it doesn’t, well, then I guess my exclamation in the top of this post was a little premature.</p>
<hr />
<p><strong>Related Posts</strong></p>
<ul>
<li><a href="https://dragoncoder047.github.io/blog/2024/order-up">Order Up</a></li>
<li><a href="https://dragoncoder047.github.io/blog/2022/ulisp-thoughts">uLisp Thoughts</a></li>
<li><a href="https://dragoncoder047.github.io/blog/2022/two-down-a-zillion-more-to-go">Two Down, A Zillion More To Go</a></li>
<li><a href="https://dragoncoder047.github.io/blog/2024/pointer-soup">Pointer Soup</a></li>
<li><a href="https://dragoncoder047.github.io/blog/2024/a-hash-mapped-mess">A Hash-Mapped Mess</a></li>
</ul>
<script src="https://giscus.app/client.js"
data-repo="dragoncoder047/blog"
data-repo-id="R_kgDOHCL60w"
data-category="Post Comments"
data-category-id="DIC_kwDOHCL6084CRxCW"
data-mapping="og:title"
data-reactions-enabled="1"
data-input-position="top"
data-theme="dark"
data-lang="en"
crossorigin="anonymous"
async
></script>
<section id="extras">
<div class="blogroll">
<ul>
<li><a href="https://www.conwaylife.com/">Conwaylife.com Forums</a></li>
<li><a href="https://www.python.org/">Python</a></li>
<li><a href="http://www.ulisp.com/">uLisp</a></li>
</ul>
</div>
<div class="social">
<ul>
<li><a href="https://github.com/dragoncoder047">dragoncoder047 on GitHub</a></li>
<li><a href="https://youtube.com/@dragoncoder047">dragoncoder047 on YouTube</a></li>
<li><a href="https://instagram.com/dragoncoder047/">dragoncoder047 on Instagram</a></li>
</ul>
</div>
</section>
</main>
<footer>
<address>
Site built by <a href="https://getpelican.com/">Pelican</a>
</address>
<a href="#" onclick="window.scrollTo({top: 0, left: 0});">Back to top</a>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XR0F89CCGK"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-XR0F89CCGK");
</script>
</footer>
</body>
</html>