Private
Public Access
docs(twitter): add 1917656437473399108 corpus (NOTimothyLottes 'C is not assembly' punchline)
10-post thread. 9 of 10 posts are duplicates of posts 2-10 in the existing merged 1917646466417381426 corpus (same conversation, gallery- dl anchored to this leaf URL). The unique value here is post 10 (2025-04-30 19:04:57): 'I laugh when people say C is like assembly, they are missing what we actually did in assembly back then, which was all registers and globals and gotos, no stacks. It's radically different than good assembly.' Same content also captured in bootslop references/X.com - Onat & Lottes Interaction 1.png.ocr.md.
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: "@onatt0 I laugh when people say C is like assembly, they are missing what we act"
|
||||
author: "NOTimothyLottes"
|
||||
handle: "@NOTimothyLottes"
|
||||
post_url: "https://x.com/NOTimothyLottes/status/1917656437473399108"
|
||||
post_id: "1917656437473399108"
|
||||
timestamp: "2025-04-30 19:04:57"
|
||||
post_count: 10
|
||||
reply_count: 1
|
||||
repost_count: 0
|
||||
like_count: 2
|
||||
view_count: 161
|
||||
---
|
||||
|
||||
# @NOTimothyLottes — @onatt0 I laugh when people say C is like assembly, they are missing what we act
|
||||
|
||||
## Post 1 (2025-04-30 18:10:43)
|
||||
|
||||
@onatt0 Related thoughts/
|
||||
[0] Having a low upper bound on the maximum complexity allowed in a program enables so much simplification. One can always move complexity into data, while keeping tight codebases.
|
||||
|
||||
## Post 2 (2025-04-30 18:19:07) — reply to Post 1
|
||||
|
||||
@onatt0 [1] Seems like you group symbols into pages where each page can have a string (shared with all symbols in the page), which when pared with limited fixed maximum symbol string size, is an elegant way of effectively supporting larger naming [I'll probably steal that idea next time]
|
||||
|
||||
## Post 3 (2025-04-30 18:22:55) — reply to Post 2
|
||||
|
||||
@onatt0 [2] I'm also a big fan of how you used 16:9 aspect to auto render all the debug info, symbol tables, disassembly, etc, alongside the source. I think many people are probably lost in the speed at which you can manipulate and test ideas while working on the source
|
||||
|
||||
## Post 4 (2025-04-30 18:25:20) — reply to Post 3
|
||||
|
||||
@onatt0 [3] I got side tracked by building a language that could be assembled from on the GPU in SIMD. However now I ask myself if that is just adding "complexity", because if programs are bounded in size, why not just focus on CPU non-parallel nested factoring (aka the forth-like way)
|
||||
|
||||
## Post 5 (2025-04-30 18:35:00) — reply to Post 4
|
||||
|
||||
@onatt0 [4] 2-item data stack is an interesting compromise. Something I never considered. I left off ripping out the data stack completely.
|
||||
|
||||
## Post 6 (2025-04-30 18:40:32) — reply to Post 5
|
||||
|
||||
@onatt0 [5] Can do this instead,
|
||||
a. Track a "top" register (number)
|
||||
b. Use symbols to override top register
|
||||
c. Have push (store) just advance top to next reg (in circular queue)
|
||||
Gets to easy unnamed arguments
|
||||
|
||||
## Post 7 (2025-04-30 18:45:38) — reply to Post 6
|
||||
|
||||
@onatt0 [6] You mentioned VK is most "form filling" which I think is an accurate description. For most "C" like APIs I like to just lay out all the arguments in memory like a tape drive in the order that functions get called and source that tape at runtime for the calls ...
|
||||
|
||||
## Post 8 (2025-04-30 18:47:28) — reply to Post 7
|
||||
|
||||
@onatt0 [7] They key concept here is that "common" arguments like the device are pushed onto the tape using store duplication when they are known (after device creation). So it's preemptive scatter, so later at call time there is no argument gather.
|
||||
|
||||
## Post 9 (2025-04-30 18:49:40) — reply to Post 8
|
||||
|
||||
@onatt0 [8] Likely the majority of C/C++/OOP/bloatware is just shuffling data around in argument gather to support the concept of data stacks on HW that has no physical data stack.
|
||||
|
||||
## Post 10 (2025-04-30 19:04:57)
|
||||
|
||||
@onatt0 I laugh when people say C is like assembly, they are missing what we actually did in assembly back then, which was all registers and globals and gotos, no stacks. It's radically different than good assembly.
|
||||
@@ -0,0 +1,166 @@
|
||||
{
|
||||
"root_post_id": "1917656437473399108",
|
||||
"posts": [
|
||||
{
|
||||
"post_id": "1917642786804785230",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 Related thoughts/\n[0] Having a low upper bound on the maximum complexity allowed in a program enables so much simplification. One can always move complexity into data, while keeping tight codebases.",
|
||||
"timestamp": "2025-04-30 18:10:43",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917613300902146419",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 1,
|
||||
"repost_count": 0,
|
||||
"like_count": 1,
|
||||
"view_count": 121
|
||||
}
|
||||
},
|
||||
{
|
||||
"post_id": "1917644904055910502",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 [1] Seems like you group symbols into pages where each page can have a string (shared with all symbols in the page), which when pared with limited fixed maximum symbol string size, is an elegant way of effectively supporting larger naming [I'll probably steal that idea next time]",
|
||||
"timestamp": "2025-04-30 18:19:07",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917642786804785230",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 2,
|
||||
"repost_count": 0,
|
||||
"like_count": 0,
|
||||
"view_count": 102
|
||||
}
|
||||
},
|
||||
{
|
||||
"post_id": "1917645859791200562",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 [2] I'm also a big fan of how you used 16:9 aspect to auto render all the debug info, symbol tables, disassembly, etc, alongside the source. I think many people are probably lost in the speed at which you can manipulate and test ideas while working on the source",
|
||||
"timestamp": "2025-04-30 18:22:55",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917644904055910502",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 1,
|
||||
"repost_count": 0,
|
||||
"like_count": 0,
|
||||
"view_count": 99
|
||||
}
|
||||
},
|
||||
{
|
||||
"post_id": "1917646466417381426",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 [3] I got side tracked by building a language that could be assembled from on the GPU in SIMD. However now I ask myself if that is just adding \"complexity\", because if programs are bounded in size, why not just focus on CPU non-parallel nested factoring (aka the forth-like way)",
|
||||
"timestamp": "2025-04-30 18:25:20",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917645859791200562",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 2,
|
||||
"repost_count": 0,
|
||||
"like_count": 0,
|
||||
"view_count": 136
|
||||
}
|
||||
},
|
||||
{
|
||||
"post_id": "1917648900556558768",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 [4] 2-item data stack is an interesting compromise. Something I never considered. I left off ripping out the data stack completely.",
|
||||
"timestamp": "2025-04-30 18:35:00",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917646466417381426",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 1,
|
||||
"repost_count": 0,
|
||||
"like_count": 0,
|
||||
"view_count": 100
|
||||
}
|
||||
},
|
||||
{
|
||||
"post_id": "1917650289978454504",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 [5] Can do this instead,\na. Track a \"top\" register (number)\nb. Use symbols to override top register\nc. Have push (store) just advance top to next reg (in circular queue)\nGets to easy unnamed arguments",
|
||||
"timestamp": "2025-04-30 18:40:32",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917648900556558768",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 2,
|
||||
"repost_count": 0,
|
||||
"like_count": 2,
|
||||
"view_count": 120
|
||||
}
|
||||
},
|
||||
{
|
||||
"post_id": "1917651574354030636",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 [6] You mentioned VK is most \"form filling\" which I think is an accurate description. For most \"C\" like APIs I like to just lay out all the arguments in memory like a tape drive in the order that functions get called and source that tape at runtime for the calls ...",
|
||||
"timestamp": "2025-04-30 18:45:38",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917650289978454504",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 1,
|
||||
"repost_count": 0,
|
||||
"like_count": 0,
|
||||
"view_count": 109
|
||||
}
|
||||
},
|
||||
{
|
||||
"post_id": "1917652037078065160",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 [7] They key concept here is that \"common\" arguments like the device are pushed onto the tape using store duplication when they are known (after device creation). So it's preemptive scatter, so later at call time there is no argument gather.",
|
||||
"timestamp": "2025-04-30 18:47:28",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917651574354030636",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 1,
|
||||
"repost_count": 0,
|
||||
"like_count": 1,
|
||||
"view_count": 122
|
||||
}
|
||||
},
|
||||
{
|
||||
"post_id": "1917652589358858332",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 [8] Likely the majority of C/C++/OOP/bloatware is just shuffling data around in argument gather to support the concept of data stacks on HW that has no physical data stack.",
|
||||
"timestamp": "2025-04-30 18:49:40",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917652037078065160",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 2,
|
||||
"repost_count": 0,
|
||||
"like_count": 2,
|
||||
"view_count": 222
|
||||
}
|
||||
},
|
||||
{
|
||||
"post_id": "1917656437473399108",
|
||||
"author": "NOTimothyLottes",
|
||||
"handle": "NOTimothyLottes",
|
||||
"text": "@onatt0 I laugh when people say C is like assembly, they are missing what we actually did in assembly back then, which was all registers and globals and gotos, no stacks. It's radically different than good assembly.",
|
||||
"timestamp": "2025-04-30 19:04:57",
|
||||
"media_urls": [],
|
||||
"reply_to_id": "1917653631651729876",
|
||||
"quote_of_id": null,
|
||||
"metrics": {
|
||||
"reply_count": 1,
|
||||
"repost_count": 0,
|
||||
"like_count": 2,
|
||||
"view_count": 161
|
||||
}
|
||||
}
|
||||
],
|
||||
"source_url": "https://x.com/NOTimothyLottes/status/1917656437473399108"
|
||||
}
|
||||
Reference in New Issue
Block a user