Kirill
Или Лёха, не знаю, кто бенч писал
Daniel
BenchmarkNewSlice написал я
Daniel
но он такой же, как BenchmarkNewList
Roman
Блин... Я это все прочитал. Целый день некогда было залезть в чат, а тут 500> сообщений. Роман совершенно прав, dangling pointers, pointer aliasing — это беда языка, если её не решить хоть каким способом. Скала, раст решили эту детскую проблему. Проблема очевидна только тем, кто её понимает. Начать понимать её можно только на больших командах (точнее разными командами на одном проекте), с очень разношерстной публикой от новичков до опытных. На проекте, где как обычно некогда разбираться, что делает чужой код/либа, но вдруг!! оказывается что она меняет твои данные (состояние), которые ты не ожидал для изменения! И не ты их сам сознательно поменял, а произошёл "side effect" и цепочка выполнения, которая к этому привела, оказалась "очень вычурной и витеиватой". Кто с этим сам не сталкивался, писал только "домашние" проекты, тот к сожалению мало понимает суть проблемы, увы.... Эта проблема отсутствует в скала, потому что заложена в языке, тк сделать мутацию как сайд-эффект можно только сознательно и тогда коллеги это внимательно изучат, насколько это оправдано. Раст решил это на уровне компилятора. Это же решение ОЧЕНЬ НЕОБХОДИМО в компиляторе Go. Но есть сомнения, как вообще создатели го относятся к этой идее? Какие были или нет контакты, комменты от них, Роман? Может имеет смысл бомбить их на почту, в гугл группе, в слак каналах? Какие кто знает "наиболее прямые точки доступа" к создателям языка и компилятора? Поставить star + watch в гитхабе — это почти ни о чем... Нужно больше усилий и я понимаю Романа и его постоянные попытки форсить и рекламировать свой proposal на канале. Но нужны другие, более "прямые и точные каналы", чтобы обращаться к "главным го разработчикам". Роман, думаю ещё стоило бы сделать более наглядные (то ли простые, то ли наоборот quiz, не очевидные примеры) с примером такого поведения, которое disaster. Да, иногда вы можете увидеть и дать кому то" по рукам" в своей команде, но лучше, чтобы за вас это делал компилятор!
документ уже почти готов к публикации. На днях буду его публиковать в issue tracker'е, hackernews и mail
Kirill
Ты это
Зачем вы копируете int?
Kirill
Там же постоянное копирование
Roman
Не факт, что скорость работы программера будет выше на расте/скале чем на го, если взять рандомного прогера и потратить одинаковое время на изучение языка
ты так пишешь будто иммутабельные типы усложняют язык настолько что он начинает обрастать ржавчиной (превращается в Rust) 😅
Алексей
ты так пишешь будто иммутабельные типы усложняют язык настолько что он начинает обрастать ржавчиной (превращается в Rust) 😅
Сначала иммутабельностью балуются, а потом на всякие дженерики переходят, а затем опускаются на самое дно и начинают писать на хаскеле.
Roman
Под "скоростью" я подразумевал немного другое, извините, не совсем точно выразился. Речь не про скорость кодинга или проектирования. Цена ошибки и цена её исправления, которая займёт время и нервы (а произойдёт она как правило на продакшн, и как бывает после свежего деплоя). Цену этого сложно вычислить "легко и точно". Но лучше и правильнее это сделать в языке и компилятором, даже за счёт "сложных проверок" или "увеличения времени компиляции", чем потраченными человеко-часами. Кто этого не понимает, увы, его убедить, что это важно сложно. Это только с опытом приходит, что лучше этого гемороя НЕ иметь и столкнуться "иногда", чем иметь заложеннвй в языке, для "супер скоростной компиляции".
иммутпбельные типы не будут представлять собой значительной нагрузки на компилятор, разница не будет заметна при хорошей оптимизации
Kirill
Супееер
Алексей
а разве в rust непродуманная система immutability?
В хаскеле вообще mutability нету (точнее есть, но оно в монады там спрятано).
Алексей
То есть хаскель - это вообще иммутабельность, функциональщина, типизация возведённые в абсолют.
Eugene
В хаскеле вообще mutability нету (точнее есть, но оно в монады там спрятано).
в haskell можно нормально в OOP стиле писать большие программы?
Roman
Ну так а зачем вся вот эта чёрная магия со сложными проверками, когда есть Rust с явным указанием лайфтаймов?
раст и го разные инструменты для решения разных задач. Rust это performance, Go это time-to-market.Я-ж не предлагаю убирать garbage collector)) но code safety нужен в любом языке, особенно в таком как го который сам по себе про конкуррентность. Concurrency и mutability это взрывоопасная смесь. Иммутабельные типы не будут особо нагружать компилятор, он от этого медленным не станет. Код Go 1.x от введения иммут типов не поломается. Возможность писать всё в мутабельном стиле никуда не исчезнет.
Алексей
а кто-нибудь на haskell пишет большие проекты, типа KDE?
Хаскель - не ООП (вообще). И на нём мало кто пишет.
Daniel
Зачем вы копируете int?
а напиши свой вариант? а то я не понимаю, о чем ты
Eugene
Хаскель - не ООП (вообще). И на нём мало кто пишет.
ну вроде в C++ с иммутабельностью не очень, но ведь на C++ большие проекты пишут?
Daniel
в с++ в иммутабельностью все ок, благодяря ключевому слову const
Алексей
ну вроде в C++ с иммутабельностью не очень, но ведь на C++ большие проекты пишут?
На C++ вообще с безопасностью кода всё очень плохо. Но на нём всё таки пишут большие проекты, хотя это трудно, очень трудно и подвержено багам. Но до недавнего времени конкурентов у крестов особо не было.
Kirill
в C++ нет проблем с shared mutable state?
Везде есть, где проггер — человек-рукожоп
Алексей
Ну сейчас раст вроде как потихонечку развивается.
Daniel
раст как конкурент плюсам, ага...
Алексей
раст как конкурент плюсам, ага...
А других вариантов особо и нет.
Kirill
Eugene
Ну сейчас раст вроде как потихонечку развивается.
C++ существует больше 30 лет, за это время на C++ много либ написано, когда rust может заменить C++?
Daniel
коллега @ruelephant, вы там бенчмарк мой посмотрели? я жду вашего заявления "я был не прав, на новом слайсе быстрее"
Roman
Сначала иммутабельностью балуются, а потом на всякие дженерики переходят, а затем опускаются на самое дно и начинают писать на хаскеле.
ты ещё скажи что нельзя было в Go типизацию завозить, слишком уж сложно код писать.. сделали бы как JavaScript, проверки типов аргументов мы писать в функциях не будем, будем писать для этого табличные тесты и бить по рукам за передачу неверных типов самостоятельно, да)) ибо зачем за это делать ответственным компилятор, Goэто же про быструю компиляцию!
Алексей
C++ существует больше 30 лет, за это время на C++ много либ написано, когда rust может заменить C++?
Заменить - думаю очень нескоро. Но потихоньку вытеснять из новых проектов - вполне возможно. Но да, наследие крестов играет им на руку и языку-новичку тут сложно очень пробиться.
Алексей
Но только следует всегда учитывать, что кресты сложно изучать. А писать на них более-менее безбажный код ещё сложнее.
🏁Александр
но мы то сравнивали СПИСКИ
Алексей
сомнительно, что rust сможет заменить хотя бы C в ближайшие лет 10
Давайте сначала определимся, что вкладывать в слово "заменить".
Yaroslav
в с++ в иммутабельностью все ок, благодяря ключевому слову const
const_cast всегда даст возможность выстрелить в ногу)
Daniel
смотрите у нас есть rust и go. оба языка новые. на go у нас есть несколько больших сложных проектов. на rust у нас есть какой-то фейспалм. мне кажется, уже можно сказать, что rust не выстрелил.
Roman
ну вроде в C++ с иммутабельностью не очень, но ведь на C++ большие проекты пишут?
в C++ всё то что описано в пропосале - имеется и даже в том же виде (const qualifier)
Roman
в C++ нет проблем с shared mutable state?
проблемы есть, но есть и защита от них. А в го защиту пока что не завезли, хотя проблема имеется
Алексей
использовать что-то вместо чего-то?
Использовать где именно? Если мы говорим про новые проекты, то думаю, что вполне можно брать раст (хотя это моё личное не подкреплённое ничем мнение) вместо сишки и даже крестов. Старые проекты конечно же уже не переписать, но в принципе можно линковать rust к сишному и плюсовому коду (хотя не без проблем скорее всего).
Yaroslav
с++ как бы тоже не стоит на месте и развивается, никто не мешает пользоваться современными стандартами в новых проектах и не страдать от безопасности кода
V
c++?
Алексей
c++?
У крестов же слабая типизация.
Yaroslav
шта
Kirill
кто-то из авторов начал размывать точность бенча
Алексей
шта
У крестов слабая статическая типизация как и у сишки.
Kirill
кто-то из авторов начал размывать точность бенча
операторы >/< и >=/<= имеют разную производительность
Roman
C++ существует больше 30 лет, за это время на C++ много либ написано, когда rust может заменить C++?
пока в новом языке можно использовать C/C++ библиотеки - всё окей (*нервно смотрю на Go*)
Kirill
Не уверен, что это важно
мы бенчи пишем болтами меряться или всё-таки точный результат получить?
Roman
Моё сообщение было насквозь ироничным, если что.
сори, тут такой критики столько уже было что мне сложно иронию отличать))
Daniel
Болтами, конечно!
Kirill
нихрена себе ты читер)))
Kirill
смотри
Kirill
Remote0 удаляет все инты меньше 50 или больше 60
Kirill
а ты только с 50 до 60))
Kirill
https://play.golang.org/p/nzc_38WPQjZ
Алексей
пока в новом языке можно использовать C/C++ библиотеки - всё окей (*нервно смотрю на Go*)
Ну либы для крестов пожалуй нигде не заюзать кроме крестов. Вот сишные можно. C++ с обёртками в обычные функции с extern "C" тоже можно.
Kirill
https://play.golang.org/p/nzc_38WPQjZ
играйтес, товарищи, я это имел ввиду
Kirill
с операторами я уже не бегал
Kirill
но я бы поставил все бенчи в одни условия
Kirill
мы же удаляем 1000-10 значений, а не 10 значений
🏁Александр
а что это за efaceToInt?
🏁Александр
лицо попроще нельзя было сделать что ли
🏁Александр
у меня такого не было
Daniel
Remote0 удаляет все инты меньше 50 или больше 60
разве? Remote0 удалает все инты меньше 50 или больше 60, а NewList и NewSlice оставляют все инты не меньше 50 и не больше 60 результат идентичный