Something Secret This Way Comes
llogiq.github.io
llogiq.github.io
How "hot" a function is - has it reiceved a lot of edits in the recent past? Or is cold and old (and therefore you'd imagine reasonably bug-free for most use cases).
I think the number of unqiue people editing a portion of code would also be interesting to know. As you might expect multiple authors to have different beliefs about the point of the code and therefore the code is probably going to be more muddy and less clear.
https://i-msdn.sec.s-msft.com/dynimg/IC805614.jpeg
(For C# at least)
Then you could finally type something like "double k" and have it make sure you meant set k equal to k times two. (yes, of course.) but maybe one guy means append k to k as a string, that one guy in a hundred can pick that.
Today, thousands of people a day go through Google as part of this process. Why should Google be part of my actual workflow experience, without being part of the IDE experience or, well, language - or using people's feedback in any way? It doesn't make sense.
On kite... So I'm not familiar with kite but yes, "the language" should be much broader, way too broad to include in a static download. Take my example: every English-speaking programmer knows what it means to double something but no programming language I know includes a function called double() which means to set equal to itself * 2 (because including such a thing in a downloadable language is a stupid idea to do). On the other hand it's not a stupid idea to do so interactively in a connected "language as a service", having it offer and keep track of the fact that people usually end up wanting you to set it to the value * 2 (90% of the time).
You can test that this would work. Write some pseudo code to accomplish something.
Next, Google each line you've written, along with the name of a language. See? It works. You can change the pseudocode to code in a language interactively.
For choices the programmer has to make, the environment could ask them then and there.
This only works when a language is "live" or online, and keeps track of what people end up meaning. Maybe I shouldn't call it "language" but something else... Yet at the end of the day if you're writing code, answering some questions and moving on, it's close to a language, isn't it?
http://google-engtools.blogspot.ca/2011/12/bug-prediction-at...
For example I see people using linters that update automatically as you type (I think on Atom there isn't even an option to disable this if the packages are enabled) - which is frankly quite awful, when I'm writing the code I care a lot more about my thought process than being distracted by style complaints, there is a limited amount of context you can keep in mind at once, and subsidiary things shouldn't be actively wasting your time.
At least for me git log -L<start>,<end>:<file> is usually preferable.
That said it shouldn't be a hard tool to build for yourself if this is what you need.
My idea was to label each expression with these flags, i.e. is the expression constant?, tail recursive?, etc., and then make that information available for the text editor and other tooling, so the user can instantly see certain things about their program, and see the type of optimizations the compiler will do for them.
Progress has been a bit slow, but I will be posting here on HN if I end up making something worthwhile.
An example of this is the escape analysis lint in rust-clippy, which can detect if an allocation via Box/Vec/String is unnecessary (though right now it only supports one of those and I need to work on it more) and tell you how to remove it.
As an optimization pass it would have to actually change the generated code. It doesn't affect that (nor does Rust's plugin lint functionality; which it uses; let you do that)
However, lints no longer need to be lightweight; I've seen full-program analysis passes called lints. And in rust, lints usually don't complain about tabs/spaces (though we could write one), but rather certain idioms which are exacerbating readability, flexibility, performance or any combination of the above.
The example I gave of "does not panic" isn't really a lint, more of a restriction -- a static analysis pass that helps catch things which might not usually be a problem, but are a problem for your specific use case (so off by default). But there are lints as well which could benefit from the nsa lint backend.