О недостатках Rust на сегодняшний день
Doge Shibu:
Такая возможность была бы полезна практически везде.
Простейший пример - мы хотим из метода трейта возвращать итератор (абсолютно разумная и естественная идея):
Ок, пишем реализацию:
И теперь выходит, что мы не можем назвать тип, который должен идти в
У нас остаются два варианта - бокс
И вот кажется, что раз уж разрабы выбрали такой дизайн для лямбд, то возможность как-то дать название типу замыкания должна была быть с самого начала.
И, кстати, вот эта проблема - это то из-за чего я почти во всех своих проектах сижу на найтли и считаю, что раст без найтли - не сказать, чтобы сильно удобен.
Doge Shibu:
Такая возможность была бы полезна практически везде.
Простейший пример - мы хотим из метода трейта возвращать итератор (абсолютно разумная и естественная идея):
trait MyTrait<'a> {
type MyIter: Iterator<Item = &'a MyType>;
fn get_iter(&'a self) -> Self::MyIter;
}
Ок, пишем реализацию:
impl<'a> MyTrait<'a> for MyTraitImpl {
type MyIter = ???;
fn get_iter(&'a self) -> Self::MyIter {
let some_value = self.some_method(...);
self.something.iter().map(|x| some_value.wtf(x))
}
}
И теперь выходит, что мы не можем назвать тип, который должен идти в
MyIter
, из-за того, что у нас там будет Map<???, ...>
, в котором надо будет указать имя типа замыкания, чего мы сделать не сможем. И соответственно так реализовать трейт тоже не сможем. У нас остаются два варианта - бокс
+ dyn
, что в случае итераторов смешно, или переходить на найтли и давать имя MyIter
через type MyIter = impl Iterator<...>;
И вот кажется, что раз уж разрабы выбрали такой дизайн для лямбд, то возможность как-то дать название типу замыкания должна была быть с самого начала.
И, кстати, вот эта проблема - это то из-за чего я почти во всех своих проектах сижу на найтли и считаю, что раст без найтли - не сказать, чтобы сильно удобен.
Возможно, боян. Представляю, через лет 10 будут искать Senior Functional Excel Developer.
https://habr.com/ru/news/t/540308/
https://habr.com/ru/news/t/540308/
Хабр
С добавлением лямбда-функций язык программирования Excel стал полным по Тьюрингу
Microsoft теперь называет электронные таблицы Excel языком программирования, а с добавлением лямбд он стал полным по Тьюрингу . Язык программирования считается полным по Тьюрингу, если на нём можно...
Одна из моих любимых песен с тех пор, как её один супермозг визуализировал на 64 ядрах (128 аппаратных потоках) процессора AMD Threadripper 3990x.👇
Forwarded from Блог*
YouTube
Bad Apple!! but it's made of YouTube captions
Recommended: Mac, Android, Linux
Windows is fine, but spaces look off because the font has a wrong width for braille space.
iPhone/iPad app can only play captions at about 5 fps, but it works with browser version of YouTube.
Original: https://youtu.be/FtutLA63Cp8…
Windows is fine, but spaces look off because the font has a wrong width for braille space.
iPhone/iPad app can only play captions at about 5 fps, but it works with browser version of YouTube.
Original: https://youtu.be/FtutLA63Cp8…
Дженерики для го приняли тоже. Хороший пример фичи системы типов, которую нужно планировать заранее с самого начала, иначе вкорячивать придётся не самым красивым образом.
С другой стороны отличная демонстрация, что "вода камень точит".
С другой стороны отличная демонстрация, что "вода камень точит".
GitHub
spec: add generic programming using type parameters · Issue #43651 · golang/go
We propose adding support for type parameters to Go. This will change the Go language to support a form of generic programming. A detailed proposal document has been published, with input from many...
Гугл спонсирует переписывание разных штук на Rust. Представьте, сначала тулзы, потом и сам POSIX, а потом появится и safe-слой для сисколлов :-P (ага, размечтался..)
https://security.googleblog.com/2021/02/mitigating-memory-safety-issues-in-open.html
https://security.googleblog.com/2021/02/mitigating-memory-safety-issues-in-open.html
Google Online Security Blog
Mitigating Memory Safety Issues in Open Source Software
Posted by Dan Lorenc, Infrastructure Security Team Memory-safety vulnerabilities have dominated the security field for years and often lead ...
Модель трёх тел хоть и сложна и аналитически не решается, но её всё равно нужно усложнить ещё дальше, чтобы она стала реалистичной. Например, добавить радиус планеты в параметры и столкновения между планетами, с образованием отлетающих кусков, которые становятся новыми планетами. Есть теория, что наша Луна — это отколовшийся когда-то кусок Земли в результате столкновения с каким-то шальным астероидом.
Forwarded from Random three body problem
This media is not supported in your browser
VIEW IN TELEGRAM
Initial states:
m: 0.950 x: 0.841 y: -2.945 vx: 0.055 vy: 0.867
m: 7.171 x: -1.359 y: 2.404 vx: 0.573 vy: -0.282
m: 1.920 x: -2.252 y: -4.907 vx: -0.063 vy: 0.047
Interest-ness score: 61
m: 0.950 x: 0.841 y: -2.945 vx: 0.055 vy: 0.867
m: 7.171 x: -1.359 y: 2.404 vx: 0.573 vy: -0.282
m: 1.920 x: -2.252 y: -4.907 vx: -0.063 vy: 0.047
Interest-ness score: 61
https://www.opennet.ru/opennews/art.shtml?num=54516
Критическая ошибка в Chrome, позволяющая обойти все уровни защиты браузера и выполнить код в системе, за пределами sandbox-окружения. ...она вызвана обращением к уже освобождённому блоку памяти
Очень специфическая проблема, редчайший случай в софте на C++🤔
Критическая ошибка в Chrome, позволяющая обойти все уровни защиты браузера и выполнить код в системе, за пределами sandbox-окружения. ...она вызвана обращением к уже освобождённому блоку памяти
Очень специфическая проблема, редчайший случай в софте на C++🤔
www.opennet.ru
Обновление Chrome 88.0.4324.146 с устранением критической уязвимости
Опубликовано обновление браузера Chrome 88.0.4324.146 в котором устранена уязвимость, имеющая статус критической проблемы, позволяющей обойти все уровни защиты браузера и выполнить код в системе, за пределами sandbox-окружения. Детали об уязвимости (CVE-2021…
Одно из самых интересных траекторий планет задачи трёх тел, маленькую планету колбасит просто!
Forwarded from Random three body problem
This media is not supported in your browser
VIEW IN TELEGRAM
Initial states:
m: 8.824 x: 2.963 y: -3.744 vx: 0.181 vy: 0.671
m: 0.105 x: 5.368 y: 6.131 vx: -0.438 vy: -0.021
m: 5.209 x: -3.997 y: 4.265 vx: 0.002 vy: 0.486
Interest-ness score: 73
m: 8.824 x: 2.963 y: -3.744 vx: 0.181 vy: 0.671
m: 0.105 x: 5.368 y: 6.131 vx: -0.438 vy: -0.021
m: 5.209 x: -3.997 y: 4.265 vx: 0.002 vy: 0.486
Interest-ness score: 73
Оставляю для себя потом прочитать, довольно важная тема оптимизации программ на Rust в одном единственном посте. Старый пост Achieving warp speed with Rust, 2017-го аж года, но при этом вроде бы актуальный. Единственное но, разные штуки, вроде
test::black_hole
пока доступны только в nightly и для них нужно включать #![feature(test)]
.Gist
Rust Optimization.md
GitHub Gist: instantly share code, notes, and snippets.
Навеяно постом Ильи
https://t.iss.one/optozorax_dev/298
У меня есть история из детства. Когда я только учился программировать (я на самом деле до сих пор не умею😭), я решил сделать компьютерный аналог игры в 1000 с пятью кубиками, игральными костьми то есть.
Особенность этой игры в том, что после того, как были сгенерировано 5 случайных чисел, нужно было этот массив проверить на то, содержится ли там 3, 4, 5 одинаковых числа и если да, выяснить, что это за числа, кроме этого есть ещё комбинации
Если попытаться вычислить вхождение каждой комбинации в лоб получая на вход массив чисел, то это порождает необходимость в переборе всех комбинаций троек, потом четвёрок, кучи проверок и когда я тогда попытался продавить это решение, оно было кошмарным и я утонул в багах.
И однажды мне неожиданно пришла простая мысль: давайте сделаем массив длины 6,
Прежние мои попытки я с радостью удалил и переписал проверку паттернов (и соответственно подсчёт очков). Я был так воодушевлён, что решил было сделать алгоритм игры, то есть бота, чтобы мне поиграть против компьютера. Увы, такого рода задачи уже были мне не по зубам вплоть до универа, когда я начал грызть "Программирование игр" Адельсона-Вельского и компании.
https://t.iss.one/optozorax_dev/298
У меня есть история из детства. Когда я только учился программировать (я на самом деле до сих пор не умею😭), я решил сделать компьютерный аналог игры в 1000 с пятью кубиками, игральными костьми то есть.
Особенность этой игры в том, что после того, как были сгенерировано 5 случайных чисел, нужно было этот массив проверить на то, содержится ли там 3, 4, 5 одинаковых числа и если да, выяснить, что это за числа, кроме этого есть ещё комбинации
1,2,3,4,5
и 2,3,4,5,6
.Если попытаться вычислить вхождение каждой комбинации в лоб получая на вход массив чисел, то это порождает необходимость в переборе всех комбинаций троек, потом четвёрок, кучи проверок и когда я тогда попытался продавить это решение, оно было кошмарным и я утонул в багах.
И однажды мне неожиданно пришла простая мысль: давайте сделаем массив длины 6,
s = [s1, s2, s3, s4, s5, s6]
и в нём будем накапливать количество выпавших на текущем ходу единиц, двоек и так далее шестёрок. Этот препроцессинг сделал проверку условий элементарным, скажем, "выпало ли 4 единицы" нам нужно проверить выполнено ли s1 == 4
.Прежние мои попытки я с радостью удалил и переписал проверку паттернов (и соответственно подсчёт очков). Я был так воодушевлён, что решил было сделать алгоритм игры, то есть бота, чтобы мне поиграть против компьютера. Увы, такого рода задачи уже были мне не по зубам вплоть до универа, когда я начал грызть "Программирование игр" Адельсона-Вельского и компании.
Telegram
dev optozorax
Как известно, я решил задачу "что будет если поместить портал в портал". Я написал программу, которая проводит вычисление этого, и срендерил результат.
По этому поводу я опубликовал маленькое видео на ютубе, а затем запостил это видео на реддите, и оно там…
По этому поводу я опубликовал маленькое видео на ютубе, а затем запостил это видео на реддите, и оно там…