Dr. Friedrich
Как пример самого уёбищного интеропа можете посмотреть на purescript
サイトー
Не верю, покажите.
ну вот биндинги под момент например https://github.com/reasonml-community/bs-moment/blob/master/src/MomentRe.re я не берсь за качество говорит, но они занимают даже меньше чем нативные https://github.com/moment/moment/blob/develop/moment.d.ts
Dr. Friedrich
А, ок, это иммутабельные врапперы
Dr. Friedrich
Просто сам momentjs плохо написан, а тут они поправили это, здесь ок
Dr. Friedrich
Пример неудачный в том смысле, что тут как раз авторы враппера своего кода вокруг написали, чтобы исправить ошибку в проектировании библиотеки.
Dr. Friedrich
Ну то есть он не очень показательный.
Vladislav
Сейчас вроде dayjs- смузи
サイトー
проблемы есть с string literal union, потому что если хочешь статических проверок то изволь писать конвертацию из/в DU
サイトー
https://github.com/reasonml-community/bs-fetch/blob/master/src/Fetch.ml
サイトー
Например, я могу хотеть расширить JS-объект (!) своим классом
ты имеешь ввиду на прототип что-то навесить или что-то хитрее?
Dr. Friedrich
ты имеешь ввиду на прототип что-то навесить или что-то хитрее?
var a = function () {}; class Xx1 extends a { } Вот это должно быть валидно.
Dr. Friedrich
Ну то есть у меня вот есть публичный интерфейс с var a: () -> (), а я хочу на этот объект навесить экстенд в языке, который транслируется в JS.
Dr. Friedrich
Это хороший тест на совместимость.
Dr. Friedrich
Во всех языках, которые «хорошо» интероперируются с JS, написать такое можно и это просто. А в тех, кто «плохо» интероперируется, написать такое нельзя без какого-нибудь ущербного враппера над JS-конструкциями (а в случае с extends тебе ещё и враппер придётся транспилить, тоже та ещё веселуха).
Igor
Как можно вообще “хорошо” интеропиться с языком в котором существуют только мутабульеные-словари? Любые попытки покрыть это типами и при этом прозрачным интеропом - генерируется гору костылей и переусложнений тупо для интеропа. Хороший пример этого ужаса - это TypeScript
Aleksandr
чет у меня сомнения что тут не хрень написана
サイトー
Ну то есть у меня вот есть публичный интерфейс с var a: () -> (), а я хочу на этот объект навесить экстенд в языке, который транслируется в JS.
у меня два поинта первый что я бы хотел ослабить свой агрумент: у ризона очень удобный интероп для вызова глобальных вещей и библиотек второй что мне не кажется что наличие интеропа для, так скажем, _интересных_ возможностей языка можно воспринимать как сильный агрумент в пользу такие возможности должны быть, но это не то что используется изо дня в день, поэтому по моему мнению приседания приемлемы
Dr. Friedrich
Я не сомневаюсь, что для реакта в ризоне уж что-нибудь придумали, но как оно реализуется?
サイトー
Ну а если либа хочет, чтобы я от неё наследовался? Тот же react
вот тут мне пока нечем возразить с классами у ризона действительно проблемы из-за интересного эффекта, он траспилится в es5 в котором классов нет поэтому нет и поддержки
サイトー
Я не сомневаюсь, что для реакта в ризоне уж что-нибудь придумали, но как оно реализуется?
там вообще интересно во-первых есть React.createClass (он сейчас в отдельном пакете лежат правда) и вообще эти функциональные вызовы но они выдрали фактори-функцию прямо из реакта и что-то там пооптимиздили https://github.com/reasonml/reason-react/blob/master/src/ReasonReactOptimizedCreateClass.re
Анна
чет у меня сомнения что тут не хрень написана
по-моему немного кони и люди смешались
Dr. Friedrich
На завтра ожидается: Утро: ясно −41 °C ☀️ День: ясно −37 °C ☀️ Вечер: ясно −44 °C ☀️ Ночь: ясно −47 °C ☀️ -47 градусов, нормас!
サイトー
а поводу наследования от либы отличный поинт, спасибо, я поизучаю я просто неверно понял изначальный вопрос
Крылатый
Хотя по цельсию -40к это какая-то нереальная температура.
Крылатый
Она вообще возможна?
Крылатый
Хотя не, это ведь ниже абсолютного нуля...
サイトー
Хотя по цельсию -40к это какая-то нереальная температура.
в якутии школу отменяют только при -50 вроде
サイトー
а, к
サイトー
сорян
Крылатый
Я не школотрон!
Форневертрон!
Ayrat
в якутии школу отменяют только при -50 вроде
сомнительно. при -30 уже начинают отменять на всяких там Северах, но может по-разному везде
Крылатый
Крылатый
Бубка Гоп!
サイトー
сомнительно. при -30 уже начинают отменять на всяких там Северах, но может по-разному везде
вот у нас в ижевске (не якутия ни разу) при -30 отменяли да а жена из якутии, -50, да
サイトー
-30 зимой для них вообще лафа, можно шестую шубу не надевать
Крылатый
Ну, -30 и -50 по разному ощущается везде. Ну и да, если там -30 всю зиму, то это считай всю зиму не учиться...
Ayrat
вот у нас в ижевске (не якутия ни разу) при -30 отменяли да а жена из якутии, -50, да
Я учился за полярным кругом до 11 лет, у нас при -30 начинали отменять с младших классов и по нарастающей. при -40 школы не работали.
Ayrat
хотя школа может и работала, но дети в неё не ходили)
サイトー
главное повод найти
Анна
Крылатый
Снежные бабы лепить! Из сухого снега... так что они держаться и рассыпаются в снежные горки.
サイトー
И все идут на улицу гулять!
ну кстати бывало и такое
Анна
Не ну а для чего ещё отменять школы
Анна
Мама говорит, в Новгороде вчера эвакуировали всех отовсюду по ложной тревоге. И школы тоже 🤔
Ayrat
Говорят, это C++ using namespace std; template<Semiregular T> struct maybe_view : view_interface<maybe_view<T>> { maybe_view() = default; maybe_view(T t) : data_(std::move(t)) { } T const *begin() const noexcept { return data_ ? &*data_ : nullptr; } T const *end() const noexcept { return data_ ? &*data_ + 1 : nullptr; } private: optional<T> data_{}; }; inline constexpr auto for_each = []<Range R, Iterator I = iterator_t<R>, IndirectUnaryInvocable<I> Fun>(R&& r, Fun fun) requires Range<indirect_result_t<Fun, I>> { return std::forward<R>(r) | view::transform(std::move(fun)) | view::join; }; inline constexpr auto yield_if = []<Semiregular T>(bool b, T x) { return b ? maybe_view{std::move(x)} : maybe_view<T>{}; }; int main() { // Define an infinite range of all the // Pythagorean triples: using view::iota; auto triples = for_each(iota(1), [](int z) { return for_each(iota(1, z+1), [=](int x) { return for_each(iota(x, z+1), [=](int y) { return yield_if(x*x + y*y == z*z, make_tuple(x, y, z)); }); }); }); // Display the first 10 triples for(auto triple : triples | view::take(10)) { cout << '(' << get<0>(triple) << ',' << get<1>(triple) << ',' << get<2>(triple) << ')' << '\n'; } }
Анна
Да, можно теперь отстреливать себе ногу в функциональном стиле!
Vasiliy
имхо это наркомания а не c++
Ayrat
синтаксис местами вижу первый раз. это что? return for_each(iota(1, z+1), [=](int x) { а это что??? | view::transform(std::move(fun)) | view::join;
Ayrat
а это мать его что??? []<Semiregular T>(bool b, T x) {
Анна
имхо это наркомания а не c++
одно другому не мешает
サイトー
Крылатый
И вроде просто итерация в компилтайме по туплям (трайплам?)
Ayrat
И вроде просто итерация в компилтайме по туплям (трайплам?)
это вроде как генератор ленивый пифагорских троек
Ayrat
спиздил отсюда http://ericniebler.com/2018/12/05/standard-ranges/
Крылатый
Ааа!
Артем
int f(int x) [[expects audit: x>0]] [[ensures axiom res: res>1]]; void f(int x, int y) [[expects: x>0]] [[expects: y!=0]] [[ensures result: result > x+y]]; скоро в С++ такое еще завезут к 20 году
Ayrat
Но код для меня остался загадкой. Хотя я плюсы читал (пару лет назад) нормально
Ayrat
Шаблонная лямбда
отстал я от жизни походу
Крылатый
отстал я от жизни походу
Ну это только с C++20
Ayrat
Ну это только с C++20
так грядёт же, не отвертишься
Крылатый
Отлично же!
Крылатый
template generic lambda кек
Анна
Схожу на лекцию по C++ сегодня
x
зашёл в чат про джаву - а тут с++
Анна
Заманчиво же 🌚
Анна
я тебе помогу: я научу тебя любить С++
Анна
ты перейдешь в плюсовые разработчики и никогда больше не будешь заниматься этим говном
Артем
Срр скоро полирнут, и Растишка не успеет выстрелить :))