This is an exquisite example of clean code. Lexical analysis code is often hairy but as Rob shows doesn't have to be. Go first class functions and slices really shine here.
@kalekold6 жыл бұрын
This is now my ideal way of writing a lexer in Go. It's such an elegant solution.
My favourite line: “So we should write our own [lexer], because it's easy, right? Anybody can write code-especially programmers.” (11:45)
@russellchido6 жыл бұрын
@@skepticmoderate5790 lmao bf doesn't even require lexing. Each character is a token. This is the worse qualification to talk about parsing.
@kamilziemian9959 ай бұрын
@@russellchidoCan you explain this in more details?
@goncaloazevedo9822Ай бұрын
@@kamilziemian995 I think he's just saying that brainfuck doesn't need lexing, you just emit each character as a lexeme, don't know why that would make this talk bad but ok
@seltsamerzeitgenosse97973 жыл бұрын
09:26 "We could use a tool. Lex is a pretty famous one. Initially written by Mike Lesk and then redone when he was an intern by someone called Eric Schmidt." ... who at the time of this talk was his Boss (and the CEO of Google)
@bokwoon4 жыл бұрын
So instead of the state machine being implemented as a state variable + a switch statement, it is implemented as functions returning other functions. If state A transitions to state B, it is encoded as function A returning function B.
@rettberg56889 жыл бұрын
Is anybody familiar with the work of Michael Jackson? (sees a lot of hands) Good (goes right into talking about some obscure CS researcher.) This man is the pinnacle of nerd. I'm pretty sure the audience thought you were about to make a joke about thriller.
@AndyHerbert7 жыл бұрын
Jackson structured programming is hardly obscure.
@needlessoptions7 жыл бұрын
Andy Herbet Nerd
@skepticmoderate57905 жыл бұрын
Fairly certain it was a joke.
@ideaparkcc4 жыл бұрын
Go 的成功证明你就是个傻逼,事实证明了你真是个傻逼。
@bokwoon4 жыл бұрын
It was a joke and I'm so sad no one laughed! I sure did when I heard him offhandedly quip "as you know, Michael Jackson developed Jackson Structured Programming".
@joshring8563 Жыл бұрын
Really appreciate how this talk made state machines more accessible to normal humans :)
@olaifaoluwadarasimiibikunl78208 ай бұрын
Wow! Awesome talk. Can't wait to try this out. Thanks Rob.
@ilcorion8 жыл бұрын
Is there any "Parsing in GO", describing the next step -- using the channel of items in order to build syntax tree?
@Adisaboss7 жыл бұрын
The parser code is there: golang.org/src/text/template/parse/parse.go I did not find any course on the topic either, though
@vonschlesien13 жыл бұрын
@henriquedante Unicode is actually not a problem - Go as a language natively supports utf8 as its character encoding for the string type. For example, around 23:00-24:00, where you see "switch r = l.next() {...", r is the next rune in the output - i.e. the next unicode code point assembled through utf8 decoding. If you want to accept only upper case, just call the relevant test function from package unicode on the value of r :-)
@800pieds2 ай бұрын
Beautifully written. However I looked at the code today and channels have disappeared. I'd be curious for a tour of the principles today for comparison, and also their philosophy about the parser.
@ScottHessАй бұрын
Probably the answer around 45m. The channel makes sense with coroutines, but once you’re completely synchronous it just adds overhead.
@naikrovek6 жыл бұрын
I like how Dave Chaney (now something of a Golang celebrity) is in the audience asking questions. Looks like him, anyway.
@ishwargowda2 жыл бұрын
That was beautiful!!
@peterarnt8 жыл бұрын
Anyone know where the slides moved to? Link above does not work (i.e. linky-no-worky)
@peterarnt8 жыл бұрын
This appears to work: talks.golang.org/2011/lex.slide#1
@DamienPollet12 жыл бұрын
I think we did something like that as an exercise, except each state function would directly call its successors using tail-recursion. That would have been in OCaml, IIRC…
@EugeneCrosser13 жыл бұрын
I wonder if Go has tail call optimization. You might implement the construct described in minutes 14-15 as a tail call instead of a for-loop.
@JackMott5 жыл бұрын
it doesn't, even 8 years later.
@mahamedbelkheir27494 жыл бұрын
@@JackMott it does actually, but you have to do it manually with GOTO, it's one of the only valid usecases for goto, explicit tail call funcs
@jnevercast7 жыл бұрын
Master of Goroutines, still can't schedule :p
@stovechan78739 жыл бұрын
51:06 They wanted him to stay, be he had to Go. Should he stay or should he go? He decided to Go.
@shakerlakes4 жыл бұрын
I love the slam against Perl at 4:32. 😉
@salvezza27109 жыл бұрын
guys, where can I find go parser for parsing sql files ? because, I found only a single statement parser and one located in influxdb, but it's not what I need.
@EugeneCrosser13 жыл бұрын
@jimmyrcom I see. Honestly, in this particular case it's just a matter of personal preference, the for-loop is "elegant enough" too.
@blizzy785 жыл бұрын
Very insightful, thanks Rob!
@DavidFarrellEastBay12 жыл бұрын
@chuanchuanLeo, did you finish your C implementation? Is it available for viewing online? Please let me know if you'd like any assistance.
@saptarsihalder78503 жыл бұрын
what is wrong with rob pike. this guy's idea is so simple yet its like a next level powerful idea...I am just amazed by how he did the lexing...
@salkdjfasldkfjsdlk10 жыл бұрын
Great Golang talk as always. I really wish people would stop using the word trivial.
@Adisaboss7 жыл бұрын
Reminds me the horrible days of Math courses: "We'll skip this demonstration, it's trivial." "IT IS? Gosh I'm lost..." I couldn't agree with you more
@Cleanser234 ай бұрын
Am I the only one who doesnt love how stateful this solution is? State can lead to tons of bugs, it might be a little nicer if each state function also returned the next state of the lexer instead
@布雷-z7h2 жыл бұрын
very clear talk and the lexical scanning in golang at 2022 is very different
@dn54262 жыл бұрын
wait, is that dave cheney...?
@VickyGYT3 ай бұрын
These talks are so much better than any Cpp++ con talks...
@이준범-n7f6 жыл бұрын
This is so amazing talk. thx
@shakerlakes4 жыл бұрын
He's a very good speaker. I do enjoy his talks. Even if you're not interested in the topic, you'll become interested in the topic. You come away with insights that you didn't even know you were missing before watching the talk.
@Ch05111 жыл бұрын
Why does lex() return a reference to the lexer, and not just the item channel? Is this because the lexer would get garbage collected otherwise?
@Mike-iz9kh4 жыл бұрын
You have to call the "run()" method on the lexer you get back before you would get anything from the channel. I suppose that could be kicked off inside the same lex() function, but that's not how it was shown in the talk.
@DavidFarrellEastBay13 жыл бұрын
I wrote a lexer and parser API in Go, inspired by this presentation: github.com/iNamik/lexer.go github.com/iNamik/parser.go
@Naeddyr12 жыл бұрын
So let's lex a left meta. So let's lex a left meta. So let's lex a left meta. I love the way he says that.
@amiraelsayedhassan85382 жыл бұрын
Anyone else think he'll start singing Smooth Criminal by Michael Jackson instead?
@zgmg92636 жыл бұрын
This is amazing
12 жыл бұрын
RP just must do everything right, right? ;-)
@AbhinandanNM9 жыл бұрын
Went over my head
@PriyankJainpj7 жыл бұрын
I am interested if you are still interested in helping me out?
@johnnm32073 жыл бұрын
Why did he say the work of Michael Jackson and I immediately thought of Billie Jean
@РодионЧаускин2 ай бұрын
Moore Brenda Garcia Jessica White Michelle
@aperson4051 Жыл бұрын
I'm only 20 mins in, but I'm failing to see the "beauty" in this approach. The logic is spread out over codebase. Code should be optimized for (human) reads. A single switch statement where state is kept track of reads way easier.
@aperson4051 Жыл бұрын
I have a feeling this is another case of, when a new paradigm starts to take off (the actor model) everyone wants to write everything in it, and it all seems beautiful until we actually work with it and begin to learn why this new idea is not always appropriate for every task.