ChuckOne
Sr. Member
Offline
Activity: 364
Merit: 250
☕ NXT-4BTE-8Y4K-CDS2-6TB82
|
|
February 04, 2014, 10:35:56 PM |
|
Well, okay. You could pay per operation.
Yes, I like it too. More importantly, we need to define its external interfaces. Say: In NXT: transactions allowed? messages allowed? etc. Even further: emails allowed? tweets allowed? etc.
|
|
|
|
|
Come-from-Beyond
Legendary
Offline
Activity: 2142
Merit: 1010
Newbie
|
|
February 04, 2014, 10:39:17 PM |
|
What about the VM outlined in N. Wirth's Compiler Construction?
I haven't heard about it so I can't answer. This is it: MODULE RISC; (*NW 27. 11. 05*) IMPORT SYSTEM, Texts; CONST MemSize* = 4096; ProgOrg = 2048; (*in bytes*) MOV = 0; MVN = 1; ADD = 2; SUB = 3; MUL = 4; Div = 5; Mod = 6; CMP = 7; MOVI = 16; MVNI = 17; ADDI = 18; SUBI = 19; MULI = 20; DIVI = 21; MODI = 22; CMPI = 23; CHKI = 24; LDW = 32; LDB = 33; POP = 34; STW = 36; STB = 37; PSH = 38; RD = 40; WRD= 41; WRH = 42; WRL = 43; BEQ = 48; BNE = 49; BLT = 50; BGE = 51; BLE = 52; BGT = 53; BR = 56; BSR = 57; RET = 58; VAR IR: LONGINT; N, Z: BOOLEAN; R*: ARRAY 16 OF LONGINT; M*: ARRAY MemSize DIV 4 OF LONGINT; W: Texts.Writer; (* R15] is PC, R[14] used as link register by BSR instruction*) PROCEDURE Execute*(start: LONGINT; VAR in: Texts.Scanner; out: Texts.Text); VAR opc, a, b, c, nxt: LONGINT; BEGIN R[14] := 0; R[15] := start + ProgOrg; LOOP (*interpretation cycle*) nxt := R[15] + 4; IR := M[R[15] DIV 4]; opc := IR DIV 4000000H MOD 40H; a := IR DIV 400000H MOD 10H; b := IR DIV 40000H MOD 10H; c := IR MOD 40000H; IF opc < MOVI THEN (*F0*) c := R[IR MOD 10H] ELSIF opc < BEQ THEN (*F1, F2*) c := IR MOD 40000H; IF c >= 20000H THEN DEC(c, 40000H) END (*sign extension*) ELSE (*F3*) c := IR MOD 4000000H; IF c >= 2000000H THEN DEC(c, 4000000H) END (*sign extension*) END ; CASE opc OF MOV, MOVI: R[a] := ASH(c, b) (*arithmetic shift*) | MVN, MVNI: R[a] := -ASH(c, b) | ADD, ADDI: R[a] := R[b] + c | SUB, SUBI: R[a] := R[b] - c | MUL, MULI: R[a] := R[b] * c | Div, DIVI: R[a] := R[b] DIV c | Mod, MODI: R[a] := R[b] MOD c | CMP, CMPI: Z := R[b] = c; N := R[b] < c | CHKI: IF (R[a] < 0) OR (R[a] >= c) THEN R[a] := 0 END | LDW: R[a] := M[(R[b] + c) DIV 4] | LDB: (*not implemented*) | POP: R[a] := M[(R[b]) DIV 4]; INC(R[b], c) | STW: M[(R[b] + c) DIV 4] := R[a] | STB: (*not implemented*) | PSH: DEC(R[b], c); M[(R[b]) DIV 4] := R[a] | RD: Texts.Scan(in); R[a] := in.i | WRD: Texts.Write(W, " "); Texts.WriteInt(W, R[c], 1) | WRH: Texts.WriteHex(W, R[c]) | WRL: Texts.WriteLn(W); Texts.Append(out, W.buf) | BEQ: IF Z THEN nxt := R[15] + c*4 END | BNE: IF ~Z THEN nxt := R[15] + c*4 END | BLT: IF N THEN nxt := R[15] + c*4 END | BGE: IF ~N THEN nxt := R[15] + c*4 END | BLE: IF Z OR N THEN nxt := R[15] + c*4 END | BGT: IF ~Z & ~N THEN nxt := R[15] + c*4 END | BR: nxt := R[15] + c*4 | BSR: nxt := R[15] + c*4; R[14] := R[15] + 4 | RET: nxt := R[c MOD 10H]; IF nxt = 0 THEN EXIT END END ; R[15] := nxt END END Execute; PROCEDURE Load*(VAR code: ARRAY OF LONGINT; len: LONGINT); VAR i: INTEGER; BEGIN i := 0; WHILE i < len DO M[i + ProgOrg DIV 4] := code[i]; INC(i) END END Load; BEGIN Texts.OpenWriter(W) END RISC.
Sorry about the formatting. Whitespace didn't copy clean. How many unique opcodes here?
|
|
|
|
Fatih87SK
|
|
February 04, 2014, 10:39:46 PM |
|
I can use your texture. Thanks. Angles are not seamless indeed. I'm struggling how I can do that nicely. Maybe I can come to a solution. I will let you know with my next render.
|
|
|
|
Come-from-Beyond
Legendary
Offline
Activity: 2142
Merit: 1010
Newbie
|
|
February 04, 2014, 10:40:58 PM |
|
Well, okay. You could pay per operation.
Yes, I like it too. More importantly, we need to define its external interfaces. Say: In NXT: transactions allowed? messages allowed? etc. Even further: emails allowed? tweets allowed? etc. External interfaces r not allowed. If a script needs external data then it should be embedded into the blockchain using AM, aliases or something else.
|
|
|
|
xyzzyx
Sr. Member
Offline
Activity: 490
Merit: 250
I don't really come from outer space.
|
|
February 04, 2014, 10:41:42 PM |
|
How many unique opcodes here?
28 opcodes for that one. It is only a starting point, though.No, that's not right. It's been a long time since I last looked at that code. It's more, have to re-look.
|
"An awful lot of code is being written ... in languages that aren't very good by people who don't know what they're doing." -- Barbara Liskov
|
|
|
jl777
Legendary
Offline
Activity: 1176
Merit: 1134
|
|
February 04, 2014, 10:43:20 PM |
|
Well, okay. You could pay per operation.
Yes, I like it too. More importantly, we need to define its external interfaces. Say: In NXT: transactions allowed? messages allowed? etc. Even further: emails allowed? tweets allowed? etc. External interfaces r not allowed. If a script needs external data then it should be embedded into the blockchain using AM, aliases or something else. Will a script be able to store data into an AM and then be able to access it a future block? Data continuity is needed for scripts that interact with external blockchains.
|
|
|
|
Come-from-Beyond
Legendary
Offline
Activity: 2142
Merit: 1010
Newbie
|
|
February 04, 2014, 10:43:43 PM |
|
How many unique opcodes here?
28 opcodes for that one. It is only a starting point, though.No, that's not right. It's been a long time since I last looked at that code. It's more, have to re-look. Very good if it's 28, coz I know only a solution with 32 opcodes.
|
|
|
|
^[GS]^
Member
Offline
Activity: 112
Merit: 10
|
|
February 04, 2014, 10:44:50 PM |
|
Anyone know when version 0.6.0 comes out and that would change? I am eager!
|
|
|
|
ChuckOne
Sr. Member
Offline
Activity: 364
Merit: 250
☕ NXT-4BTE-8Y4K-CDS2-6TB82
|
|
February 04, 2014, 10:45:00 PM |
|
Well, okay. You could pay per operation.
Yes, I like it too. More importantly, we need to define its external interfaces. Say: In NXT: transactions allowed? messages allowed? etc. Even further: emails allowed? tweets allowed? etc. External interfaces r not allowed. If a script needs external data then it should be embedded into the blockchain using AM, aliases or something else. Why not? Ethereum code could send transactions. Sounds legit to me. If you say, external data should be embedded into the blockchain then u use an external interface to get this data. Internal is just the 'memory'. The RAM of the virtual env.
|
|
|
|
Come-from-Beyond
Legendary
Offline
Activity: 2142
Merit: 1010
Newbie
|
|
February 04, 2014, 10:46:17 PM |
|
Will a script be able to store data into an AM and then be able to access it a future block? Data continuity is needed for scripts that interact with external blockchains.
Yes, a script will be able to store any data via AM.
|
|
|
|
brooklynbtc
Sr. Member
Offline
Activity: 336
Merit: 250
AKA jefdiesel
|
|
February 04, 2014, 10:48:48 PM |
|
looks like a fancy chocolate birthday cake
|
|
|
|
Come-from-Beyond
Legendary
Offline
Activity: 2142
Merit: 1010
Newbie
|
|
February 04, 2014, 10:48:48 PM |
|
Why not? Ethereum code could send transactions. Sounds legit to me.
If you say, external data should be embedded into the blockchain then u use an external interface to get this data.
Internal is just the 'memory'. The RAM of the virtual env.
If u let scripts to ask for data from external world then u won't be able to achieve 1000 tps. External world is supposed to push data into the blockchain, scripts pulling the data from external world is a bad way.
|
|
|
|
freigeist
|
|
February 04, 2014, 10:52:50 PM |
|
How many unique opcodes here?
28 opcodes for that one. It is only a starting point, though.No, that's not right. It's been a long time since I last looked at that code. It's more, have to re-look. Very good if it's 28, coz I know only a solution with 32 opcodes. I found a language with only 8 opcodes but i'm not sure that this will be a good for your needs as the language is completely f*d up and if you uset it can f**k up your brain. I called brain fuck. http://www.muppetlabs.com/~breadbox/bf/
|
|
|
|
ChuckOne
Sr. Member
Offline
Activity: 364
Merit: 250
☕ NXT-4BTE-8Y4K-CDS2-6TB82
|
|
February 04, 2014, 10:53:28 PM |
|
Why not? Ethereum code could send transactions. Sounds legit to me.
If you say, external data should be embedded into the blockchain then u use an external interface to get this data.
Internal is just the 'memory'. The RAM of the virtual env.
If u let scripts to ask for data from externat world then u won't be able to achieve 1000 tps. External world is supposed to push data into the blockchain, scripts pulling the data from external world is a bad way. You already answered jl777's question with that it should be possible to access env-outside data. To me, the virtual env is inside and everything beyond that is outside. So, the blockchain is like an SSD holding more data to be read by the program. We need special access functions/ops or memory blocks for that. (Regarding going beyond NXT, say Email or other external services... I don't know. But would like to have them just in case.)
|
|
|
|
ChuckOne
Sr. Member
Offline
Activity: 364
Merit: 250
☕ NXT-4BTE-8Y4K-CDS2-6TB82
|
|
February 04, 2014, 10:55:06 PM |
|
How many unique opcodes here?
28 opcodes for that one. It is only a starting point, though.No, that's not right. It's been a long time since I last looked at that code. It's more, have to re-look. Very good if it's 28, coz I know only a solution with 32 opcodes. I found a language with only 8 opcodes but i'm not sure that this will be a good for your needs as the language is completely f*d up and if you uset it can f**k up your brain. I called brain fuck. http://www.muppetlabs.com/~breadbox/bf/Yeah, you can have Turing's proposal. That really sucks.
|
|
|
|
Come-from-Beyond
Legendary
Offline
Activity: 2142
Merit: 1010
Newbie
|
|
February 04, 2014, 10:55:41 PM |
|
I found a language with only 8 opcodes but i'm not sure that this will be a good for your needs as the language is completely f*d up and if you uset it can f**k up your brain. I called brain fuck. http://www.muppetlabs.com/~breadbox/bf/Brainfuck requires too much memory.
|
|
|
|
Come-from-Beyond
Legendary
Offline
Activity: 2142
Merit: 1010
Newbie
|
|
February 04, 2014, 10:57:16 PM |
|
(Regarding going beyond NXT, say Email or other external services... I don't know. But would like to have them just in case.)
I see it this way: 1. Script composes email and stores as AM. 2. External service takes the email and sends it.
|
|
|
|
ChuckOne
Sr. Member
Offline
Activity: 364
Merit: 250
☕ NXT-4BTE-8Y4K-CDS2-6TB82
|
|
February 04, 2014, 11:00:00 PM |
|
(Regarding going beyond NXT, say Email or other external services... I don't know. But would like to have them just in case.)
I see it this way: 1. Script composes email and stores as AM. 2. External service takes the email and sends it. Valid.
|
|
|
|
freigeist
|
|
February 04, 2014, 11:04:07 PM |
|
(Regarding going beyond NXT, say Email or other external services... I don't know. But would like to have them just in case.)
I see it this way: 1. Script composes email and stores as AM. 2. External service takes the email and sends it. In case size of email is bigger than AM does it get splited in more AMs? Can it be made that the AM only contains the email header data and the body part with message and attachments is send off chain to the service provider and then like mentioned above the service process the email further on?!
|
|
|
|
|