• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
ApochPiQ

Behold! The compiler which compiles itself(*)

14 posts in this topic

Please, please, please tell me you have a script that combines all that code into one file and that you don't edit the 10k monstrosity as a whole!

 

But very cool. What kind of grammar is Epoch? Context-free? I ask because I'm studying compilers right now and am curious in these things. I tried to tell from your parsing code, but it's... too verbose for me :) Actually, shoot, I'm gonna ask a bunch of compiler-related questions:

 

Do you do much static analysis or optimizing? How many passes over the program tree do you do, and how many different intermediate representations do you go through? What kind of code do you generate? x86? LLVM? And are there any other questions I should have asked but didn't?

0

Share this post


Link to post
Share on other sites

Please, please, please tell me you have a script that combines all that code into one file and that you don't edit the 10k monstrosity as a whole!

 

But very cool. What kind of grammar is Epoch? Context-free? I ask because I'm studying compilers right now and am curious in these things. I tried to tell from your parsing code, but it's... too verbose for me smile.png Actually, shoot, I'm gonna ask a bunch of compiler-related questions:

 

Do you do much static analysis or optimizing? How many passes over the program tree do you do, and how many different intermediate representations do you go through? What kind of code do you generate? x86? LLVM? And are there any other questions I should have asked but didn't?

 

Yes compiling itself is a fine stunt (and shows a modicum of language versatility), but if your compiler turns out inefficient code and its self-compiled runtime IS  used normally --- and is intended in  for use with projects with lots of code (to me 100K actual code lines is not overly large)   then thats a negative.

 

"Compiles to native code for maximum performance"  does NOT mean its efficient anywhere as much a a well developed optimizing compiler will do (for  the compile runtime)

 

Your library generation likewise.

0

Share this post


Link to post
Share on other sites

Yes compiling itself is a fine stunt (and shows a modicum of language versatility), but if your compiler turns out inefficient code and its self-compiled runtime IS  used normally --- and is intended in  for use with projects with lots of code (to me 100K actual code lines is not overly large)   then thats a negative.
 
"Compiles to native code for maximum performance"  does NOT mean its efficient anywhere as much a a well developed optimizing compiler will do (for  the compile runtime)
 
Your library generation likewise.



I'm not entirely sure what most of this means, but it should be pointed out that I'm not writing my own native code generation or optimizations. I'm using LLVM for all that business.

For what it's worth, I wrote a raytracer in Epoch that marginally edges out a comparable C++ implementation for raw performance on my laptop.
0

Share this post


Link to post
Share on other sites

I seriously thought about writing a combiner script, but it honestly turns out that having everything in a monolithic file isn't all that bad. 10KLOC is large but not unmanageable, and it's actually easier to remember how to find things in a single file than you might expect. Of course, it helps that the Epoch implementation of the compiler is about 1/4 the size of the C++ implementation, so remembering things is 4 times easier to begin with ;-)

How were you doing it in C++? Were you using Flex/Lex and Yacc/Bison at all?

The grammar should be deterministic-context-free. I think. I'm honestly not strong enough in parser theory to prove it for sure, but that feels about right. The parser itself is just a DFA written in classic recursive-descent style, so based on my understanding of the parser/grammar categories, the grammar is DCF. I could be utterly wrong, though.

Cool. Sounds context-free to me. I'm working on an implementation of parsing with derivatives in C++ for my undergraduate thesis, and assuming I actually finish it maybe I can use Epoch's grammar (or a subset of it) as a demo and case study.

All very cool. I'll see if I have more questions that come up during the week.
1

Share this post


Link to post
Share on other sites
I used boost::spirit, which was a great rapid prototyping tool, but has long since become a liability. A while back I did some performance tuning to get it to suck less (about a 1000x speedup in the parser alone) but it's still pretty slow, clunky, and takes forever to compile.

For comparison, it takes about 20 minutes to do a full rebuild of the project in C++. It takes less than 200 milliseconds to build the entire Epoch implementation of the compiler.
1

Share this post


Link to post
Share on other sites

It weighs in at just under 10,000 lines right now or I'd post it inline. You can see the evil monstrosity here and gawk in awe at its massive hideousness.

That's pretty damn sweet.

I really need to find the time to complete my little language project. You would not believe how much I regret writing the compiler in a dynamically-typed language...
0

Share this post


Link to post
Share on other sites

 

Yes compiling itself is a fine stunt (and shows a modicum of language versatility), but if your compiler turns out inefficient code and its self-compiled runtime IS  used normally --- and is intended in  for use with projects with lots of code (to me 100K actual code lines is not overly large)   then thats a negative.
"Compiles to native code for maximum performance"  does NOT mean its efficient anywhere as much a a well developed optimizing compiler will do (for  the compile runtime)
Your library generation likewise.


I'm not entirely sure what most of this means, but it should be pointed out that I'm not writing my own native code generation or optimizations. I'm using LLVM for all that business.
For what it's worth, I wrote a raytracer in Epoch that marginally edges out a comparable C++ implementation for raw performance on my laptop.

 

Ok, so your language is a front-end using a relatively mature backend to do the code generation ....

-1

Share this post


Link to post
Share on other sites

You are a hero. I've long given up self-hosting.

And to be honest, I'm considering giving up context-free grammars as well. I'm not sure they buy me something in the real world.

1

Share this post


Link to post
Share on other sites


It weighs in at just under 10,000 lines right now or I'd post it inline. You can see the evil monstrosity here and gawk in awe at its massive hideousness.

 

 


You keep harping on this 9000 line of code business. You do realize that's considered trivially small by most professional standards, right?
 
But I do appreciate the work you have done here, because for many of us it takes a huge effort to write almost 10,000 lines of code, because many times more lines have been removed to make an optimal piece of code. That means older versions, tests of possible solutions, optimizations, etc. Keep up the good work :)
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0