Hacker Newsnew | past | comments | ask | show | jobs | submit | Maxatar's commentslogin

You're going to have a very hard time parsing a language using recursive descent if you don't understand some formal language theory. Recursive descent algorithms have a lot of trouble with left-recursion, and can result in arbitrary backtracking if you're not careful, which can blow up memory and time. To fix left-recursion you need to rewrite your grammar, which means familiarity with formal language theory. To avoid backtracking you typically use an LL(N) or variations thereof, which once again require having a pretty good understanding of formal language theory.

Nah. Source: have done it without formal language theory. You can do most things by printf debugging and kludging.

(Left-recursion? Use a while loop! Mutable state is a pathway to many abilities functional programmers consider unnatural.)


You can definitely write parsers and lexers knowing just enough to be dangerous.

I remember being in the PHP culture where people wrote regex-based hacks instead of the character-at-a-time or token-at-a-time state machines or state machine + a stack kind of things which would be too slow in a language like that.

The less you know the faster you get in trouble when things get tough.


My statement was specific to recursive descent parsing.

But recursive descent parsing is implemented with functions operating on parser state. The whole point of it is that it's very easy to write a parser because the abstraction exactly matches to function calling in programming languages. So you can do the whole range of pl primitives too.

So unless I'm mistaken, the TL;DR is that GPTs inherently can not be Turing complete because they always terminate, ie. there is always a non-zero probability of the end-of-token character to be generated.

Seems like a fair argument to raise, although not too insightful.

As a nitpick, it really is not the case that most programming languages are context-free, but I can sympathize with what the author is trying to get at. Most programming languages have a context-free superset that is useful to use as one of many stages in the parsing pipeline, before type checking and name resolution etc... but apart from perhaps some dynamically typed programming languages, the vast majority of programming languages are context-sensitive, not context-free.


> GPTs inherently can not be Turing complete because they always terminate

I'm not sure that was intended entirely seriously. After all, humans always terminate too...


To follow on logically, maybe humans aren't Turing complete? we are not equivalent to Turing machines...

No machine instantiated in the physical universe is Turing complete in this sense.

Except that as far as I understand, one of the inspirations for the Turing machine is to explain precisely the computations a human computer could perform with (potentially a lot of) pen and paper.

Theoretically, not in any sense of reality.

And an unlimited life span.

You can do everything a Turing machine can do; obviously, you cannot fail to be Turing complete.

We can simulate a Turing machine, given storage. The infinite storage and infinite time is always a sticking point when comparing any real physical system to a theoretical Turing machine, so we tend to ignore those bits.

"Unbounded" is a better term to use than "infinite."

As a quick hack, is this flaw fixed by using top-p or top-k or min-p or whatever the current hottest logit sampling algorithm is?

The "flaw" is also fixed by simply not recognizing the end-of-sampling token. Even the limited size of the context window can be worked around with tool calls.

Thank you for the nitpick, corrected!

The voices used in the trailer will not be the same as the finished game.

Is it really faster to run the code than to just answer it? Like are people struggling to answer this question?

I do think running the code would be a tiny bit faster, even if it's merely seconds either way. Opening a python REPL and pasting that would take around 5 seconds in my case. Running the code in my head would take roughly the same at first, but then if it's in an interview I'd take the time to double check. And then check a few more times because I'd expect some kind of trick here.

Considering there's no (explicit) instruction forbidding or discouraging it, I'd consider the REPL solution to be perfectly valid. In fact some interview tests specifically look for this kind of problem solving.

I get it still, I'd expect some valuable signal from this test. Candidates who execute this code are likely to do so because they really want to avoid running the code in their head, not just because it's more straightforward, and that's probably a bad sign. And pasting that into an LLM instead of a REPL would be a massive red flag.

I just don't think answering "-11" here is a signal strong enough to disqualify candidates on its own.


If you're looking for junior-ish python devs, I'd expect a good chunk of the better ones to have a python repl open and ready just as a matter of habit.

So for them, yes, it would clearly be faster to run the code than to work through it manually.

What you're doing here is selecting for candidates who are less comfortable with using the tools that they'd be expected to use every day in the role you're hiring for. It's likely to provide a negative signal.


I can run the code in my head. I can probably be right. I can be 99.9999% sure I am right.

OR:

I could run the code in the interpreter and be 100% certain.

I know what attitude I would prefer out of my developers.


Isnt the point of the article that blindly copying and pasting this code leads to the wrong answer?

