Тёмный

Lexical Scanning in Go - Rob Pike 

GoogleFOSSSydney
Подписаться 948
Просмотров 143 тыс.
50% 1

Наука

Опубликовано:

 

28 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 70   
@bokwoon
@bokwoon 4 года назад
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.
@rettberg5688
@rettberg5688 9 лет назад
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.
@AndyHerbert
@AndyHerbert 7 лет назад
Jackson structured programming is hardly obscure.
@needlessoptions
@needlessoptions 7 лет назад
Andy Herbet Nerd
@skepticmoderate5790
@skepticmoderate5790 5 лет назад
Fairly certain it was a joke.
@ideaparkcc
@ideaparkcc 4 года назад
Go 的成功证明你就是个傻逼,事实证明了你真是个傻逼。
@bokwoon
@bokwoon 4 года назад
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".
@布雷-z7h
@布雷-z7h 2 года назад
very clear talk and the lexical scanning in golang at 2022 is very different
@amiraelsayedhassan8538
@amiraelsayedhassan8538 Год назад
Anyone else think he'll start singing Smooth Criminal by Michael Jackson instead?
@salkdjfasldkfjsdlk
@salkdjfasldkfjsdlk 10 лет назад
Great Golang talk as always. I really wish people would stop using the word trivial.
@Adisaboss
@Adisaboss 7 лет назад
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
@peterarnt
@peterarnt 7 лет назад
Anyone know where the slides moved to? Link above does not work (i.e. linky-no-worky)
@peterarnt
@peterarnt 7 лет назад
This appears to work: talks.golang.org/2011/lex.slide#1
@stovechan7873
@stovechan7873 8 лет назад
51:06 They wanted him to stay, be he had to Go. Should he stay or should he go? He decided to Go.
@salvezza2710
@salvezza2710 8 лет назад
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.
@Ch051
@Ch051 11 лет назад
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-iz9kh
@Mike-iz9kh 4 года назад
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.
@henriquedante
@henriquedante 13 лет назад
Main objection point is that you can't write this way if you're parsing unicode patterns. For example, what would be the accept() string for accepting upper case, lower case, etc. letters ? Nevertheless, the final scanner was extremelly clean and it must have been really fun to write.
@bokwoon
@bokwoon 4 года назад
You can simply modify the accept() to take in a boolean function instead of a string. That would allow accept() to take in the unicode.IsLetter() and unicode.IsLower() functions as arguments, which are unicode aware.
@aperson4051
@aperson4051 10 месяцев назад
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
@aperson4051 10 месяцев назад
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.
@王旭东-l2h
@王旭东-l2h 2 месяца назад
Rob you lost your hairs...
@lukes5461
@lukes5461 10 лет назад
My favourite line: “So we should write our own [lexer], because it's easy, right? Anybody can write code-especially programmers.” (11:45)
@russellchido
@russellchido 5 лет назад
@@skepticmoderate5790 lmao bf doesn't even require lexing. Each character is a token. This is the worse qualification to talk about parsing.
@kamilziemian995
@kamilziemian995 6 месяцев назад
@@russellchidoCan you explain this in more details?
@RayPereda68
@RayPereda68 7 лет назад
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.
@DavidFarrellEastBay
@DavidFarrellEastBay 13 лет назад
I wrote a lexer and parser API in Go, inspired by this presentation: github.com/iNamik/lexer.go github.com/iNamik/parser.go
@kalekold
@kalekold 5 лет назад
This is now my ideal way of writing a lexer in Go. It's such an elegant solution.
@jnevercast
@jnevercast 6 лет назад
Master of Goroutines, still can't schedule :p
@atanasdenkov2433
@atanasdenkov2433 2 года назад
Beautiful lecture, beautiful language, beautiful programming style.
@seltsamerzeitgenosse9797
@seltsamerzeitgenosse9797 3 года назад
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)
@Cleanser23
@Cleanser23 Месяц назад
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
@ilcorion
@ilcorion 8 лет назад
Is there any "Parsing in GO", describing the next step -- using the channel of items in order to build syntax tree?
@Adisaboss
@Adisaboss 7 лет назад
The parser code is there: golang.org/src/text/template/parse/parse.go I did not find any course on the topic either, though
@naikrovek
@naikrovek 6 лет назад
I like how Dave Chaney (now something of a Golang celebrity) is in the audience asking questions. Looks like him, anyway.
@saptarsihalder7850
@saptarsihalder7850 3 года назад
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...
@shakerlakes
@shakerlakes 4 года назад
I love the slam against Perl at 4:32. 😉
@ishwargowda
@ishwargowda 2 года назад
That was beautiful!!
@Naeddyr
@Naeddyr 12 лет назад
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.
@johnnm3207
@johnnm3207 3 года назад
Why did he say the work of Michael Jackson and I immediately thought of Billie Jean
@olaifaoluwadarasimiibikunl7820
@olaifaoluwadarasimiibikunl7820 5 месяцев назад
Wow! Awesome talk. Can't wait to try this out. Thanks Rob.
@vonschlesien
@vonschlesien 13 лет назад
@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 :-)
@DamienPollet
@DamienPollet 11 лет назад
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…
@EugeneCrosser
@EugeneCrosser 13 лет назад
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.
@JackMott
@JackMott 4 года назад
it doesn't, even 8 years later.
@mahamedbelkheir2749
@mahamedbelkheir2749 3 года назад
@@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
@joshring8563
@joshring8563 Год назад
Really appreciate how this talk made state machines more accessible to normal humans :)
@dn5426
@dn5426 2 года назад
wait, is that dave cheney...?
@henriquedante
@henriquedante 13 лет назад
@vonschlesien You're right I didn't think the test functions would be so efficient as they are
@DavidFarrellEastBay
@DavidFarrellEastBay 11 лет назад
@chuanchuanLeo, did you finish your C implementation? Is it available for viewing online? Please let me know if you'd like any assistance.
@EugeneCrosser
@EugeneCrosser 13 лет назад
@jimmyrcom I see. Honestly, in this particular case it's just a matter of personal preference, the for-loop is "elegant enough" too.
@blizzy78
@blizzy78 4 года назад
Very insightful, thanks Rob!
12 лет назад
RP just must do everything right, right? ;-)
@zgmg9263
@zgmg9263 6 лет назад
This is amazing
@AbhinandanNM
@AbhinandanNM 9 лет назад
Went over my head
@PriyankJainpj
@PriyankJainpj 7 лет назад
I am interested if you are still interested in helping me out?
@이준범-n7f
@이준범-n7f 5 лет назад
This is so amazing talk. thx
@shakerlakes
@shakerlakes 4 года назад
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.
@VickyGYT
@VickyGYT 20 дней назад
These talks are so much better than any Cpp++ con talks...
Далее
Concurrency is not Parallelism by Rob Pike
31:22
Просмотров 132 тыс.
Gopherfest 2015 | Go Proverbs with Rob Pike
22:29
Просмотров 249 тыс.
OSCON 2010:  Rob Pike, "Public Static Void"
12:31
Просмотров 113 тыс.
The One BIG Reason to Learn Google's Go Language
17:55
Просмотров 159 тыс.
dotGo 2015 - Rob Pike - Simplicity is Complicated
23:12
Google I/O 2012 - Meet the Go Team
1:00:29
Просмотров 91 тыс.
The Go Programming Language and Environment
41:54
Просмотров 22 тыс.
Origins of Go Concurrency style by Rob Pike
38:19
Просмотров 26 тыс.
Самый дорогой iPHONE 16 PRO MAX #shorts
0:58