Ask Slashdot: How Can I Make My Own Vaporware Real?
Long-time Slashdot reader renuk007 is a retired Unix/Linux systems programmer with the ultimate question:
After retiring I started a second career as a teacher -- and I'm loving it. My problem: I designed a (I feel) wonderful new language compiler, but implementing it will take me another ten years if I have to do it part-time.
Linus Torvalds was able to leverage the enthusiasm of the Internet to make Linux exist, but 1990 was a more innocent time. How does it work today? Any thoughts?
Or, to put it another way, how can you build a community to bring your ideas to light? Leave your best thoughts and suggestions in the comments. How can you make your own vaporware real?
Linus Torvalds was able to leverage the enthusiasm of the Internet to make Linux exist, but 1990 was a more innocent time. How does it work today? Any thoughts?
Or, to put it another way, how can you build a community to bring your ideas to light? Leave your best thoughts and suggestions in the comments. How can you make your own vaporware real?
You'll need to show someone *something*. Got a link to an abstract discussing why this compiler is so much better and worth the time investment? Not like there's a dearth of compilers of various designs out there.
Make the language simple enough so a simple parser will do.* Write a simple back-end that works, however inefficiently.
Then publish.
linus did it by publishing early and often. He also had the tide with him, building on a handy-dandy toolset, surfing on a wave of user demand for something, anything, that would make their computer go (linux really is very shoddy in its design and very far from the cutting edge, that was already the case right from the get-go), and you don't: There are too many pet languages already. But don't let that stop you. Write software that works, efficient comes later. Oh, and get with the documenting early on. Language specification, goals, non-goals, et cetera. Publishing early and publishing often is still a good start, and then there's the community building.
* I'd like to mention the Crenshaw textfiles here.
"...but you'll have to do some actual work."
--Dilbert
Maybe the simplest answer to your question is... Tell people what you have.
Kickstarter or similar services are a great way to judge interest in a project. If you truly have something people will want, they will gladly donate to and share your idea. Of course this still requires marketing, maybe a break even type of thing. However with a niche offering like this, if you don't have a name or any way to prove what you can do, then don't expect much traction.
Said in another way... if you aren't already known it will be very hard to become known.
That being said, we can help without more information... New languages and/or compilers crop up every day.
Have you invented a new language or just a new compiler? -- this is not clear at all.
What makes you different from the others?
How is it better?
Why would I switch from what I am currently using?
What is the learning curve to switch?
What is is compatible with?
""How do I get highly skilled, highly paid people to work on my idea for free?"
If you figure that out, I'd love to learn it.
He might be able to hire help, at least for the initial development, on a site like Fiverr.
People that are bad at development tend to also be bad at hiring developers, so most likely he would end up wasting money on incompetents.
But the question is about getting people to work for free, not hiring help. Ideas are a dime a dozen, and it is extremely unlikely that he is going to get anyone to work on his, unless it is a really really good one ... and "new computer languages" tend to be the dumbest ideas of all. That is the last thing the world needs.
And seriously, TEN YEARS to write a compiler? If he has a grammar (and if he doesn't, he has NOTHING) then just slap it into a parser generator such as Bison, and connect that to the gcc backend, or an existing parse tree interpreter, and you're done. That is a couple of weekends.
You don't need a fully formed product to introduce your project to the world. You just need something that is complete enough to be useful.
Maybe that's a feature-incomplete version. Maybe it's a moderately complete spec that can be used to build your goal. Maybe you start by building on some existing toolchain that you later plan to migrate away from. Whatever gets the project rolling fastest without sacrificing its core.
Once you have that, then you can start getting people's attention. Post about it where people talk about programming and new language projects.
Build it, and they will come. They will not come before you build it. So build *something*, even if it isn't finished.
And seriously, TEN YEARS to write a compiler? If he has a grammar (and if he doesn't, he has NOTHING) then just slap it into a parser generator such as Bison, and connect that to the gcc backend, or an existing parse tree interpreter, and you're done. That is a couple of weekends.
Even faster if you hook it all up to the logic circuits of a Bambleweeny 57 Sub-Meson Brain and an atomic vector plotter suspended in a strong Brownian Motion producer (say a nice hot cup of tea).
It must have been something you assimilated. . . .
I own a custom software development company. We accept money to turn vaporware into real software. Money is very useful for turning one thing into another, and was invented for exactly that purpose. Barter has many inefficiencies, and I prefer to use money rather than goodwill, community, equity, animals, vegetables, sexual favors, or IOUs, for creating software.
If you can design a compiler and have any clue whatsoever about how to do so effectively, you can sure as hell break out another compiler and code it up.
Then, once it's self-hosting, you can concentrate on the compiler itself.
Like every "project" I ever got involved with or people asked me to join since I was a kid - it's the person with "all the ideas" who has no clue how to actually make the thing work, or what's even feasible. While the people who "can do" have a thousand such ideas throughout their life and can implement the ones that actually work and are feasible.
Trust me, I've sat there for years thinking about ideal programming languages and game concepts and operating system design and all kinds of things. It's when you sit down and actually code stuff that you realise why it doesn't work, why it can't work well, why it's not so easy, and why the existing things were designed as they are.
The "wow" moments come from someone MAKING IT HAPPEN and seeing that the lightbulb-moment can be real, never from just the moment or idea itself.
Start by recruiting your own students in a group or club, and then post a project to GitHub or Openhub.
https://www.openhub.net/
https://github.com/open-source
errr....umm...*whooosh* *whoosh* Is this thing on ?
Start webpage. Something you have total control over.
Add blog, forum, live chat support. IRC. A gui for browser web chat. Video updates for your site.
Live webcam chat with a groups of supporters.
Translations. Have a list of contact details for your site. From security to press, media, general questions, offers of support.
Someone wants to do an interview at 2 am from their part of the world? Do it. Thank them and be ready for lots of different questions.
Be ready for video, sound only, the need for lights, a mic and a good background setting on video chat.
Ensure a good internet connection with another way to connect on the day of the interview.
Someone sends in a security question. Thank them. Given them a clear time line of how the issue will be responded to quickly. Days, weeks, months.
Show them the results and ask if they want recognition. Thank them again. Update any blog, security comments as needed over time.
Set out how the project will be worked on and show progress.
Update the blog every day. Have more detail over weeks and months. Video clips.
Keep control over your forum, your blog, your clips. Sites and social media can change their TOS at anytime so social medias offer of "free" and lots of "ads" can change at any time.
Read all TOS on any hosting and code site and what owners have set out as their politics and conditions when using their site, tools.
Upload examples, a guide, FAQ and what is supported so people can get an overview. Then how to support the project.
Domestic spying is now "Benign Information Gathering"
I was thinking in this direction as well.
.NET as a back end is absolutely a wonderful experience as well. .NET has excellent extensions for language design. As part of the .NET experience, it's made al
Unlike ShanghaiBill, I write languages often enough to not say things like Bison anymore. Bison and Flex are 1960's to 1970's technologies for compiler design. These days, writing a new compiler is far easier than that.
Step 1) Parser generator
Using Antlr which is pretty much one of the most common solutions (though I really don't like Antlr myself) is very easy. You can open Eclipse, setup Antlr and pretty much have a parser up and running very quickly.
For prototyping a language quickly, using a Packrat parser generator is far quicker, but generally requires building your own AST. Though in modern languages, this is stupid simple. Simply start defining the grammar and add a new abstraction for each type. Then reduce the types as common features become obvious. Expression parsing is generally some of the more difficult tasks you can encounter as they tend to be highly recursive, but it's pretty simple.
To do a great, job, hand coding a parser is pretty simple these days. While a tokenizer can be a very powerful approach to doing this, generally tokenizing as you parse is really super simple. Same concept as is generally applied to a Packrat, but you just make a class which allows pushing and popping states. Then you make a function to match a regular expression or series of regular expressions. I like to make a solution which takes accepts a list of expressions and lambdas, then given the current state which I'm parsing, I concat all the valid expressions for the state into a single expression with named matching. Then I pass the parser state to the lambda as a parameter. The result is a ridiculously easy parser to write which performs pretty well. It's also very easy to later optimize by caching the compiled expressions.
A major advantage of the hand coded parser is that it's far easier to add extensive static code analysis to a hand coded parser than most generated ones.
2) Make a simple tree optimizer architecture
While tree optimization probably isn't necessary in earlier phases for the purpose of performance, it's extremely useful for reducing more complex states of the tree into more easily compilable branches. For performance, it's really nice to find things like AST states of multiple consecutive if statements against the same variable with the same type and reduce it to a select clause which can be easily optimized.
3) Produce a backend
Compiling to C is super easy. C++ is also really super easy. On the other hand, while LLVM IL is somewhat complex for people who don't understand things like startup code and exit code... and things like register allocation can be confusing to many, it's actually pretty easy to generate.
Compiling to WebAssembly is great option as well.
These days, I tend to favor compiling to JavaScript. JavaScript is a far better compiler backend than most. It generally produces far better code than even the best C and C++ compilers. This is because C/C++ generates good/great code once. JavaScript JITs however have a modern runtime which constantly optimizes code for the platform it's executing on. It's far more intelligent with regard to SIMD instructions when possible that most other platforms. It's generally truly cross platform as well. If favoring a specific platform such as Qt (which I believe embeds v8), it's quite easy to build GUI extensions. I prefer to compile to JavaScript 5 as it's available everywhere. It's greatest weakness is that it doesn't properly support regular expressions.
The other beautiful thing about compiling to JavaScript is that massive amount of work has been done to allow easy synchronization for compiling. This is handled well through map files. As such, building a great debugger experience is practically free.
Using
> The static nature of C makes it really slow unless you're writing very static code with very simple data.
Of the 500 fastest supercomputers in the world, 500 are C-based systems. C is the ONLY language used by super-fast systems.
>Implementing relocatable memory in C is basically impossible
Please see - well anything under /usr/lib.
Otherwise, it sounds like basically you're trying to say "I forget to call free() after I malloc some memory".