Тёмный

Types are like the Weather, Type Systems are like Weathermen - Matthias Felleisen 

ClojureTV
Подписаться 29 тыс.
Просмотров 15 тыс.
50% 1

Whether you checked the weather app or not on the day before 22 Jan 2016, a huge snow storm covered the Eastern United States that weekend. If you lived in New York or DC, you had to dig out from under a large load of snow the next morning.
In the face of such storms, the good news is that people have almost perfected the art of weather prediction over the past few decades. A snow storm or hurricane will no longer catch anyone by surprise. If we act on these predictions in time, we can easily prevent the bad disasters of the days gone by.
My keynote will expand on this theme. Bring an umbrella.

Наука

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

 

15 апр 2016

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 21   
@capability-snob
@capability-snob 29 дней назад
Finally, a talk on types I can actually get behind!
@konstantinmikheev8049
@konstantinmikheev8049 8 лет назад
Awesome. Bookmarked.
@Verrisin
@Verrisin Год назад
People seem to think about types completely differently from me ... yes, they do all that, but their MAIN use is: _finding stuff_ - find what is possible; find all places that need to change ...
@Verrisin
@Verrisin Год назад
"what is possible" meaning: what makes sense to do / is correct / what values to pass, what structure to fill out with what-structured values ... what I can do with what it returns ... - and yes, it occasionally checks stuff which is nice, but it's mostly based on the compiler being able to find the rules and then check them - it's still about insight - and he made a good point, that it's about writing down the "types" one thinks ... except even typed languages usually do not allow to write quite what one would want..
@luna_moonspeak
@luna_moonspeak 7 лет назад
35:17 Circle and Square should be exchanged.
@birthdayforfrances
@birthdayforfrances 8 лет назад
I don't understand the difference between type inference, which he dismisses, and the gradual typing which he advocates. His examples look like they involve inference: given some type declarations in part of the code, reason about those types where they are used in the rest of the code.
@bichitomax
@bichitomax 8 лет назад
+birthdayforfrances They are analogous to each other. He didn't dismiss type inference, he said that is not possible to have it in a untyped language. If you are using typed racket then you can have type inference since know you have a type checker but if you then use regular racket in another module you loose that.
@hhaavvvvii
@hhaavvvvii 8 лет назад
+birthdayforfrances Gradual typing only checks what you've actually told the compiler about types, while leaving the rest dynamically typed. Type inference tries to infer types for all expressions, even those you haven't annotated. He's also talking mostly in the context of dynamic languages and putting types on them. It's practically impossible to infer the types for a type system that a language wasn't designed for, especially in a practical way that handles failure to infer.
@McCrackenJoel
@McCrackenJoel 8 лет назад
+birthdayforfrances the problem with type inference that he's talking about (IIUC) is that an error in one part of the code may manifest itself far away, and there is no way to make "good" error messages for these type errors. There is a distinction between local type inference and global type inference; local type inference means that types are inferred throughout a single function body. This helps because type mismatches happen much more closely together. Gradual typing is just optional types + contracts to ensure incorrect data is passed in to typed code. This isn't really related to type inference.
@user-yb5cn3np5q
@user-yb5cn3np5q 8 лет назад
+birthdayforfrances These are orthogonal concepts. Type inference finds types for parts of the program that were not annotated, gradual typing allows to mix typed and "untyped" parts (aka monotyped, used in dynamic languages) in the same program.
@leongrapenthin2862
@leongrapenthin2862 8 лет назад
The idea of inference that he dismisses is "Infer all types of an untyped program" because (if my understanding of his criticism is correct), the inferred (composite) types end up being very hard to reason about in error messages. I don't think he dismisses the concept of inference in general as that is quite essential to checking. The racket approach to gradual typing appears to be that contracts are generated for where you use typed code from untyped code - i. e. if you don't add types to your code you have pay with runtime for being guaranteed that the types aren't violated.
@kumoyuki
@kumoyuki 8 лет назад
500KLOC is peanuts
@the_kauko
@the_kauko 8 лет назад
+kumoyuki Depends on the language. I my experience, 500 LOC in a single file written in Clojure is a lot (enough to make you think about splitting it), but with javascript (or especially with Java!) you're just getting started. Racket is probably quite close to Clojure in this sense.
@kumoyuki
@kumoyuki 8 лет назад
Yes, I program in a lot of different languages, from the horrors of the C family, through Smalltalk, the Lisp family, and the Hindley-Milner languages. 500KLOC is peanuts in all worlds - at least assuming a relatively constant factor for converting LOC to actual concepts which are being manipulated in the program. In fairness, I write very different programs in HOT languages than I do in glorified assembly languages. The concepts in my HOT code are much more abstract and so, in a sense, feel more complicated. But maintainance difficulty for the code base of HOT programs seems to scale just about at the same rate as for those of more primitive ones. So I don't see an inherent difference in the number of things I have to track mentally.
@anddrew332
@anddrew332 8 лет назад
500,000 lines of lisp code is like 5 million lines of c++/java code. There is a fair 10:1 reduction in code size when using a dynamic vs static language combined with using a functional vs imperative language.
Далее
The Language of the System - Rich Hickey
1:02:50
Просмотров 162 тыс.
Datalog all the way down - Christopher Small
42:37
Просмотров 13 тыс.
STOP'15: Bracha v Felleisen
1:09:20
Просмотров 10 тыс.
Effective Programs - 10 Years of Clojure - Rich Hickey
1:14:52
"I See What You Mean" by Peter Alvaro
52:29
Просмотров 55 тыс.
Are We There Yet - Rich Hickey
1:10:05
Просмотров 17 тыс.
КРУТОЙ ТЕЛЕФОН
0:16
Просмотров 5 млн
Wylsa Pro: опять блокировка YouTube?
17:49
Самый быстрый пылесос!
0:30
Просмотров 18 тыс.