Hacker News new | past | comments | ask | show | jobs | submit login

> I have to choose between writing duplicated code, writing a code generator, or tedious macro stuff for generic code.

Code-generation all the way. Use an expressive language like python/lua/tcl/lisp/scheme to work on a higher layer than C.

Two-language programming (one GC scripting, the other C) beats the heck out of C++, in terms of best of both worlds: expressivity in higher layer, performance in lower layer.

C++ has a dirty secret no one likes to talk about. Stroustrup himself was a two-language programmer. C++ was C with classes where the classes were built with unhygienic C macros. When he decided to show his work to "average joe programmers" of the world, he turned it into one language (it turned out he was not a very good language designer so the world has to live with it).

If you're working with C++ you are Stroustrup's average-joe customer.

If you're working with two-language programming you're Stroustrup himself (even better cz you're using a higher language way better than the C macro system)!

Other than that. You want superpowers? give your text-editor your C parser (something similar to this [1]). Structured-editing can do amazing productivity gains in C. This is something I'm still looking into (using some vi/vi-clone, or emacs/emacs-clone, and pycparser) but I very excited about the possibilities.

[1] https://www.jetbrains.com/mps/




Where's your proof that a mix of e.g Python and C is a particularly productive way of working? This is not the first time you make this unsubstantiated claim.

The opposite of what you say is easy to argue for: two languages, twice the headaches.

* first of all, you need to know TWO different languages. C is completely different from a language like Ruby or Lisp.

* even if you manage to do that, you still have two build systems, two things to package and deploy, you need two libraries of everything (e.g: unit testing)

* you need to constantly pass information between the two worlds, which can be both performance costly and challenging from a design perspective.

* normally it's not as easy as "rewriting the slow parts in C". What if your problem is overall memory usage? What if there is no one function to rewrite?

* if you make a mistake in C (super easy), your whole app crashes.

I don't think this is the magical solution you're presenting it to be at all.


Here are some examples (based on my limited experience) that hardly anyone could challenge:

- Unix philosophy and the shell utilities (bash + C)

- Emacs (lisp + C)

- Python scientific stack (Python + C/FORTRAN) (Heck even Google had to offer tensorflow in two interfaces, Python and C++. If they were going to offer a Python interface anyway, they could make their life 100x easier by implementing the backend in C instead of C++).

- git (bash + C)

As for 2 languages, twice the headaches, not if your 1 language is a multi-paradigm monster called C++. I'm not really sure if this used to be the mainstream advice when C++ was created but these days it's common knowledge that you should learn at least 3 to 5 different languages in order to improve your programming languages. If you can learn 3 to 5 languages, you can definitely work in 2 languages for your projects.

And by 'average joe' I don't mean any disrespect to C++ programmers. (I'm just commenting on the thinking behind the creation of C++). Quite the contrary, I have no doubt that it takes a lot more skills and hard work to program in C++ idiomatically than in C. Unfortunately, IMO, a lot of that skill and hard work is spent managing with the "accidental complexity" of the language, and not the "inherent complexity" of the project.


I generally support this approach. I have liked working with C and chibi-scheme. Though I think depending on the size of your game logic, it may make little sense to even bother with a scripting language.

There are real costs to building the abstractions needed in order to make a useful scripting environment.


[1] https://www.jetbrains.com/mps/

Tried to visit that site, but all I get is this message:

"Sorry, your browser is not fully supported.

There may be some issues with pages layout in your current browser. Please use an alternate browser until we resolve the issues. Thank you."

Since when is it OK to just refuse to serve a page if it's not 'the right' browser? Is this a thing now?


Script it out in python then replace the hot spots with c!


Passing through the pile of fun that is the c ffi


Or better yet, Lua!


Why do you prefer lua?




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: