[00:01:11] <ada_ru> (Eugene) https://zx.oberon2.ru/forum/viewtopic.php?f=2&t=415&start=10#p3253
[00:06:19] <ada_ru> (username_is_not_avalaible) отвечает (Максим) на <чем-то напоминает ин…>
Только отчасти. Интерфейсы:
1) Прибиваются гвоздями к объекту (объект должен быть осведомлён о том, какие интерфейсы он реализует);
2) Подразумевают динамическую диспетчеризацию;
3) Просто менее выразительны. Например, интерфейсами нельзя выразить тот факт, что функция принимает два аргумента одного типа, который реализует заданный интерфейс;
4) В большинстве реализаций не дают возможности задавать реализации методов по умолчанию
[00:06:32] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <да, но не оно. из им…>
Мимо. Прям ваще мимо
[00:06:55] <ada_ru> (username_is_not_avalaible) отвечает (Eugene) на <интерфейсы — жалкое …>
Prior art -- это всё-таки Haskell
[00:35:49] <ada_ru> (FROL256) отвечает (Максим) на <Я обновил статейку п…>
Агрегаты контейнеров понарвились
[00:37:28] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <Агрегаты контейнеров…>
Ну вот, больше некомпонуемого ad-hoc синтаксиса :(
[00:40:43] <ada_ru> (FROL256) х. з., синтаксис по-моему особо испортить в данном случае ничего не может
[00:40:55] <ada_ru> (FROL256) ну хотят — пусть добавят, будет более короткая запись для массивов
[00:41:02] <ada_ru> (FROL256) я так иногда в псевдокоде пишу
[00:41:17] <ada_ru> (FROL256) вот в плюсах фигурные скобки-инициализатор меня откровенно бесят
[00:41:34] <ada_ru> (FROL256) вроде массив — а в фигурных скобках
[00:41:38] <ada_ru> (FROL256) wtf
[00:42:24] <ada_ru> (FROL256) А вот это прямо как питон
[00:42:25] <ada_ru> (FROL256) M := [for Key of Keys use Key => Integer'Image (Key)]
[00:43:24] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <M := [for Key of Key…>
Вот я и говорю, лишний синтаксис. Были бы итераторы нормальные -- был бы функционал просто библиотекой
[00:43:48] <ada_ru> (FROL256) хм
[00:44:03] <ada_ru> (FROL256) Это же не Адский путь )
[00:44:21] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <Это же не Адский пут…>
Разве?
[00:44:28] <ada_ru> (FROL256) Мне казалось что да
[00:44:34] <ada_ru> (FROL256) библиотеками всё бедать
[00:44:37] <ada_ru> (FROL256) всё делать
[00:44:41] <ada_ru> (FROL256) это привет С++
[00:44:43] <ada_ru> (FROL256) в чём минус
[00:44:48] <ada_ru> (FROL256) железки растут
[00:44:50] <ada_ru> (FROL256) и меняются
[00:44:52] <ada_ru> (FROL256) очень быстро
[00:45:10] <ada_ru> (FROL256) и языковое средство можно на новой версии компилятора более эффективно реализовать
[00:45:19] <ada_ru> (FROL256) а с библиотеками С++ такая жуть получается
[00:46:12] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <и языковое средство …>
Так не нужно новое языковое средство, нужны оптимизации с широкой применимостью
[00:48:49] <ada_ru> (FROL256) ну вот х. з. .... щас я один пример из жизни расскажу
[00:48:54] <ada_ru> (FROL256) 5 мин
[00:50:20] <ada_ru> (FROL256) вот есть например такая библиотека
[00:50:22] <ada_ru> (FROL256) https://github.com/p12tic/libsimdpp
[00:50:32] <ada_ru> (FROL256) для векторных операций на разных процессорах
[00:50:58] <ada_ru> (FROL256) она построена по любимому страус-трупом методу оптимизации выражений на шаблонах
[00:51:09] <ada_ru> (FROL256) то есть там каждая операция возвращает на векторный тип
[00:51:14] <ada_ru> (FROL256) а некоторый тип expression
[00:51:37] <ada_ru> (FROL256) и дальше компилятор используя специализации для expression должен это оптимизировать
[00:52:24] <ada_ru> (FROL256) так вот на деле это медленное, тупое (потому что невозможно этот код писать) говно (потому что невозможно отлаживать) и ещё не работающее
[00:52:40] <ada_ru> (FROL256) как только выражение становится чуть чуть более сложным чем A + B
[00:53:07] <ada_ru> (FROL256) привет падения и вылеты, а в отладчике там просто такой нереальный стэк что разобраться нет никакой возможности
[00:53:47] <ada_ru> (FROL256) однажды я для себя открыл gcc vector extensions которые поддерживаются самим компилятором и имеют разные реализации для разных процессоров
[00:53:54] <ada_ru> (FROL256) и там всё работает хорошо, быстро и правильно
[00:54:13] <ada_ru> (FROL256) потому что компилятор знает про векторные типы что они на регистре и как их надо оптимизировать
[00:54:54] <ada_ru> (FROL256) так и тут, если есть возможность описать конерктную фичу специальным синтаксисом, это открывает простор для оптимизаций
[00:54:59] <ada_ru> (FROL256) а итераторы маст дай
[00:55:07] <ada_ru> (FROL256) )
[00:58:50] <ada_ru> (FROL256) уже даже в плюсах их предлагают заменять на ranged for
[00:59:08] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <а итераторы маст дай>
В том виде, в котором они в C++ -- соглашусь. Но они там неправильные
[00:59:33] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <уже даже в плюсах их…>
Так он же поверх итераторов работает
[00:59:44] <ada_ru> (FROL256) ну это сейчас так
[01:00:14] <ada_ru> (FROL256) никто не мешает в будущем поменять что-то, хотя конкретно насчёт обычных циклов тут вряд ли стоит )
[01:00:25] <ada_ru> (FROL256) например
[01:00:36] <ada_ru> (FROL256) если у нас процессор с длинным вектором типа AVX512
[01:00:49] <ada_ru> (FROL256) и мы заранее знаем размер массива
[01:01:00] <ada_ru> (FROL256) то компилятор мог бы векторизовтаь цикл
[01:01:08] <ada_ru> (FROL256) если он не содержит зависимостей неправильны
[01:01:11] <ada_ru> (FROL256) а с итераторами
[01:01:15] <ada_ru> (FROL256) ничего нельзя векторизовать
[01:03:22] <ada_ru> (FROL256) да даже если мы и не знаем заранее количество итераций
[01:03:33] <ada_ru> (FROL256) всё-равно можно векторизовать конструкцию типа foreach
[01:08:21] <ada_ru> (I_vlxy_I) отвечает (FROL256) на <вроде массив — а в ф…>
массив в фигурных скобках -- это чисто Сишная тема. не плюсовая. В плюсах там это лишь генерализировали на произвольные классы.
[01:09:00] <ada_ru> (I_vlxy_I) А у Ады массивы вообще по жизни в КРУГЛЫХ скобках. Как и операция индексации.
A(i) -- вот хез это вызов функции или же доступ к элементу массива
[01:09:42] <ada_ru> (FROL256) ну да, это да ))
[01:09:50] <ada_ru> (FROL256) согласен и с первым и со вторым
[01:11:47] <ada_ru> (I_vlxy_I) тяжкое наследие смутного времени когда делались первые шаги 🙂
[01:12:12] <ada_ru> (I_vlxy_I) на клавиатурах то и общий набор символов тогда еще не устоялся
[01:18:42] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <ничего нельзя вектор…>
Использую итераторы, цикл векторизуется, ЧЯДНТ?
https://godbolt.org/z/RG3Ylo
[01:19:21] <ada_ru> (FROL256) не С++
[01:19:26] <ada_ru> (FROL256) :)
[01:19:57] <ada_ru> (username_is_not_avalaible) Взял то, в чём разбираюсь
[01:20:00] <ada_ru> (FROL256) но круто что в расте это работает ак хорошо
[01:20:40] <ada_ru> (FROL256) может и правда стоит на него обратить внимание
[01:20:42] <ada_ru> (I_vlxy_I) автовекторизация обычно хорошо работает в очень примитивных случаях, причем без гарантии
[01:20:59] <ada_ru> (I_vlxy_I) поэтому обычно интринсиками пользуются там, где реально нужна производительность
[01:21:12] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <поэтому обычно интри…>
Или SIMD типами
[01:21:14] <ada_ru> (FROL256) это да, но стоит надеяться на светлое будущее же )
[01:24:26] <ada_ru> (I_vlxy_I) zip в расте делает конкатенацию двух последовательностей?
[01:25:58] <ada_ru> (FROL256) вообще конечно конструкция a.iter_mut().zip(b) супер понятная )
[01:26:12] <ada_ru> (FROL256) почему не просто zip(a,b) как в питоне ....
[01:26:21] <ada_ru> (FROL256) что такое .iter_mut
[01:26:44] <ada_ru> (I_vlxy_I) отвечает (FROL256) на <что такое .iter_mut>
мутатор!
[01:26:55] <ada_ru> (FROL256) да, похое на то ) mutable
[01:27:02] <ada_ru> (FROL256) фу, плюсятина )
[01:28:29] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <zip в расте делает к…>
Сцепляет вместе два итератора, образуя итератор, отдающий пары -- по элементу из каждого итератора
[01:28:40] <ada_ru> (I_vlxy_I) ага. туплы!
[01:28:55] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <почему не просто zip…>
Потому что по мере добавления новых функций это превращается в нечитабельное месиво
[01:29:19] <ada_ru> (username_is_not_avalaible) отвечает (FROL256) на <что такое .iter_mut>
Итератор, возвращающий мутабельные ссылки на элементы слайса
[01:29:39] <ada_ru> (FROL256) звучит страшно )
[01:30:06] <ada_ru> (username_is_not_avalaible) Просто означает, что массив можно менять
[01:30:22] <ada_ru> (FROL256) ну это понятно да
[01:31:20] <ada_ru> (I_vlxy_I) я ж говорю - мутатор
[01:31:43] <ada_ru> (I_vlxy_I) не мытый - ибо из за него код лишается чистоты
[01:32:38] <ada_ru> (FROL256) 😂
[03:35:25] <ada_ru> (I_vlxy_I) by the way: тоже векторизует, как я понимаю: https://godbolt.org/z/CV4d_2
[03:35:46] <ada_ru> (I_vlxy_I) но чтобы добиться такого же поведения в точности как в расте, нужно еще немного мозгом подумать
[03:37:48] <ada_ru> (I_vlxy_I) Чот в мыллисте корифеи как-то загрустили на тему новшеств в Аде 2020...
[11:37:47] <ada_ru> (I_vlxy_I) «Язык потерял свою природную красоту,
зато активно украшается ленточками, колокольчиками и свисточками.»
[11:38:05] <ada_ru> (I_vlxy_I) Вирт про Аду с самого начала это говорил!
[11:40:47] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <«Язык потерял свою п…>
Оберон уродливый
[11:42:05] <ada_ru> (I_vlxy_I) отвечает (username_is_not_avalaible) на <Оберон уродливый>
Зато в нем есть природная красота не прикрытая свисточками и ленточками.
[11:42:56] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <Зато в нем есть прир…>
Какая? Это просто убожество. Даже Паскаль более вменяемый
[11:46:59] <ada_ru> (I_vlxy_I) отвечает (username_is_not_avalaible) на <Какая? Это просто уб…>
Чистота коньцепции же.
[11:47:11] <ada_ru> (I_vlxy_I) А что тебе в нем не нравится?
[11:51:20] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <А что тебе в нем не …>
Как минимум: один целочисленный тип (и тот знаковый), нуллабельные указатели, невозможность создания пользовательского перечисления, необходимость руками создавать vtable
[11:55:41] <ada_ru> (I_vlxy_I) Половина - не правда.
[12:02:59] <ada_ru> (username_is_not_avalaible) Которая?
[12:03:17] <ada_ru> (username_is_not_avalaible) Я читал стандарт Оберона, там действительно всего один целочисленный тип
[12:13:54] <ada_ru> (I_vlxy_I) отвечает (username_is_not_avalaible) на <Как минимум: один це…>
Берём начальный Оберон : целых типов три. Нуллабельные указатели - во всех ЯП. Руками vtable? Дык в Аде даже расширяемых записей на тот момент нету. В Паскале тем более.
С перечислениями да, засада. Но это мелочь.
[12:16:44] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <Берём начальный Обер…>
> Берём начальный Оберон : целых типов три.
Ткни пальцем в стандарт, пожалуйста, а то не вижу.
> Нуллабельные указатели - во всех ЯП.
Во-первых, не во всех, во-вторых, это очень плохо
> Руками vtable? Дык в Аде даже расширяемых записей на тот момент нету. В Паскале тем более.
Фигня в том, что набивание vtable руками подвержено ошибкам и мешает проводить оптимизации
[12:18:31] <ada_ru> (nitrocerber) Чемоданчег жи
[12:18:39] <ada_ru> (nitrocerber) А то и вовсе барсетка
[12:20:13] <ada_ru> (I_vlxy_I) отвечает (username_is_not_avalaible) на <> Берём начальный Об…>
Язык - малая часть проекта Оберон
[12:20:15] <ada_ru> (I_vlxy_I) Он же не язык делал. И делал малыми силами. Язык оптимизирован под проект.
[12:21:11] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <Язык - малая часть п…>
Слабое оправдание. Надёжность проекта и от языка в том числе зависит
[12:22:13] <ada_ru> (I_vlxy_I) И реализуемость. Закопаешься в фичастом языке - провалишь проект.
[12:22:29] <ada_ru> (I_vlxy_I) А тебе ещё железо и ось делать.
[12:22:36] <ada_ru> (kremovtort) цитирует (A64m_qb0)
использование нормальной системы типов или отказ от нее - это вопрос удобства и использования достижений научтехпрогресса - или отказа от них. Я не вижу смысла рассуждать в духе, ну вот если бы от моей работы что-то зависело, я использовал бы электричество, но я не решаю критические вопросы, так что и электричество мне не нужно
[12:24:17] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <И реализуемость. Зак…>
В менее фичастом больше отлаживать будеш
[12:26:43] <ada_ru> (kremovtort) отвечает (I_vlxy_I) на <И реализуемость. Зак…>
Потому что нехрен изобретать язык, если у тебя нет лет 15, чтобы довести его до юзабельного состояния. Хотя, в те времена этот срок был конечно меньше.
[12:38:48] <ada_ru> (t91x0) отвечает (username_is_not_avalaible) на <В менее фичастом бол…>
Между прочим, Вирт-то жив. Можно ему напрямую вопросы задать.
[12:39:29] <ada_ru> (Максим) Никто не любит Аду! А Аду 202х тем более 😕
[12:40:45] <ada_ru> (username_is_not_avalaible) отвечает (t91x0) на <Между прочим, Вирт-т…>
Его не интересуют подобные вопросы
[12:43:21] <ada_ru> (nitrocerber) отвечает (Максим) на <Никто не любит Аду! …>
Было б за что 20ую любить
[12:44:19] <ada_ru> (username_is_not_avalaible) отвечает (nitrocerber) на <Было б за что 20ую л…>
s/20ую/Аду/
[12:44:58] <ada_ru> (nitrocerber) Нет
[12:45:41] <ada_ru> (username_is_not_avalaible) Да
[12:46:14] <ada_ru> (t91x0) Устроили тут джек
[12:46:58] <ada_ru> (username_is_not_avalaible) Как будто что-то плохое
[12:49:04] <ada_ru> (FROL256) отвечает (I_vlxy_I) на <by the way: тоже век…>
Неплохо! )
[12:49:59] <ada_ru> (nitrocerber) Ну не на питорастах же пичать)
[12:50:23] <ada_ru> (kremovtort) на ATS конечно же
[13:02:30] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <Было б за что 20ую л…>
Да вроде она неплохо смотрится. Так то
[13:02:31] <ada_ru> (I_vlxy_I) Но есть ощущение, что комитету не хватает людей и ресурсов. И тщательности.
[13:02:50] <ada_ru> (nitrocerber) Транзакции-то в неё таки впизнули или нет?
[13:05:55] <ada_ru> (Максим) Не видел такого AI
[13:08:02] <ada_ru> (Максим) Прикольное комьюнити у ады. В каком-то другом языке Х добавят циферку к релизу и бегают с флагом "как все классно". А тут наоборот.
[13:08:53] <ada_ru> (Максим) И вот теперь скажи, есть смысл совать статью на хабр?
[13:09:18] <ada_ru> (nitrocerber) Хабр - сборище дрочеров, хабр не нужен
[13:09:37] <ada_ru> (Максим) Только народ пугать такими отзывами бывалых
[13:22:40] <ada_ru> (nitrocerber) Да и потом один хрен в каментах тупо пошутят про название языка, потом спросят ачоонанеумерлаещё, ну и всё тащемта
[13:22:58] <ada_ru> (nitrocerber) Хотя грядущий пресс релиз таки надо будет перевести
[13:24:46] <ada_ru> (Максим) Ты видел пресс релиз gnat community 2018? Я вот нет. Сам придумывал сидел.
[13:38:31] <ada_ru> (I_vlxy_I) BTW: Merry Christmas!
[13:42:40] <ada_ru> (I_vlxy_I) отвечает (Максим) на <Прикольное комьюнити…>
в плюсах местами на Аду похоже в этом плане. То есть значимый процент плюсовиков стенает от нововведений в том плане, что раньшебылолучше, ничегобольшененадо, и вообще, все уже привыкли к кактусу и его полюбили.
[13:43:33] <ada_ru> (I_vlxy_I) Ну, типа за 20 лет выучил с++98, а тут прямо цепочку из c++11, c++14, 17, 20 и уже и 23 грозятся. И это всё учить. И стиль менять. И ваще, новый язык почти. УБИРИТИЭТОФСЙО!
[13:45:18] <ada_ru> (I_vlxy_I) Открываешь свой старый добрый проект, а там такое:
template <int... Is>
struct seq {};
template <int N, int... Is>
struct gen_seq : gen_seq<N - 1, N - 1, Is...> {};
template <int... Is>
struct gen_seq<0, Is...> : seq<Is...> {};
template <typename T, typename F, int... Is>
void for_each(T&& t, F f, seq<Is...>) {
auto l = {(f(std::get<Is>(t)), 0)...};
}
template <typename T, typename F, int... Is>
void for_each_pair(T&& t, F f, seq<Is...>) {
auto l = {(f(std::get<Is>(t), std::get<Is + 1>(t)), 0)...};
}
Никогда такого не было! И ты вроде опытный чел, плюсы знаешь как свои N пальцев, но этот код понять не можешь. И даже распарсить его. Приходится идти вместе с нубами и учить.
[13:46:55] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <Открываешь свой стар…>
Угу, а потом срёт ошибкой при компиляции, когда у T не находится метод get, параметризованный целочисленной константой
[13:49:27] <ada_ru> (I_vlxy_I) да, лучше бы в рантайме падало.
[13:49:40] <ada_ru> (t91x0) отвечает (I_vlxy_I) на <Открываешь свой стар…>
Причём, если бы это писали нормальные люди, то оно бы более походило на SQL, Аду или Кобол, которые более читаемы. Но это писали ковбои
[13:49:42] <ada_ru> (I_vlxy_I) (это, если что, не в хедере всё написано. сугубо приватная штука)
[13:53:26] <ada_ru> (I_vlxy_I) отвечает (username_is_not_avalaible) на <В менее фичастом бол…>
в более фичастом больше отлаживать компилятор будешь
[13:54:17] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <в более фичастом бол…>
Не факт, если компилятор на фичастом написан
[13:54:58] <ada_ru> (I_vlxy_I) отвечает (username_is_not_avalaible) на <Не факт, если компил…>
ну вот возьмем раст. можно ли компилятор раста написать за половину человекогода? под новую архитектуру.
[13:55:14] <ada_ru> (I_vlxy_I) без llvm конечно.
[13:55:16] <ada_ru> (t91x0) О фичастости и отладке компилятора
[13:55:23] <ada_ru> (t91x0) гг, автор mlsub в ходе дебага своего тайпчекера нашел и засабмитил в OCaml примеры которые тайпчекаются и билдаются, а потом крашают либо компилятор где-то далеко, либо вообще получившийся бинарник
(пару примеров по ссылке)
https://caml.inria.fr/mantis/view.php?id=7215
https://github.com/ocaml/ocaml/pull/556#issuecomment-212329783
[13:56:07] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <ну вот возьмем раст.…>
Тот же встречный вопрос касательно Ada
[13:56:15] <ada_ru> (I_vlxy_I) Ада в свое время довольно много полимеров просрала именно из за своей фичастости.
[13:56:47] <ada_ru> (I_vlxy_I) ибо компилятор адекватный долгое время создать не удавалось. слишком крутым и фичастым была Ада-83
[13:57:11] <ada_ru> (t91x0) Ада-83 по сравнению с современными языками выглядит очень компактно.
[13:57:37] <ada_ru> (I_vlxy_I) отвечает (t91x0) на <Ада-83 по сравнению …>
угу. но в то время это был очень сложный и неподъемный язык.
[13:57:59] <ada_ru> (I_vlxy_I) Оберон был - лёгким, но не ультралёгким языком.
[13:59:36] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <Оберон был - лёгким,…>
Убогим
[13:59:38] <ada_ru> (I_vlxy_I) при этом у оберона были свои немыслимые киллер фичи - рефлекшн/интроспекция + сборщик мусора + нативные бинари.
[13:59:53] <ada_ru> (I_vlxy_I) а, ну и при этом горячая загрузка-выгрузка кота
[13:59:57] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <при этом у оберона б…>
Java))))))000)0))0
[14:00:10] <ada_ru> (I_vlxy_I) жаба была потом и у жабы нативных бинарей не было
[14:00:42] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <а, ну и при этом гор…>
Это автоматом означает "прощай девиртуализация методов"
[14:01:06] <ada_ru> (I_vlxy_I) а в жабе, которая вообще интерпретируемой была лет 10, это типа сильно помогало? 😃
[14:01:12] <ada_ru> (I_vlxy_I) жаба то без jit-компайлера была.
[14:01:17] <ada_ru> (t91x0) отвечает (I_vlxy_I) на <угу. но в то время э…>
Как-то это звучит сомнительно. Я понимаю, что там и Хоар высказался, и прочие, но к тому времени же существовали монстры вроде Алгола, PL/1 и ещё что-то вроде было
[14:01:27] <ada_ru> (I_vlxy_I) вообще, какие нафиг методы в Обероне то?
[14:02:17] <ada_ru> (I_vlxy_I) отвечает (t91x0) на <Как-то это звучит со…>
Алгол (не 68) был легким языком довольно. PL/I был, как язык, не шибко сложным. Просто туда в язык зашили все либы, что смогли придумать. Прямо в язык.
[14:03:19] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <вообще, какие нафиг …>
Поля процедурного типа в записях, не?
[14:03:48] <ada_ru> (I_vlxy_I) отвечает (username_is_not_avalaible) на <Поля процедурного ти…>
это довольно странное извращение. То есть Вирт таким, в основном, не занимался и не занимается.
[14:03:52] <ada_ru> (I_vlxy_I) Если его кот глянуть.
[14:04:16] <ada_ru> (I_vlxy_I) иметь копию vtable для каждой переменной — это какой-то оверкилл дикий.
[14:04:30] <ada_ru> (I_vlxy_I) c оверхедом на перевес
[14:07:34] <ada_ru> (I_vlxy_I) а в мыллисте то обсуждение кипит!
[14:07:40] <ada_ru> (t91x0) отвечает (I_vlxy_I) на <иметь копию vtable д…>
Так в rust вроде так сделали. Ну не копию, конечно, копии-то для каждого фактически созданного типа имеются
[14:07:57] <ada_ru> (I_vlxy_I) "За основу языка был принят язык MODULA Хельмута Вирта. Но язык MODULA имел различимые индексные и агрегатные скобки. "
[14:09:09] <ada_ru> (I_vlxy_I) "Язык ADA с самого начала не имел природной красоты и целостности! Он разрабатывался на системах IBM 360/370, американские варианты дисплейных которых не имели квадратных скобок (Не дай Боже кто-то засунет в систему вражеский АЛГОЛО-подобный компилятор!). "
[14:10:01] <ada_ru> (t91x0) Здесь кому-нибудь знакомо имя Дмитрий Евгеньевич?
[14:10:44] <ada_ru> (I_vlxy_I) неа
[14:11:28] <ada_ru> (I_vlxy_I) "Ада была красива своей идеей абстракции. Унификация вызовов функций, индексирования массивов и литералов была существенной и просто логичной частью абстракции математического понятия отображения. Тоже относится и к индексированию указателей на массивы. Никаких квадратных скобок никогда не было нужно потому, что нет никакой разницы, отображение есть отображение, реализации - разные. А реализации в Аде принято скрывать, а не демонстрировать всему свету. Это называется принципом разделения интерфейса и реализации."
[14:11:42] <ada_ru> (I_vlxy_I) Чот я не понимаю как этот принцип согласуется с принципом "всё явно" в Аде
[14:11:46] <ada_ru> (t91x0) В общем, как известно, Ада была создана Жаном Ишбиа. Помимо прочих участников.
[14:11:55] <ada_ru> (t91x0) Жан - француз
[14:12:07] <ada_ru> (t91x0) Алгол тоже делался большей частью в Европе
[14:12:09] <ada_ru> (I_vlxy_I) И с контрактами, например. Ибо контракты вытаскивают наружу то, что было раньше деталями реализации.
[14:12:15] <ada_ru> (t91x0) С участием французов
[14:13:52] <ada_ru> (t91x0) Но как-то ещё никто не раскрывал тему многовековой вражды англичан к французам (которые со временем таки выкинули англичан с материка на их остров), и возможного английского подсирания и загаживания поляны у американцев, чтобы те, не дай бог, не стали более плотно сотрудничать с французами и вообще с Европой.
[14:14:17] <ada_ru> (t91x0) Сотрудничать в том числе и в языках программирования.
[14:14:44] <ada_ru> (I_vlxy_I) Да, мерзкий бельгийский С++ против няшной французской Ады!
[14:14:57] <ada_ru> (t91x0) Си-то в США был придуман
[14:15:02] <ada_ru> (t91x0) Двумя телефонистами
[14:15:31] <ada_ru> (I_vlxy_I) и всё это крутится на финской оси 😊
[14:15:38] <ada_ru> (I_vlxy_I) за американские, да, деньги
[14:17:13] <ada_ru> (t91x0) Я вот как-то раз приехал к людям в квартиру чинить интернет. А жили они в бывшем общежитии некоего завода, который когда-то драгоценные камни обрабатывал ("Кристалл").
На ADSL-модеме должна гореть лампочка, показывающая работающее соединение, установленную связь по собственно DSL с оборудованием провайдера. А у них эта лампочка не горела
[14:17:40] <ada_ru> (t91x0) Я полез звонить в техподдержку Сибирьтелекома. Во время разговора, смотрю - лампочка загорелась
[14:17:50] <ada_ru> (t91x0) Кладу трубку, через некоторое время и лампочка тухнет
[14:18:57] <ada_ru> (t91x0) Я полез смотреть, что там с кабелями. От модема до телефонного ввода в квартиру было несколько спаек-скруток, а в самом начале, возле входной двери, была т.н. "телефонная лапша" - -плоский кабель с двумя жилами по краям.
[14:19:20] <ada_ru> (t91x0) Почему-то этот кабель был погрызен, причём не где-нибудь, а под потолком (летучие мыши погрызли?)
[14:19:28] <ada_ru> (t91x0) Сплиттер у них стоял, был исправен
[14:19:55] <ada_ru> (t91x0) В итоге выяснилось, что господа из Сибирьтелекома подключили ADSL людям, у которых стоял телефонный блокиратор
[14:20:06] <ada_ru> (I_vlxy_I) хм. Гм.
"А никто и не говорит, что повышение уровня абстракции - всегда преимущество.
Преимуществом является возможность создавать и использовать абстракции уровня,
АДЕКВАТНОГО решаемой задаче. Но чем выше уровень абстракций, которые позволяет
создавать язык - тем шире у языка возможности. Ада до сих пор, несмотря на все
свисточки и звоночки, что на нее навешали - лучший язык в этом отношении"
При всём уважении к Сергею, не могу не отметить, что он, скорее всего, не знает возможностей современных ЯП. Например общение показало. что современный с++ он не знает вообще. И мой код, кажется, не понял 😞
[14:20:26] <ada_ru> (t91x0) На одной линии сидело две квартиры. Поднимаешь трубку, блокиратор пробивается, и ADSL-канал начинает работать
[14:20:42] <ada_ru> (t91x0) Это всё, что я хотел сказать о телефонистах и созданном ими языке C
[14:20:58] <ada_ru> (t91x0) (а также SIP, не к ночи будь помянут)
[14:21:53] <ada_ru> (I_vlxy_I) отвечает (t91x0) на <(а также SIP, не к н…>
не надо это упоминать! я это прогал 😞
[14:22:08] <ada_ru> (t91x0) И называть С++ бельгийским не совсем корректно, потому что он создан на основе С, и если уж основа такая, какая есть, то надстройка лучше не станет
[14:25:55] <ada_ru> (I_vlxy_I) ну, если из С++ вычесть Си, то останется довольно много. Настолько много, что Сишники люто не любят плюсы.
[14:52:06] <ada_ru> (I_vlxy_I) "В метро продаются сувениры — старые указатели. Стоят от 1500 до 10000 руб."
[14:52:22] <ada_ru> (t91x0) А умные указатели у них продаются?
[14:52:40] <ada_ru> (I_vlxy_I) не. старые - это видимо сборщик мусора подрабатывает 😊
[15:23:58] <ada_ru> (I_vlxy_I) точнее приторговывает
[16:04:17] <ada_ru> (I_vlxy_I) "While Python is an excellent language loved by many, we believe that transparency and familiarity are the most important factors when choosing a tool as important to your workflow as a package manager. Consequently, we chose to make the implementation languages be as universally accepted as possible: C++ should be used in a C++ package manager for C++ programmers. You should not be required to learn another programming language just to understand your package manager."
One platform! One package manager! One language! One vision!
[16:05:06] <ada_ru> (t91x0) отвечает (I_vlxy_I) на <"While Python is an …>
One purpose https://www.ada-ru.org/files/bot/x1.jpg
[16:13:20] <ada_ru> (Gourytch) камрады, у кого ойфонный телеграм-клиент мобильный есть:
у вас тоже в менюшке "пригласи друзей" показывает у каждого нетелеграммного адресата число пользователей, у которых он в контактах живёт? (у андроидного, судя по всему - так)
[16:20:54] <ada_ru> (Максим) https://modern-sql.com/blog/2017-06/whats-new-in-sql-2016
[16:25:02] <ada_ru> (Максим) Почему в Ада 202х нет JSON?!
[16:25:14] <ada_ru> (Oleg) отвечает (Gourytch) на <камрады, у кого ойфо…>
У меня айфон но я не знаю как друзей приглашать :-)))
[16:25:23] <ada_ru> (Oleg) Скажешь где - посмотрю
[16:26:11] <ada_ru> (t91x0) отвечает (Максим) на <Почему в Ада 202х не…>
Они там что-то привирают. Пишут, что JSON'а в постгресе нет, хотя он есть, но с другим синтаксисом.
[16:26:24] <ada_ru> (Gourytch) у меня не айфон, у меня андроид. там нет в системной менюшке?
[16:26:27] <ada_ru> (Gourytch) Screenshot (25 дек. 2018 г. 16:21:43) https://www.ada-ru.org/files/bot/x2.jpg
[16:26:46] <ada_ru> (Gourytch) (третья снизу на скриншоте)
[16:27:35] <ada_ru> (Oleg) нашел
[16:27:49] <ada_ru> (Oleg) Там типа Вася - 444 друга в телеграмм
[16:27:55] <ada_ru> (Oleg) Ты про это?
[16:27:59] <ada_ru> (Gourytch) отвечает (t91x0) на <Они там что-то приви…>
там честный джсон. просто адресовать поля там хитро
[16:28:22] <ada_ru> (Gourytch) отвечает (Oleg) на <Ты про это?>
ага. значит это тотальная полудеаонимизация =)
[16:28:49] <ada_ru> (Oleg) 😊
[16:31:29] <ada_ru> (nitrocerber) отвечает (I_vlxy_I) на <хм. Гм.
"А никто и…>
Если это тот Сергей, о котором я думаю, то 100% нн знает си++ никакой уащпэ.
Но то показательная разница. Плюсист адский код на вид понять может, а адист что на плюсовый, что на катакану смотрит с одинаковым уровнем понимания. Итого, или адисты тупые, или плюсы нечитабельные. Но то такое.
[16:34:06] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <Если это тот Сергей,…>
Тот, тот 😊
Я согласен, что принцип "всё явно" очень здорово Аде помогает. Понятное дело, что в Аде он выполняется не везде. Но тем не менее.
Код у Ады весьма и весьма читабельный.
Еще плюсам сильно мешает существование препроцессора, от которого приходится защищаться в хедерах (и в header only либах, а дженерик код он весь header only в плюсах). Защита происходит путем использования идентификаторов с минимальной читабельностью, то есть с минимальной вероятностью кто-то в здравом уме так назовет свой макрос.
[16:34:58] <ada_ru> (nitrocerber) И охота ему с вами глотки драть...) не помогает моя психотерапия -_-
[16:35:00] <ada_ru> (I_vlxy_I) поскольку препроцессор, то защищать приходится и реализации функций.
[16:35:30] <ada_ru> (I_vlxy_I) вот вам:
vector(const vector& __x)
: _Base(__x.size(),
_Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()))
{ this->_M_impl._M_finish =
std::__uninitialized_copy_a(__x.begin(), __x.end(),
this->_M_impl._M_start,
_M_get_Tp_allocator());
}
[16:36:00] <ada_ru> (I_vlxy_I) можно заценить читабельность идентификатров в реализации конструктора у стандартного вектора плюсов.
[16:36:15] <ada_ru> (nitrocerber) Икс, о дааа
[16:36:19] <ada_ru> (nitrocerber) Я кончил и закурил
[16:36:39] <ada_ru> (Максим) отвечает (nitrocerber) на <И охота ему с вами г…>
Да он не сильно активно. Вот можешь посмотреть https://www.ada-ru.org/forum/p4257374765_1.html
[16:37:07] <ada_ru> (I_vlxy_I) А поскольку вся либа стандартная такая, то стандартная либа не служит в плюсах одной важной цели - не формирует адекватный кодингстайл у прикладного программера.
Ибо, интуитивно кажется, что стандартная либа должна быть образцом как НАДО писать. Ан нет.
[16:37:21] <ada_ru> (I_vlxy_I) А если на плюсах надо писать ВОТ ТАК, то пойду ка я луче в rust.
[16:37:37] <ada_ru> (I_vlxy_I) Или наGo.
[16:38:30] <ada_ru> (nitrocerber) Не, я для таких обсуждений тупой слишком. Я ток тут относительно уместно могу набрасывать иногда
[16:40:01] <ada_ru> (I_vlxy_I) А если ASIS больше не будет, то чем же Сергей будет заниматься?
[16:45:53] <ada_ru> (Максим) @nitrocerber Там как раз все набрасывают. Как сговорились! Никакой рекламы языку с ними не сделаешь!
[16:46:29] <ada_ru> (I_vlxy_I) да нифига. вроде ж мы там уже договорились, что Ада это монстр и это нормально!
[16:46:39] <ada_ru> (nitrocerber) А чо ты хошь, батяй мой консерватор лютый, он до сиз пор на позапрошлогоднем жпсе сидит. А все остальные про аду тока слышали, а кодить на ней нк кодят
[16:47:01] <ada_ru> (I_vlxy_I) А коль монстр, пара лишних тентаклей ей не повредят!
[16:47:27] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <А чо ты хошь, батяй …>
Дмитрий Казаков явно любит, может и делает. В том числе по работе.
[16:47:53] <ada_ru> (nitrocerber) Хм, мобыть тамошняя аудитория не полностью пересекается с местноф
[16:49:06] <ada_ru> (I_vlxy_I) не полностью
[16:49:11] <ada_ru> (nitrocerber) отвечает (I_vlxy_I) на <А если ASIS больше н…>
Его же сотрут щелчком пальцев. Просто на 20ую его натягивать не станут.
[16:49:22] <ada_ru> (nitrocerber) *же не
[16:49:36] <ada_ru> (I_vlxy_I) а, ну остается саппорт и допиливание?
[16:50:03] <ada_ru> (I_vlxy_I) А Адский кровавый ынтарпрайз на 2020 перейдет наверно только в 2050 году.
[16:50:44] <ada_ru> (nitrocerber) Сиих планов не знаю, а и знал бы не мог сказать
[16:51:11] <ada_ru> (I_vlxy_I) "не могу ни подтвердить ни опровергнуть"? 😊
[16:51:32] <ada_ru> (nitrocerber) И прочея корпорейтли коррект х-ня
[16:52:19] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <"While Python is an …>
> You should not be required to learn another programming language just to understand your package manager.
Так вродк вполне вменяемая хотелка
[16:52:40] <ada_ru> (I_vlxy_I) отвечает (username_is_not_avalaible) на <> You should not be …>
так то да, но вообще то нет.
[16:53:16] <ada_ru> (I_vlxy_I) в последнее время очень часто в проекте юзается и с++ и питон.
[16:53:20] <ada_ru> (I_vlxy_I) просто по факту
[16:53:30] <ada_ru> (I_vlxy_I) (и Ада и Питон 😃 )
[16:53:43] <ada_ru> (I_vlxy_I) adacore это прохавала когда это еще не было мейнстримом! (в GPS)
[16:54:57] <ada_ru> (Максим) 🐕 покусаю
[16:55:10] <ada_ru> (nitrocerber) Значит надо скрестить всех.. Аду, питон.. И раст. Будет питадараст!
Его, правда, можно будет изучать только с 18 лет в рф..
[16:55:50] <ada_ru> (t91x0) "Питурд". Можете погуглить
[16:56:14] <ada_ru> (Максим) И будем питадарастить по настоящему!
[16:56:36] <ada_ru> (I_vlxy_I) будет триАда!
[17:15:18] <ada_ru> (I_vlxy_I) "Unlike most ISO standards, the Ada language definition (known as the Ada Reference Manual or ARM, or sometimes the Language Reference Manual or LRM) is free content."
[17:15:19] <ada_ru> (I_vlxy_I) Вау!
[17:15:21] <ada_ru> (I_vlxy_I) Шок!
[17:19:03] <ada_ru> (Максим) А у меня был шок, когда я узнал, что стандарты продают 😕
[17:25:33] <ada_ru> (Oleg) https://s3.eu-central-1.amazonaws.com/assets-mkdev/posts/covers/000/000/145/original/three-reasons-to-learn-C-in-2018.png?1516997023
[17:25:52] <ada_ru> (Oleg) и шо вам так претит перпроцессор
[17:27:48] <ada_ru> (t91x0) Кривенький да тупенький. Turing tar pit
[17:30:11] <ada_ru> (I_vlxy_I) отвечает (Максим) на <А у меня был шок, ко…>
у меня он был давно. я привык уже. хорошо если драфты свободно доступны.
[17:30:12] <ada_ru> (I_vlxy_I) обычно и их нету (не для ЯП)
[18:22:29] <ada_ru> (I_vlxy_I) одна из самых мерзких штук в плюсах, доставшаяся им от сей - транзитивность инклюдов :-/ вассал моего вассала мой вассал. увы.
[18:22:39] <ada_ru> (I_vlxy_I) но ничего, скоро это пофиксят.
[18:24:20] <ada_ru> (I_vlxy_I) эта транзитивность порождает ненависть и рознь среди разработчиков.
[18:24:27] <ada_ru> (I_vlxy_I) разжигает
[18:47:19] <ada_ru> (I_vlxy_I) а главное, особо и не придерешься к программеру, который явным образом не заинклюдил хедер сущности из которого юзает. он заинклюдил что-то другое, что через 100500 зависимостей инклюдит то, что ему надо. и всё. формально всё работает.
[18:47:22] <ada_ru> (I_vlxy_I) какое-то время.
[18:49:26] <ada_ru> (I_vlxy_I) а потом настает час Ч и этот программер дергает нечто, что требует не только хедера. и всё. линкер ломается.
либо, что еще смешнее, появляются неявные циклические зависимости.
[18:49:37] <ada_ru> (I_vlxy_I) которые тихо спят до поры до времени
[18:50:23] <ada_ru> (I_vlxy_I) они незаметно накапливаются в проекте и ждут своего часа.
[18:53:59] <ada_ru> (username_is_not_avalaible) отвечает (t91x0) на <Кривенький да тупень…>
Он даже не полон по Тьюрингу
[18:54:30] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <а потом настает час …>
Include guard!
[18:54:42] <ada_ru> (I_vlxy_I) чаво?
[18:55:08] <ada_ru> (I_vlxy_I) инклюдный гвард всего лишь помогает дважды не заинклюдить хедер
[18:55:13] <ada_ru> (I_vlxy_I) это вообще не про то
[18:57:43] <ada_ru> (I_vlxy_I) тут поможет только насильственное интенсивное юзание неймспейсов + скрипт/checker который чекает наличие явных инклюдов для каждой сущности.
[18:57:53] <ada_ru> (I_vlxy_I) и бьет по рукам если инклюда нету
[18:59:20] <ada_ru> (Oleg) Вот открыл на плюсах римерчег....
[18:59:23] <ada_ru> (Oleg) и сразу....
[18:59:54] <ada_ru> (Oleg) #ifdef #define и еще 100500 таких кусков
[18:59:57] <ada_ru> (Oleg) Эх
[19:00:14] <ada_ru> (I_vlxy_I) это само по себе не так уж и плохо.
[19:00:40] <ada_ru> (I_vlxy_I) а вот транзитивность инклюдов - боль в моя задница
[19:01:13] <ada_ru> (I_vlxy_I) ибо между частями проекта в итоге прорастают невидимые и неучтенные связи да зависимости.
[19:01:56] <ada_ru> (I_vlxy_I) даже в небольшом проекте в примерно лям строк кота.
[19:34:20] <ada_ru> (nitrocerber) Судя по описанию это ад и израиль. "Я тебя слинковала из чего получилось", перефразмруя известную песню..
[19:36:43] <ada_ru> (I_vlxy_I) да линкер в плюсах ваще не в курсе о бурной жизни хедеров
[19:37:21] <ada_ru> (I_vlxy_I) хедеры отдельно, линковка отдельно. и их зависимости. иногда сучность из хедера требует еще и каких-то телодвижений от линкера. а оне не знает про это ничего.
[19:37:22] <ada_ru> (I_vlxy_I) и привет.
[19:39:29] <ada_ru> (I_vlxy_I) этого (почти) не видно пока ты один пишешь под одну платформу. когда начинаешь пользоваться разными компиляторами, что-то начинаешь подозревать.
а когда попадаешь в проект где пишет МНОГО людей и проект плюс-минус реальных размеров и этот аспект никогда никто не лечил...
[19:41:04] <ada_ru> (Gourytch) всё это зло от CPP (C Preprocessor)
[19:41:47] <ada_ru> (Gourytch) и жуткопрограммирование на макросах - из него.
[19:49:00] <ada_ru> (I_vlxy_I) есть такое, да.. в этом плане в Аде всё много лучше. причем давно. всегда!
[19:49:03] <ada_ru> (I_vlxy_I) аж завидно 😊
[19:49:25] <ada_ru> (I_vlxy_I) проявляется именно на проектах осмысленного размера с достаточным колличеством разработчиков.
[19:49:42] <ada_ru> (I_vlxy_I) разной квалификации и разноцветными тараканами в головах
[19:59:01] <ada_ru> (Eugene) отвечает (I_vlxy_I) на <на клавиатурах то и …>
думаю, это было не поэтому, а потому что массив — это фактически функция, отображающая индекс на элемент массива, так что теоретически нет приципиальной разницы между массивом и функцийе, а раз так, то почему бы не использовать одинаковый синтаксис в виде () ?
[19:59:49] <ada_ru> (I_vlxy_I) обоснование и глубокий смысл можно найти в любом решении, ага 😊
[20:08:59] <ada_ru> (Eugene) отвечает (I_vlxy_I) на <"Ада была красива св…>
во, +1!!!
[20:09:29] <ada_ru> (I_vlxy_I) ага. угу. но нет. с явностью проблемы
[20:10:59] <ada_ru> (Eugene) отвечает (I_vlxy_I) на <и всё это крутится н…>
финляндия же — отколовшийся кусок Российской Империи! даёшь её назад с Аляской!!!
[20:16:03] <ada_ru> (I_vlxy_I) ага. а мы - отколовшийся кусок Монгольской Империи.
[20:16:24] <ada_ru> (Eugene) отвечает (I_vlxy_I) на <ага. а мы - отколовш…>
да это миф, не было никакой орды
[20:16:32] <ada_ru> (I_vlxy_I) 😃
[20:16:40] <ada_ru> (I_vlxy_I) ага. конечно. обязательно.
[20:17:00] <ada_ru> (Eugene) всё что было пятьсот лет назад и раньше — недостоверно
[20:18:53] <ada_ru> (I_vlxy_I) само наличие такого крупного явление, масштаба континента, определить возможно.
[20:19:11] <ada_ru> (coopht) картинка https://www.ada-ru.org/files/bot/x3.jpg
[20:19:56] <ada_ru> (Eugene) отвечает (I_vlxy_I) на <само наличие такого …>
своременные монголы с недоумением слушают сказки про какую-то там древнюю монгольскую империю, нет у них таких сведений исторических
[20:23:08] <ada_ru> (Eugene) даже великую китайскую стену и то европейцы строили, для обороны от юговосточных дикарей — бойницы на юг смотрят, а не на север
[20:27:23] <ada_ru> (FROL256) а я всегда думал что китайцы её строили чтобы у них свои из страны не убегали )
[20:27:32] <ada_ru> (I_vlxy_I) отвечает (Eugene) на <даже великую китайск…>
это не правда
[20:27:55] <ada_ru> (Eugene) отвечает (I_vlxy_I) на <это не правда>
а правду никто не знает )))
[20:28:10] <ada_ru> (I_vlxy_I) отвечает (Eugene) на <а правду никто не зн…>
да блин. съезди да посмотри.
[20:28:24] <ada_ru> (I_vlxy_I) это не то шило, что можно в мешке утаить. да и зачем?
[22:23:36] <ada_ru> (nitrocerber) Всем фоменко в этом чати
[22:23:56] <ada_ru> (nitrocerber) Жду с нетерпением, когда ж уже птааг и ящерики пойдут
[22:55:35] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <Всем фоменко в этом …>
https://vokrug.tv/pic/person/0/d/b/b/0dbb6f0cbdac9cb794a74c1f9b479573.jpg
[22:55:36] <ada_ru> (I_vlxy_I) Ога
[23:04:52] <ada_ru> (nitrocerber) Другой Фоменко. Но этот тож сойдёт)
[23:06:51] <ada_ru> (I_vlxy_I) шо этот шоумен, что тот 🙂
[23:09:46] <ada_ru> (I_vlxy_I) хотя мы вот тут стебёмся, а может этим мы задеваем чувства верющих? (в теории фоменко)
как-то не толерантно выходит, с нарушением всех CoC!
[23:10:31] <ada_ru> (Eugene) у фоменко была теория, что его спорткары Марусся покорят мир, но увы, не произошло этого
[23:11:40] <ada_ru> (I_vlxy_I) вроде я видел такой один. в музее
[23:16:44] <ada_ru> (I_vlxy_I) Да, маруся B1.
[23:17:01] <ada_ru> (I_vlxy_I) хороший музей, советую сходить
[23:17:11] <ada_ru> (I_vlxy_I) (в default city музей ретроавтомобилей)
[23:17:25] <ada_ru> (I_vlxy_I) https://www.mtmuseum.ru/
[23:17:48] <ada_ru> (username_is_not_avalaible) отвечает (I_vlxy_I) на <(в default city музе…>
В котором из двух?
[23:17:58] <ada_ru> (I_vlxy_I) я ссыль кинул
[23:24:52] <ada_ru> (nitrocerber) На рогожке который? Оч годное место
[23:26:17] <ada_ru> (I_vlxy_I) Ага