There have been multiple accounts created with the sole purpose of posting advertisement posts or replies containing unsolicited advertising.

Accounts which solely post advertisements, or persistently post them may be terminated.

sarahasakura

@[email protected]

Hello! I’m a lot of things, but most fundamentally I’m a person who is terrible at writing bios

This profile is from a federated server and may be incomplete. Browse more on the original instance.

sarahasakura ,

Expanding a bit on what others have said, for anybody who is further interested (simplified; this whole discussion could be pages and pages of explanation)

The code we write (source code), and the code that makes the machine do its thing (executable code) are usually very different, and there are other programs (some are compilers, others are interpreters, I’m sure there are others still) to help translate. Hopefully my examples and walkthrough below help illustrate what others have meant by their answers and gives some context on how we got to where we are, historically

At the bare metal/electricity flowing through a processor you’re generally dealing with just sequences of 0s and 1s - usually called machine code. This sequence of “on” and “off” is the only thing hardware understands, but is really hard for humans, but it’s all we had at first. A program saved as machine code is typically called a binary (for formattings sake, I added spaces between the bytes/groups of 8 bits/binary digits)

00111110 00000001 00000110 00000001 10000000 00100110 00000000 00101110 00000000 01110111

A while later, we started to develop a way of writing things in small key words with numerical values, and wrote a program that (simplified) would replace the key words with specific sequences of 0s and 1s. This is assembly code and the program that does the replacements is called an assembler. Assemblers are pretty straight forward and assembly is a close 1:1 translation to machine code; meaning you can convert between the two

<pre style="background-color:#ffffff;">
<span style="color:#323232;">LD A, 0x01
</span><span style="color:#323232;">LD B, 0x01
</span><span style="color:#323232;">ADD A,B
</span><span style="color:#323232;">LD H, 0x00
</span><span style="color:#323232;">LD L, 0x00
</span><span style="color:#323232;">LD (HL), A
</span>

These forms of code are usually your executable codes. All the instructions to get the hardware to do its thing are there, but it takes expertise to pull out the higher level meanings

This kind of writing still gets tedious and there are a lot of common things that you’d do in assembly that you might want shortcuts for. Some features for organization got added to assembly, like being able to comment code, add labels, etc but the next big coding step forward was to create higher level languages that looked more like how we write math concepts. These languages typically get compiled, by a program called a compiler, into machine code, before the code can run. Compilers working with high level languages can detect a lot of things and do a lot of tricks to give you efficient machine code; it’s not so 1:1

This kind of representation is what is generally “source code” and has a lot of semantic things that help with understandability

<pre style="background-color:#ffffff;">
<span style="color:#323232;">int main() {
</span><span style="color:#323232;">  int result = 1+1;
</span><span style="color:#323232;">}
</span>

There are some, very popular, high level languages now that don’t get compiled into machine code. Instead an interpreter reads the high level language and interprets it line by line. These languages don’t have a compilation step and usually don’t result in a machine code file to run. You just run the interpreter pointing to the source directly. Proprietary code that’s interpreted this way usually goes through a process called obfuscation/minimization. This takes something that looks like:

<pre style="background-color:#ffffff;">
<span style="color:#323232;">def postCommentAction(commentText, apiConnection) {
</span><span style="color:#323232;">  apiConnection.connect()
</span><span style="color:#323232;">  apiConnection.postComment(commentText, userInfo)
</span><span style="color:#323232;">  apiConnection.close()
</span><span style="color:#323232;">}
</span>

And turns it into:

<pre style="background-color:#ffffff;">
<span style="color:#323232;">def func_a(a,b){b.a();b.b(a,Z);b.c();}
</span>

It condenses things immensely, which helps performance/load times, and also makes it much less clear about what the code is doing. Just like assembly, all the necessary info is there to make it work, but the semantics are missing

So, to conclude - yes, you can inspect the raw instructions for any program and see what it’s doing, but you’re very likely going to be met with machine code (that you can turn into assembly) or minified scripts instead of the kind of source code that was used to create that program

sarahasakura ,

It is a curious thing - I think for the foreseeable future, we’d likely still track age via Earth years for the sake of avoiding this kind of thing. I wonder if/when we do colonize, how long would it take for the Martians to actually switch. How much would our cultures have drifted by that point?

And a related shower thought - until relatively recently (late 1960s), any definition we used to track time has been crazy localized to our planet, compared to other things in math and science where many of those concepts would still work the same elsewhere

  • All
  • Subscribed
  • Moderated
  • Favorites
  • random
  • lifeLocal
  • goranko
  • All magazines