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?
Get other people interested. preferably people with the knowledge you are after.
If your language / compiler is/does anything itnteresting, i think slashdot could be a good place to start.
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.
Prisonware
What kind of vapid bullshit is this?? Let's all have a mental circle-jerk and opine meaninglessly about what it takes to achieve success...
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.
Linus filled in a necessary piece of a pre-existing puzzle. To draw an analog: find a puzzle, or a problem domain that needs your unique language contribution and fill the pre-existing need. It's just like creating a business plan.
"...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.
Post it up on github. Give it one of the permissive licenses. Then work on it! I mean update it every day if you can. Then post statuses every time you update it. Make it clear what you are doing and teach to that.
Be engaging in the blog you will have (you have one right?). Explain what you are doing. Get other excited. Give them the idea that 'yeah I will pull your stuff in'. Give them the idea you may have a cool thing to share and welcome shared ideas.
Nothing is worse than coming across a cool project to play with and the main contributor has ghosted it. "oh look cool project XYZ last update Apr 2, 2007". Skip. Your chances of contributing to that are nil unless you basically fork it and take over it. Very few people want that long term. They want to fix a bit and then move on.
Even Linux had a small following at first. It also had a niche that it was filling mostly as a learning OS. As at the time your choices were fairly expensive or stuff baked into ROMs or DOS. There were a few other open like projects but not really going anywhere. Even linux took at least 5-10 years before it really 'took off'.
Even given all of that stuff you can do. No promises. But you will at least have a shot at it.
Beware the prima donnas that may try to latch on. I am watching one project be slowly killed by a prima donna space guardian. If you do not follow their style guide exactly they flip out on you close the pull request and chase you off. Just be nice and say 'hey can you fix it up to match our guide here otherwise it is good'. Do not allow that behavior. As it turns people off. People make mistakes or we would not have bugs to fix! :)
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
That probably means it has to be useful or very interesting, and I really mean that YOU have to provide it. It doesn't have to be ready-made if it's useful or interesting enough. A new language is a tough sell though if it doesn't have at least a working compiler and a basic function library.
If you can convince people that it will make people who are different from them unhappy – especially if that difference involves sexual identity, skin color, religion, or culture – they'll pour their cold hearts and dark souls into it.
""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.
be less vague! natural languages? computer language? compile like an encyclopedia, or the Dragon Book? new language - why can't you use LLVM, or implement it in a REPL loop in another language? new compiler - dude, that ship has sailed with LLVM ...
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
Speak its name and your vaporware willbecome real ... vaporware.
"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.
2. Change all copyrights
3. Profit?
https://regmedia.co.uk/2015/07...
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.
...wit a keyboard and Notepad.
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.
it works like this:
1. You have a great idea,
2. You invest years working on it and your are totally ignored
3. Eventually you gain a user base and some broad use by industry
4. Some industrial giant will show interest and convince you to let them support your effort thought funding. They will probably suggest a Linux Foundation forum or something similar.
5. They will get buy in from a few other people in industry and form the Linux Foundation project.
6 The project will form a governance body and you will get the opportunity to serve on in the governance team with one vote. Of course the industry "Platinum" members will get 5 votes. You are basically a "tinfoil" member.
7. The first acts the governance body will be to change the licensing and rename the project so that it better fits into the platinum member's marketing message.
8. Your voice will fade into the background. You will be a member of the project only as a figurehead. Maybe you will get work behind the booth at a trade show?
Essentially, you lose the project and all of those years of effort.
All true. Good luck.
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.
Just proclaim to the World how inclusive and stress free you want your project ecosystem be, and Them progressive lady folks will flock and do all the development testing and walking your dog.
Call your language something like toki pona. Oh, wait, that one is taken. Whatever, something pona.
Just what we need!
We can never have enough "compilers".
Hopefully it combines the best of JIT compilation, virtual machines, abstraction, bytecodes, memory management, and hides as much as possible from the user.
We thought Java was fast , I'm sure this will be even faster.
to hell with assembly, it should run on a virtual machine, running on a virtual machine.
More indirection == more speed!
I can wait a few hours for the app to start, since it will be sooo much faster.
Also, make you enforce a certain discipline in the user. file names should have to be named a certain way, etc. Also don't ever print out any good warning message, stack traces are more than enough.
Linux solved a problem of early hosts, so if your language can't address an actual industry problem then it will fail. Even if you solve it by writing libraries for a specific use them you'll get users, investments, etc
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.)
> Or, to put it another way, how can you build a community to bring your ideas to light? How do I get highly skilled, highly paid people to work on my idea for free?
Ha ha. That's really arrogant. It isn't going to happen. If you can't get interested in it then it's unlikely anyone else will care either. Everyone has their own projects. That you've spouted a done-a-milliion-times idea and expected others to hop on board is deluded thinking.
Linus did it himself. He didn't expect others to do it for him to make up for his own laziness. He got shit done.
For genuine hackers looking for motivation to make their project happen WITHOUT EXPECTING OTHERS TO DO THE HARD WORK FOR THEM here is some advice:
You need sheer bloody minded persistence. Even seemingly easy software project can take years decades to write. You just need to keep at it and don't expect others to come in and do it for you.
If you reach a point where you're not enjoying it, where you don't want to do it, then you're burned out. Burn out is a sign that what you set out to do isn't worth it.
More tips: Keep it simple and get something out there fast and don't bore people by talking about it at the expense of doing it.
Though not every idea you have will be a great idea but it's hard to tell at the start of your journey.
As another poster said: There are many compilers out there. If you're doing another one it's only for your personal pleasure. That's okay, but don't expect public support.
Re-evaluate what you're doing with what you're learned and your new understanding of your situation and you can decide if to persist or if to give up. Reality is although some long term projects people persist with are worth it many are not and the sooner people give up the sooner they can move on and do something else. You've learned a lot by the journey. If you realize the destination is no longer worth reaching that's okay.
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"
Linus Torvalds wrote a working kernel by his lonesome. Then was able to use the project's inertia and respect for his development and leadership ability to recruit other brilliant developers to improve it.
Linus Torvalds also built Git from its inception to managing the entire Linux source tree within 10 weeks.
Linus Torvalds built his software through blood, sweat and tears (as well as an admitted amount of natural talent).
If you believe that you can "leverage the enthusiasm of the internet" to make software magically appear, then you obviously know nothing about the hard work and genius that really causes these things to happen.
As for your language. Implementing your own programming language is a bit like masturbation. It gives a certain feeling of satisfaction and sometimes you just have to do it. However, don't expect others to get as excited about it as you are.
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.
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
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.
> 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/
The poster claims that he or she designed a wonderful new compiler, without telling what language it would compile. If it is that wonderful, it may be suitable for many or any languages.
Some company turns your idea into a product, you collect more royalties than the King of Belgium.
(I realise some Slashdotters don't like patents)
Antlr is one of the better tools for developing parsers and compilers. Antlr will generate code for your lexer or parser in just about any language you want: C, C++, C#, Java and many others,
Antlr uses a LL(n) parser generator instead of a LR parser generator like Bison. Antlr will also generate the Lexer and AST walkers so you can just Antlr for your entire compiler.
All well formed compilers follow the same pattern:
1) Input Source Class:
a. File * for main input
b. buffer * for file contents
c. line#, column#, offset of current Lexer input position
d. Source File Name
e. map for include files
f. map for open include file names
g. stack for nested include position[s]
h. function to get next source char, maintain line#, column#, offset and automatically pop include positions at EOF
i. function to push new include file
j. function to cleanup all structures at EOF of main input
k. function to report include stack file names and positions for error reporting
2) Lexer Grammar:
a. Implement a separate Lexer grammar in the Antlr grammar language to recognoze all of your compiler's reserved words and symbols like Identifiers, Strings and Numbers.
b. use the automatically generated rules for Identifiers, Strings and Number or build your own rules
c. actions in Lexer grammar may only use functions in Source Table class
3) Lexer:
a. identify the boundaries between tokens
b. convert a stream of characters into a list of tokens
c. ignore comments and whitespace
d. generate Comment Tokens that are ignored by parser rules but attached to AST in the Parser phase
e. handle file includes
f. report all lexer rule errors with include stack of file, line#, column# for error position[s]
g. recover from extra, missing or invalid character errors and continue Lexing
h. the output of the Lexer is a stream of tokens
4) Token:
a. token type [integer or enumeration value]
b. line#/column#/Include# of source for start of token text
c. source file/buffer start/end offset
d. length
e. text [only for constants, identifiers, bind variables, no text for keywords or reserved words]
f. one or more fields to be updated by Parser, AST Walker, or Translator [pointer to map [class name to class pointer] for attached info]
g. function to get source file name from include stack
h. function to get line#, column#, token Text for trace and errors
5) Symbol Table Class:
a. For a Block structured language the Symbol Table is a stack of nested scopes where each scope has a map [Name to Type]
b. For SQL the Symbol Table follows the same hierarchy as a SQL System Catalog: Database ==> Schema ==> View ==> Table ==> Column ==> column attributes [data type, key, virtual, generated, etc.]
6) Parser Grammar
a. The Parser grammar represents the structure of your language
b. the input to your Parser is the stream of tokens from the Lexer
c. whitespace tokens are ignored by the Parser grammar [except to attach them to the statement level rule]
d. actions in Parser grammar may only use functions in Symbol Table class and ParserErrorHandler
7) Parser:
a. Parse a list of Tokens generated by Lexer [no access to source text]
b. validate Identifiers [verify declarations for variables and user defined functions]
c. annotate Symbol Table variables and functions with the declared data type
d. validate function parameters for number and type
e. validate operator/operand type restrictions
f. enforce operator precedence, associativity and commutatively
g. detect forward references
h. generate an Abstract Syntax Tree [AST] with a node for each invoked parser rule and source token/identifier
i. report all parser rule errors with file, line#, column# and text from Token
j. recover from extra, missing or invalid token errors a
What we need is a "kickstarter" where coders donate coding time.
> I hate that term "lamba". It's just a fancy term for "unnamed", or "anonymous". What is a lambda function? A function that doesn't have a name, didn't need to be named, that's all!
Thanks for clearing that up. Serious! I've been hearing about them for years, and it turned out I've been using them for years. When I read the doc on lambdas I scratched my head and went back to what I was doing. So some some wanker invented a name when they could have just said anonymous or unnamed function, but instead hid an ordinary idea behind jargon.
...if only there were some kind of global network, to connect people together... ...if only there were some sort of writey-thing, that could allow ideas to be fleshed out and publicized... ...if only there was a place to put code, just out there, for anyone... ...if only there was a system of legalistic rules, to clarify what was permissible and what was impermissible, for code use... ...if only there was a way of raising money, to allow good ideas to be funded... ...if only there was a set of words, phrases, and a supportive culture, that people already knew, that a computer language author could tap into... ...if only there was a group of computer languages that had gone through this process, and people could model their success (or lack thereof), on those prior languages... ...if only there were some knowledge sharing mechanisms, so that a total newbie could address their lack of knowledge, and sound less like a clueless and out of touch ignoramus...
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
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).