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?
so a new language or a new compiler?
I am more of an ideas guy
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
I seriously doubt you are talking about a new compiler, because you have virtually no chance of making one better than existing compilers for languages in use like C or Java.
So I'm guessing you mean a new compiled language. Rather than Linux, look at the history of Python, it's closer to what you are thinking.
If what you are proposing is neither a compiler nor a language than you need to learn a lot more about computers before anyone will take you seriously.
He might be able to hire help, at least for the initial development, on a site like Fiverr.
But, before he gets started he really ought to discuss his idea with some people who have experience working with some experienced programmers to see just how good of an idea it really is.
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?
New language? can you write the front-end for LLVM? https://llvm.org/docs/tutorial/OCamlLangImpl1.html
""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.
Instead of trying to figure out how to get everyone else implement your ideas, how 'bout you get off your ass and start doing it yourself?
Society does not exist to jump when you say frog.
By asking the question you're just telling us you're a manipulative narcissist.
"Reality is that which, when you stop believing in it, doesn't go away." - Philip K. Dick
"Get other people interested" is right, and I'd say start that by thinking about WHO would be interested. Would you project be useful? If so, to whom? Especially if certain industries or types of businesses would find it useful, write that down. Write down WHY it would be better, for them, than existing alternatives.
As other commenters said "a new compiler" sounds questionable, and I wonder if you mean either "a new language" or a "translator from one language to another". If you're actually thinking a new *compiler* for an existing language, you probably have at least a thousand man-hours of work to do in order to get close to parity with existing compilers. Even then, doubtful it would make sense to write a whole new compiler; you'd instead either write a front-end for llvm or just use a compiler-generator like yacc, which automatically (and nearly instantly) creates your compiler for you.
Note that a new language has to be a LOT better than the old, on technical merits, in order to replace the old because there is a large cost to switching. I've been studying C for years and I use tools and libraries that have been developed over decades, interacting with APIs written by thousands of people. A language with minor technical benefits wouldn't be worth learning not just the new language but new tools and libraries. That's one reason C is still very widely used 45 years after it was introduced. In the last 45 years, people have introduced languages that are objectively slightly better for the tasks C is used for, but none of those languages has been ENOUGH better to overcome the change cost for systems programming, embedded, etc.
He did a bang up job implementing the Winklevii's idea a few years ago. Also, there's some dissatisfaction with how he's doing his current job, so he might be looking for a new project.
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 make a viral hit by saying "I want to make a viral hit, how do I do it?" You get started, release, provide details, show your enthusiasm by obviously putting more time into it, answer stupid questions over and over until someone starts helping, and you just keep it up. That would take all of 30 minutes to get rolling on Github.
You provided ZERO details in your ask-slashdot! Literally none! So all signs currently point to you perhaps being unwilling to give up enough control to benefit from other people helping.
If you're asking how to convince someone else to write the system for your language, haha, good luck, that's not how it works, people who have those skills don't need you as a source of ideas. Linus Torvalds succeeded by doing MASSIVE amounts of work himself, and others starts helping to a lesser extent. Also, he didn't wait for anyone else to start helping, he just started doing without concern for whether it was viable or whether anyone else would contribute. In other words, just do it, don't wait around for someone else to carry your water.
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. . . .
Just this week I've programmed in Groovy for Jenkins, Java, JavaScript for client-side, C# for a web app, C++ for a desktop app, SQL stored procedures, Ruby for Puppet scripts, PHP for a web app, BASH, and PowerShell. We already have too many languages.
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.
Totally off topic! Why a new language? Lots of old ARM hardware out there just dying to broken out of the walled gardens from whence they came.
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 ?
You need to get your idea out their, WITH a good explanation/business case explaining why what you are doing is inherently better/innovative and worth the investment of time from others. You have a huge amount of long hours, hard work and persuading to do and you better have a very very good justification for the value of yet another language/compiler if you want anyone to follow.
We don't need another language, and compiler design pretty much peaked in the 70's. Try to build a community of interested volunteers, but if nobody is interested, that might be a clue that your idea isn't valuable enough to anyone except yourself.
I've abandoned my search for truth; now I'm just looking for some useful delusions.
These are both really (!) hard things to do. The software market is fairly crowded these days, so demonstrating you can beat existing offerings is hard. And although the Internet allows people to search fairly well, finding people facing similar problems is still really hard. It's not like you can show up on forums of a similar product, pitch your idea for a different thing, and expect to be well received.
Realistically, don't start a software project if you're unwilling to be the only one working on it.
(Personally I'm trying to build a decent native code Windows command prompt, and I can't believe others really think CMD is wonderful, or that managed environments are fun to use given their performance, or that sitting on emulation layers is a great way to interact with an OS. But the set of people who are passionate and skilled enough to act isn't that big, and they don't all hang out in the same place, so I'm still the only contributor, and I don't expect that to change imminently.)
If you do not follow their style guide exactly they flip out on you close the pull request and chase you off.
Have people never heard of prettyprint and sed ? Or is this an organizing (function/procedure/module) conflict?
227-3517
I suggest you write a few code samples in your new language and convince people that it has something captivating about it. You don't need a working compiler to write software, only to run it. And if you have already told people what to expect the output is they don't need to run it to find out.
Here's an example of my new language
10 ask what I want
20 do it
30 goto 10
But seriously, if people see an elegant new way to solve a real problem they might go for it - eg. a way to tie in unit tests to the source code better, or a cool way to program in 3-d minecraft-like blocks
Nullius in verba
1. Make an pre-announcement to popular geek sites - like you just did here. When it's ready, get both your targeted audience and vaunted coders to review the beast on those sites.
2. Make a WEB site like PHP.net or SQLite.org, with announcements, news, conference and event dates, examples, comments, downloads, documentation, Q&A, important people info, email, sponsor and donation links, and thanks.
3. Create a 501(c)(3) organization. If you want a viable community, it's gonna cost money. And tax-exempt is good for both you and your donors.
4. Do what docker did, have a URL pointing to a QC'd step-by-step user-interface that lets the visitor create a simple little example, easy to grok, showing the language's power and potential.
5. YouTube tutorials, starting with a beginner-friendly instructor who goes into an overview of the language's virtues, then writes and runs the obligatory 'Hello World!'. Next, the tutor explains the awesomeness of the language. The other tutorials that follow should have a similar format - somehow this makes it easier on the student.
--
In writing a new language, what are you going for? Is there something missing from the plethora of languages out there now? What are the newbie's virtues and problems? Simplicity? Completeness? Is the language completely or partially objective? Are there tools to write code with? Plugins for things like Vim? Does it have garbage collection? Compiled? JIT? What's the programming paradigm - is it tightly structured? Are there dependencies? Is this a server side language? How insulated is it from being hacked?
Many developers are legitimately concerned about the long, lingering Oracle v. Google legal case. Once considered 'fair use', you now might be sued over API 'misuse'. With that in mind, is there anything programmers should be worried about in this new language?
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"
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.
That was my first thought. Especially if the language is wonderful, it should also be small and elegant. Just build a prototype compiler on top of LLVM or the gcc backend, or, if you are lazy like me, compile to C.
But maybe he really has a wonderful idea that does not map so easily to conventional frameworks - something with lazy evaluations and monads, or something with very powerful build-ins (constraint solving, Gröbner bases, FFT) that needs a lot of library work.
Of course, my wonderful language (back when I had less knowledge and more illusions) was just C with all the warts fixed. I have since learned that the warts are all there for reasons, and most for good reasons....
Stephan
You don't, without something that works.
Mozilla was pure mental masterbation for years, until it was possible for someone outside the company to build a working version of a browser.
Until and unless that happens, you've merely "declared a project", and like most such projects on SourceForge or GitHub -- absolutely no one will give a damn, until you ive them the power to tinker.
And you will not do that without working code.
By the way: if you are actually a UNIX/Linux systems programmer... it will take you less than three months in your spare time to get your compiler up and running on LLVM.
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
Get something working (even if it only is 1% of what the real thing is supposed to do.) put it up on github.com. Make sure the build/test environment works on Linux, because that's where likely contributors are. Tell people about it. If it really is a world-changing idea, someone will care, and may contribute.
I have done a handful of open source projects. I'm convinced some of them are really cool, but they're niche, and it is very rare to get any help. In Startup jargon, they talk about *minimum viable product*. To make something attractive, so others will join, they need to see it as immediately doing something for them. I think you need to get your product to an MVP state before you start trying to get others to help.
If you cannot get working code on your own, then forget it. No-one will even understand what you project is about. Talking, explaining , etc... is very difficult. Show, don't tell applies in software. Getting *something* working also makes you learn a lot about the idea, and explore it and understand it better yourself.
Somebody mentioned bison and yacc. Those are tools that date back to the seventies when DSL's (Domain Specific Languages) were fashionable, they are about 90% of what you need to build a compiler. They have been used to build thousands of DSL's and would very likely be good enough to build an initial product, and you will learn a lot. If you still think it is a good idea after building the initial compiler, then great! Another approach would be to build the compiler in a *easy* language like python. This paper: https://legacy.python.org/work... outlines an approach to doing that.
So those are technical strategies for doing what you want to do. Personally I think inventing a new language is unlikely to be helpful. Programming languages are a means for people to talk to eachother very precisely. They go through exactly the same economic & network effects as human languages, and people are inventing human languages from time to time, and they don't catch on. Examples: Esperanto, or more recently, Toki Pona (https://en.wikipedia.org/wiki/Toki_Pona) proposed in 2001, with 100 fluent speakers in the world! Worse, there are a lot of human languages that are dying off ( https://en.wikipedia.org/wiki/... ) , not necessarily because of any genocide, but instead because the populations are being assimilated into bigger groups. This is just the Network effect (Oscar Meyer effect for North Americans of a certain age.)
Network effect is huge: people learn programming languages because other people already use them and provide libraries of stuff that is already done. Programming languages was a primary area of research in Computer Science in the 70's & 80's, taught formally at school, and there is a lot of literature and dead languages from that time. That seems to have calmed down a bit in recent decades, and the world seems to be converging a bit. There are still hundreds of reasonably popular (even if only in specific niches) languages and it is hard to imagine what *your* language would bring to the table that would be of sufficient value to overcome the massive network effect of introducing a new one.
there are explicitly pedagogical languages like Scratch ( https://en.wikipedia.org/wiki/... ) but the problem with pedagogical languages is that any skills the student acquires, they kind of need to start over with a *real language* at some point, so there needs to be a really big payoff to justify the diversion. The top programming languages ( https://www.tiobe.com/tiobe-in... is one indicator ) are Java/C#, C/C++, and Python. Of those three, python is the obvious first choice in terms of ease of gett
For prototyping a language quickly, using a Packrat parser generator is far quicker, but generally requires building your own AST.
Pegmatite is designed for rapid prototyping and for teaching (where students are expected to add new language features in a couple of hours. It uses PEGs in an embedded DSL in C++. It doesn't do Packrat optimisation, because that makes it harder to debug (and by the time you need that kind of performance it's probably worth replacing it with a hand-written recursive-descent parser (which also makes helpful error messages easier to write). You can define AST node classes and declaratively associate grammar rules with AST nodes.
There are a couple of example languages in the same GitHub organisation that are about 1,000 lines of code each for a complete language with an LLVM-based JIT.
I am TheRaven on Soylent News
Linus Torvalds was able to leverage the enthusiasm of the Internet to make Linux exist
No he wasn't. He brought Linux together all on his own without external help. Once he did so the enthusiasm of the internet made Linux popular.
Not all languages can be parsed with Bison. Not all language features are clearly supported by LLVM. For some, self-hosting is important. Some people want to tweak a few things with their new language. Others want to rethink everything.
> 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".
You can pay people to do something that won't matter in the end, but unpaid volunteers need some more substantial justification for the time and effort they invest. Better than to start a new effort from scratch would be to distill the aspects of this idea that are new and better than existing compilers, and take those to the community surrounding an existing open-source effort, such as http://llvm.org/
Well not really, gcc had this really difficult to access parts of the compiler (I'd prefer ANTLR/llvm also).
As a retired systems programmer it shouldn't be too hard to regex the tokens, hardcode the expressions/grammar if-then-else way without typechecking and churn out some javascript code.
Do the trickiest grammar parts first, so you have spare weekends for discovering ye next greatest sorting, compression and encryption algorithms.
What sort of reasonably modern languages aren't parsable by Bison? I'd think that a language without a context-free grammar would be likely to be confusing to humans and difficult to write tools for.
"When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
Money
By paying people to develop your compiler, you're taking some of the workload off your back, and putting it on someone elses, in exchange for money. If you employ enough people, and keep the source code proprietary, you could then sell licenses to your compiler and generate a profit.
Many technology companies use similar tactics to generate income.
If you gave me a choice between a printer and a giraffe with explosive diarrhoea, i'll get my ladder and my raincoat
The vast majority of super computers are distributing tasks through a scheduler which happens to be written in C. The code they distribute is most often developed in Matlab or similar languages... which are hogs and run so amazingly inefficiently, They generally work on extremely static data sets as well. Super computers are best suited for consuming data, not producing it. The key exception is the LHC.
... you know... all that nifty math stuff for radio. Cisco requires 16 dedicated Xeon CPU cores and 24 gigs of RAM to run this software. And as soon as you do that it becomes a dog with flees. If you ignore Cisco's hardware requirements and use a $500 computer containing a $69 NVidia GPU and slipstream the NVidia drivers into the Linux distribution, the Matlab code will use the GPU and run 1000 times faster than on 16 dedicated Xeon cores. On the other hand, if they were to actually tune and profile their Matlab code, it could probably run 100,000 times faster as the Matlab code they're running is actually incredibly slow.
Two years ago, I saved an oil exploration company $4 million a year in super computer rentals by introducing their scientists to Intel's VTune. Now, code which used to require time on Top500 computers to calculate runs fairly well on 3 rack servers with 4 GPUs each. Never ever ever use super computers as a method of describing efficiency.
If you want to test a small scale example of this, get your hands on Cisco Prime. A function of Prime is to consume data from spread spectrum radio analyzers for many purposes ranging from adjusting transmitter power levels for wireless networking to performing rogue device detection
What they're doing is basically a super computing task. And the math they're performing is typically super computing math. It's super-inefficient and even after a so called super computing expert analyzes their code and attempts to make optimizations, there's very little that can be done for most code like this. You'd have to rewrite it for there to be any hope of it not sucking and since the code is often highly convoluted crap, it simply is generally impossible.
So we use super computers that generally run massive schedulers written in C that should have been written in a scripting language but someone was an idiot. The we run code which probably should have been rewritten to work on a laptop GPU but instead will burn computing time at $25,000 or more an hour. We do that because the code can run on the super computer now, rewriting for a laptop GPU will set things back a year.
Finally, don't forget that 99% of the C code which is run on super computers is compiled to C from other languages. This is done because you would never write that kind of code in C. The other reason is that you can't really easily distribute the programming language you coded in to all the systems. Oh... and to make your code work on x86, Cuda, OpenCL, whatever else... you don't hand code that. You use a high level language like Matlab which will compile your code into code that can run on all these things.
Relocatable memory has absolutely nothing to do with malloc and free. It's the principle that memory can be relocated. So, as opposed to using a pointer to a fixed memory location, you would use a pointer to a pointer and access the memory through helper functions.
The purpose of this is that when you're performing a massive amount of allocation and frees, there is a tremendous amount of memory fragmentation that occurs. So, if a web browser for example which is very dynamic in nature will end up with massive amounts of wasted memory because it is nearly impossible to defragment the memory.
Solving this problem in C is definitely possible, but the static nature of C makes it very very difficult. As such most dynamic applications written in C are hogs. It looks like "wow I'm hardly using any memory" but the entire system is suffering because C is so poorly suited for memory management.
Using proper modern languages, things like movi
Neither C nor C++ has a context free grammar. Perhaps those aren't "modern" enough, but they are at least important enough to think about emulating in some cases. Python does not have a context free grammar either, but I think it's still parseable with bison.
Natural language programming is another area that gets into (infinitely) more complicated language parsing designs.
I have the same problem as you with my ideas for "Loyc" projects at http://loyc.net/ - they gather very little interest. As a consequence, I've lost enthusiasm for my projects and subsequently they've had little progress. I suspect the problem is that people don't want to really look at or help with a project until it is already fairly mature. It could also be that everybody's too busy trying to make a living. But perhaps I haven't marketed my ideas well enough or done a good enough job explaining what I want to accomplish.
People have good reasons - other than learning curve - not to learn your new programming language:
- There are already lots of good languages out there. I've seen lots of language designs that failed to even attempt to answer a basic question, "what advantages does my language provide that NONE of the existing languages do?" I think that's because most new language designs actually DON'T provide anything that hasn't already been done pretty well by existing (but often unpopular) languages. Make sure you've looked at other less-popular languages like Nim, Ceylon, D, Rust, etc. to see if they can't already do what you want.
- New languages have lousy tools. Lots of developers expect IDE autocompletion features, a package manager, a debugger, a way to target Android/iOS, a way to target web browsers, and of course syntax highlighting.
- If they write code in your new language, it won't interoperate with other languages. You could make it a .NET language or JVM language so it can interoperate with other .NET languages and JVM languages (and you get multiplatform support for free), but both of these options (especially JVM) substantially constrain the design of your language - your language won't be capable of various low-level features that .NET and JVM cannot do. You could (and should) support interop with C, but C libraries tend to be very clunky to use (e.g. memory management is always a pain in the ass.) I'd say the .NET runtime has stagnated for quite a few years but it looks like they're finally adding valuable new features, e.g. a feature traditionally known as slices, which in .NET is called Span.
Without interoperability, your language will be extremely limited since it won't be able to take advantage of existing code libraries, and therefore very few people will want to use it even if the language design is fantastic. In Loyc I want interoperability to be a core focus (though again, due to lack of outside interest I've made little progress).