I agree many developers do blindly copy and paste things off the Internet, but I don't think that's something to desire or celebrate.


The point of this article is this person punishes people who copy and paste the code ... into their python interpreter to check.

How many cases have you faced in your real job where this has happened?


So I wouldn't go so far as to say that I'd fire someone for copying and pasting code, but it's definitely part of my company's culture that copying and pasting code off of a website, and especially executing it, is something heavily discouraged to the point that it doesn't really happen at my job.

I'm perfectly happy to use Stack Overflow and other resources/tutorials, blog posts etc... to find solutions to problems, but just instinctively I would never think to copy and paste a solution from these sites and incorporate it into my codebase and I sure as heck wouldn't think to execute code from some untrusted site I happened to come across.

But this may also be a consequence of the domain I work in where we take security very seriously.


You can tell how safe a code snippet is from reading it.

Like, there's no way you're going to copy a 20 line algorithm from stack overflow on balancing a red-black tree and have it encrypt your harddrive.

Obviously you still need to test the code to make sure it works and understand what it's doing, but there is very little security risk here. Just look up the functions youre using and understand the code and you're fine.


the attitude of at least checking the code before running it, I suppose? Or is the curl | sudo bash approach more preferred nowadays?

If you have a test that can identify a good candidate quickly then you have honestly struck gold and can genuinely use that to start your own company. I mean this with absolute sincerity.

One of the absolute hardest part of my business is really hiring qualified candidates, and it's really demoralizing and time consuming and unbelievably expensive. The best that I've managed to do is the same that pretty much every other business owner says... which is that I can usually (not always) filter out the bad candidates (along with some false negatives), and have some degree of luck in hiring good candidates (with some false positives).


Good candidates are not universally good, they are good for you after hire.

One of the best business analysts I worked with (also a profession, mind you) was almost fired when working under an old, grumpy and clearly underskilled one.

I was hired once without interview into a unicorn, was loved by colleagues but hated the work, the business and the industry, then left rather quickly.

See? There are mismatches and unknown unknowns, not just bad or good developers.


yup, the worst performance i did on any job was due to the complete unavailability of a manager when i was a team of one. and then that manager would not even fire me. i had to quit to get out of there.

Yeah sourcing developers / collaborating with developers is a huge barrier of entry. More than others factors such as deciding what software to produce for the market

Type deduction is a form of type inference, a very restricted/crude form of type inference that only considers the type of the immediate expression. The term is used in C++ because it predates the use of auto and was the term used to determine how to implicitly instantiate templates. auto uses exactly the same rules (with 1 single exception) as template type deduction, so the name was kept for familiarity. If instead of initializing a variable, you went through the examples on this website and passed the expression into a template function, the type would be deduced in exactly the same way with the exception of initializer lists.

Type inference is usually reserved for more general algorithms that can inspect not only how a variable is initialized, but how the variable used, such as what functions it's passed into, etc...


> Type inference is usually reserved for more general algorithms that can inspect not only how a variable is initialized, but how the variable used, such as what functions it's passed into, etc...

In a modern context, both would be called "type inference" because unidirectional type inference is quite a bit more common now than the bidirectional kind, given that many major languages adopted it.

If you want to specify constraint-based type inference then you can say global HM (e.g. Haskell), local HM (e.g. Rust), or just bidirectional type inference.


The comment you're replying to is also a joke, with some interesting bits and details.

I think I'll just avoid commenting on jokes from now on.

I only see three fairly superficial paragraphs. Is there more to the article behind a paywall?


There are several published methods for reading Atlantic articles. I don't think anyone can make the judgement call for what you should and shouldn't read. Why not give it a shot?

I didn't ask about what I should or shouldn't do and don't really care about your opinion on what I should read. I was surprised by how short and superficial the article was as originally linked and wanted to know if that was due to a paywall blocking the more substantive portion of the article or whether the article is just three brief paragraphs.

I count 8 fairly brief paragraphs in the article. The last sentence is "Altman’s “code red” declaration is a reminder that, despite OpenAI’s unprecedented rise, it remains very much a start-up."

I use a Firefox add-on to Bypass Paywalls.



The trade-off is intended to make it easier for people to write software. Garbage collected languages make it easier for people to write memory safe code at the expense of performance, significantly greater memory usage, and heavy dependencies/runtimes.

These trade-offs are wholly unnecessary if the LLM writes the software in Rust, assuming that in principle the LLM is able to do so.


I also prefer that and in fact I enable "visible whitespace" in every text editor that supports it, such as VS Code.

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

Search: