A64m
чем проще язык, тем больше сложного кода надо писать и более заумные энкодинги нужных вещей, которых в простом языке просто нет костылить
Nikita
https://www.youtube.com/watch?v=rFejpH_tAHM
Nikita
как раз tlk есть про это
Евгений
Ппц пайк на задорнова похож
Cheese
Можно abstract этот код
покажи, как абстрагировать быструю сортировку в Go
A64m
паскаль лучше лиспа?
конечно лучше
Евгений
По моему наличие замыканий важнее типизированности
Nikita
можно все вывесте к одному function call
Cheese
можно все вывесте к одному function call
в Го нельзя, насколько я знаю. просто покажи мне эту одну функцию
Nikita
Ну сделать функцию that takes an interface and does sorting on it
Nikita
Почему нельзя
Nikita
Все turing complete,разве нет?
Anonymous
вот так же на го с дженериками пишут https://twitter.com/yogthos/status/883058510275149826
Aragaer
на си можно все инты кастить друг к другу
Cheese
можно, только если выкинуть типы
A64m
а что на Го нельзя?
Aragaer
а для того, что не кастится, приходится делать то же, что и в го - реализовывать функции сравнения для всех нужных типов
Aragaer
на го нет - нет неявного приведения между целыми типами, только явное
A64m
ну явное то есть
A64m
этого достаточно
Nikita
нет неявного приведения между целыми типами, только явное
Nikita
что значет не явное
Aragaer
ну просто вот по этой причине и получается, что для сравнения двух интов32 нужна одна функция, а для сравнения двух интов16 другая
A64m
в случае квиксорта это не так страшно
Aragaer
func cmp(x, y int64) { } var a, b int32 cmp(a, b) // ошибка
Cheese
в обобщённую функцию сортировки инт32 можно передать функцию сравнения инт16, и всё разъедется
Aragaer
ну функции сортировки по идее все равно должно быть, она может с аргументами оперировать как interface{}
A64m
ну т.е. без дженериков раньше куча языков была, вообще мейнстрим был именно без дженериков, и писали, сейчас без HKT пишут. Это все мучительно, конечно, но программисты с самого начала учатся любить страдания, другие в программировании не выживают
Aragaer
а вот функция сравнения должна работать именно с тем, что в в контейнере лежит
Aragaer
я вот не помню, есть ли в го тип, в который бы можно было присвоить тип. Тогда можно было бы вместо дженериков использовать структуры контейнер+тип. Но неудобно.
Aragaer
ну так а в си так и живут - там в квиксорте void *
Aragaer
который и есть тот же interface{}
Aragaer
потому что в хаскелле у контейнера есть указание на тип содержимого. А в го нету
Cheese
ну так а в си так и живут - там в квиксорте void *
си — язык не для написания руками уже давно
Dmitry
а вот это было обидно
Aragaer
да наверно. Но мне нравится ковыряться руками во всякой подобной ерунде 8)
Cheese
ну, в массе. отдельные извращенцы всегда найдутся
Nikita
А есть что то типа interface{} в Haskell?
Cheese
А есть что то типа interface{} в Haskell?
есть, но никогда не нужно
Cheese
а для чего?
мы, например, вынуждены использовать С для совместимости и переносимости, но генерим его из Хаскеля
A64m
кто-то конечно генерит си (и всегда так было), но он конечно для написания руками, а не генерирования. То, что он плохо пригоден для написания руками - это не довод, тогда хорошо языки делать и не умели, да и для генерирования он плохо пригоден
Aragaer
да, должен оговориться, мой опыт го это чуть-чуть несколько лет назад и чуть-чуть побольше в этом году
Aragaer
си хорошо пригоден для получения такого машинного кода, какой требуется
A64m
и сейчас, думаю, на нем руками пишут намного больше, чем генерируют
Aragaer
ну когда я смотрю на сишный код, то (в контексте эмбеддед) я более-менее понимаю, что при этом происходит в кишках у компьютера
Aragaer
а когда смотрю допустим на питоновский - не настолько прозрачно
A64m
но намного меньше, чем на приличных языках
намного больше чем на приличных языках
Nikita
А правда что если реально выучить Haskell
Nikita
То писать на другом отдодает желание
Nikita
ну или вообще functional paradigm
Cheese
намного больше чем на приличных языках
у тебя слишком узкие рамки приличия
A64m
То писать на другом отдодает желание
так часто бывает, но тут скорее, я думаю, не от того что выучил хаскель желание пропадает, а хаскель учат потому что измучены другими до невозможности уже
Cheese
То писать на другом отдодает желание
первое время есть немного. потом понимаешь, что другие языки тоже в чём-то хороши (кроме Го, конечно)
A64m
вот я и до того как хаскель изучил почти все ЯП ненавидел
Nikita
Haskell все равно больше academic язык
Nikita
а Go focused on production
Cheese
а Go focused on production
не более, чем другие языки
A64m
ну вот C++ академический, но это его распространению не помешало
Кабачок
А правда что если реально выучить Haskell
Нет, всегда найдётся чуть более приятный язык
Nikita
Важен больше даже не язык а ecosystem
Cheese
Haskell все равно больше academic язык
больше, чем Го? да, и это только плюс!
分解物質
То писать на другом отдодает желание
отошло желание доучивать расширения к хаскелю после того как изучил Data.Array
A64m
ну с такими представлениями в хаскеле делать нечего, там если язык еще сносный, то про экосистему такого точно не скажешь
Cheese
Важен больше даже не язык а ecosystem
у Хаскеля она есть, у Го почти нет
Кабачок
Ну мне вот идрис нравится, никаких синглтонов, завтипы и даже fmap называется map