RFC: Epoch Programming Language, Release 7

Started by
28 comments, last by ApochPiQ 14 years, 10 months ago
Hi all, As some of you may or may not be aware, I've been working for quite some time on a programming language designed to address upcoming trends and challenges in both hardware and software technology. (For an in-depth introduction to the project, please see our introduction page.) I have just announced Release 7 of the language, which is freely available for download, including the complete source code for the project. I'm interested in any and all feedback on the project as it stands. All comments and criticism are welcome [smile] Especially if you find a bug or something that was overlooked I'd appreciate hearing about it. Issues and suggestions can be submitted directly to our issue tracker, or can be directed at me via PM here on GameDev. Enjoy; I look forward to hearing your thoughts!

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

Advertisement
There's nothing readily apparent on the wiki regarding how to actually write code in the thing. No syntax guide I can find. Might be a TBD, but kinda important at this stage for new users.
Wanted to give it a go, but doesn't seem to support *nix (where's my Makefile, damnit?!) Any plans to make it cross-platform anytime soon?
Quote:Original post by Telastyn
There's nothing readily apparent on the wiki regarding how to actually write code in the thing. No syntax guide I can find. Might be a TBD, but kinda important at this stage for new users.


There are 34 example programs shipped with the Release 7 distribution. I hope this is enough to at least get an idea of how the syntax works [wink]

I'd love to have more details etc. in the wiki, but I'm swamped as it is, and this is probably the last Epoch work I'll be doing for a while.


Quote:Original post by visage
Wanted to give it a go, but doesn't seem to support *nix (where's my Makefile, damnit?!) Any plans to make it cross-platform anytime soon?


I would very much like *nix/BSD support at some point. However, I have neither the time nor the machine to do a port right now. If anyone wants to take on the job, please let me know [smile]

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

Your getting started page mentions an Examples/Projects folder, but I'm not seeing that in the distribution. Am I missing something?
Mike Popoloski | Journal | SlimDX
Nope, that's my mistake - but it's OK, because project support doesn't currently work in R7 [smile] Thanks for the catch.

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

I think I ran into my first bug [grin]

If I happen to make a loop with an empty body, the program will loop forever. Inserting something simple like a debugwritestring into the loop will cause it to behave correctly. This isn't expected behavior is it?

entrypoint : () -> (){	integer(y, 0)	while(y++ < 100)	{	}	debugwritestring("hi")}
Mike Popoloski | Journal | SlimDX
Ah, looks like a problem in the way loop instructions are generated. I've filed an issue. Thanks for the report!

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

Could you perhaps quickly show how to implement a Vector add function? I've messed with it for a while now and I keep getting parser errors without much information. Here's what I have now:

structure Vector : (real(X), real(Y), real(Z))infix(plus)plus : (Vector(left), Vector(right)) -> (Vector(result)){	result.X = left.X + right.X	result.Y = left.Y + right.Y	result.Z = left.Z + right.Z}


What's wrong with this? Is there a better way to do it?
Mike Popoloski | Journal | SlimDX
Looks like an oversight in the parser. Normally in Epoch you have to initialize your return values. So the ideal program would look like this:

structure Vector : (real(X), real(Y), real(Z))infix(plus)plus : (Vector(left), Vector(right)) -> (Vector(result, 0.0, 0.0, 0.0)){	result.X = left.X + right.X	result.Y = left.Y + right.Y	result.Z = left.Z + right.Z}// Alternately, we could express plus this way:plus : (Vector(left), Vector(right)) ->  (Vector(result,    left.X + right.X,    left.Y + right.Y,    left.Z + right.Z   ))entrypoint : () -> (){	Vector(a, 1.0, 1.0, 1.0)	Vector(b, 2.0, 2.0, 2.0)	Vector(c, a plus b)	display(c)}display : (Vector(v)) -> (){	debugwritestring(cast(string, v.X))	debugwritestring(cast(string, v.Y))	debugwritestring(cast(string, v.Z))}


Unfortunately, I left a case out of the grammar, so there is actually no parser rule for matching the initializer of a struct returned from a function. In other words, the legal way shown above doesn't actually work [smile]



Last but not least - my sincere apologies about the state of the parser messages. The error reporting really needs a lot of work, but it's fairly low priority for me... unless, y'know, someone else decides to chip in and work on this crazy thing [grin]

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

This topic is closed to new replies.

Advertisement