[04:41:37] <_valexey_> What do you think about SPARK language? (some sort of ada subset)
[12:02:54] <Kemet> Спарк такое же уг как и фулл ада
[12:35:59] <_valexey_> M
[12:47:43] <_valexey_> Kemet: а чем ада и спарк УГ?
[16:54:19] <Kemet> _valexey_, Избыточная сложность и неоднозначный синтакс
[16:57:32] <valexey> syntax is ok. But what about SPARK special things? About reliability and so on.
[17:21:45] <vlad2> А в чем, собственно, проблема?
[17:21:47] <vlad2> http://forum.oberoncore.ru/viewtopic.php?p=95813#p95813
[17:22:20] <vlad2> Как часто нужно считать длину строки в буквах?
[17:22:26] <valexey> I don't understand his problem.
[17:22:53] <valexey> Especially about charcode order.
[17:24:28] <vlad2> У меня тут жуткая смесь utf8/utf16/utf32 - но вот ни разу не нужна была длина строки в буквах. Могу представить, что оно нужно для рисования строки - но рисует все равно API операционки...
[17:26:20] <valexey> For your custom rich text editor/IDE it will be useful.
[17:26:51] <vlad2> При том, что у нас рисование текста сделано довольно низкоуровнево...
[17:28:36] <vlad2> Ну да, utf8 перегоняется в std::wstring (который разный на Mac/Win) - а дальше в терминах API wchar_t это отдельный символ. Опять надуманные проблемы...
[17:29:49] <vlad2> Конкретно rich text у нас нет, но просто текст редактиоруется/отображается с вычислением позиции каждого символа.
[17:30:23] <vlad2> Как ни странно это работает _быстрее_ чем через высокоуровневое API на Win/Mac.
[17:32:26] <vlad2> Сортировка - это вообще остапа понесло :) Чем-то Губанова напомнило.
[18:39:16] <_valexey_> vlad2: да, у этого товарища тараканы в голове как в фильме man in black :-)
[18:59:41] <TRUE> а у кого там тараканы были?
[19:00:52] <TRUE> но тогда становится, понятно, почему 2H Company эту тему с тараканами так обсосоали.
[19:43:49] <valexey> TRUE: prospero78
[19:44:12] <TRUE> а в фильме?
[19:44:27] <TRUE> men in black
[19:44:34] <TRUE> ты же про этот фильм?
[19:46:14] <valexey> http://vignette3.wikia.nocookie.net/men-in-black/images/6/69/Edgar-human_SS_01.jpg/revision/latest?cb=20120521120404
[19:46:20] <valexey> :-)
[19:48:00] <valexey> "The bug arrives at the site"
[19:48:01] <valexey> :-D
[19:48:41] <valexey> "After investigating the crash landing at the farm, K concludes that Edgar's skin was taken by a "bug", a species of aggressive cockroach-like aliens."
[19:50:27] <valexey> https://en.wikipedia.org/wiki/Men_in_Black_(film)
[19:53:42] <valexey> "Никотиновая зависимость хуже несчастной любви не только потому, что более физиологична, но еще и потому, что невозможно застраховаться от регулярных встреч с теми, кто упоенно занимается любовью с предметом твоей страсти непосредственно у тебя на глазах."
[19:53:43] <valexey> :-D
[20:00:03] <Kemet> в общем случае wchar это не отдельный "символ", даже на утф32 нужно проводить нормализацию, гужно анализировать каждую позиция, - не возможно просто обратиться к символу по индексу, ибо всякие умляуты и тп
[20:01:04] <Kemet> в целом да, юникод придумали с большого бодуна
[20:02:15] <Kemet> valexey: синтаксис плохой
[20:02:53] <Kemet> перегруженный всяким шлаком в одних местах, и недостаточно выразителен в других
[20:03:16] <Kemet> я сейчас не помню, давно читал статью от самих адофанов
[20:03:18] <valexey> example plz
[20:07:43] <Kemet> с другой стороны, средства, повышающие безопасность и надежность на уровне языка, всегда вносят некоторую дополнительную сложность, не зависимо от языка, те самые, несколько десятков ключевых слов, которые никак не могут уместиться в мозгу отдельных представителей ручччкоязычного сообщества любителей Оберона. При этом у импортных оберонщиков прекрасно всё в мозгу умещается. вот же парадокс
[20:08:26] <valexey> :-D
[20:10:05] <Kemet> одноко, я уверен, что задачу повышения надежности и безопасности можно решить перенеся часть с языкового уровня на уровень компилятора, т.е. стандартизировать и оформить соглашение более жестко
[20:10:54] <Kemet> все эти -  можно так, а можно вот так, а если очень хочется , то даже так, ничего хорошего не дают
[20:12:00] <valexey> yep. And ada compiler has it.
[20:12:46] <valexey> There is default codingstyle constrains set.
[20:16:42] <Kemet> это не исключает из языка и компилятора избыточную сложность
[20:19:22] <valexey> this complexity is ok.
[20:19:37] <valexey> For such kind of language.
[20:20:24] <valexey> For pocket language such complexity is too big. I'm agree.
[20:22:27] <Kemet> тут ведь даже если из цпп выдрать всю хрень и рситавить только минимум - необходимое и выверенное подмножество, то вполне удобная штука получится. но кому оно нужна
[20:22:52] <valexey> D? Rust?
[20:23:12] <Kemet> уж лучше с++-кикро ))
[20:23:23] <valexey> ok may be even Java? ;-)
[20:23:51] <valexey> As I know there is miniCpp by Stepanov. In his book.
[20:23:57] <Kemet> в Д тоже началось фичевание
[20:25:49] <Kemet> у раста какойто вырвиглазный ситаксис, да и некоторые концепции требуют переосмысления. в целом, порог вхождения достаточно высок
[20:26:14] <valexey> C++ + Ocaml = Rust :-)
[20:27:12] <valexey> Anyway I suggest that Ada has the best module system today.
[20:27:36] <Kemet> ну я смотрел на окамл - в общем он мне понравился и я смог бы на нем программировать, если бы изучил, конечно. но он мне ненужен сейчас, может в будущем будет время
[20:27:38] <valexey> Rust has ugly module system. And swift has ugliest module system.
[20:28:53] <kemiisto> >> valexey: As I know there is miniCpp by Stepanov. In his book.
[20:28:53] <Kemet> а что в аде такого с модулями?
[20:29:06] <kemiisto> в книгах то и Обероны есть
[20:29:11] <kemiisto> :-D
[20:29:18] <kemiisto> Ку!
[20:30:02] <kemiisto> Kemet: вопрос не по адресу! Он в модулях не разбираетс! :-D
[20:30:12] <valexey> kemiisto: yo!
[20:30:20] <kemiisto> ему на Оборонкоре пытались объяснить, что к чему
[20:30:23] <kemiisto> тщетно!
[20:30:28] <kemiisto> :P
[20:30:54] <valexey> Kemet: good separation between specification and implementation.
[20:31:22] <kemiisto> чем оно лучше, чем в M-2/3
[20:31:25] <kemiisto> ?
[20:31:43] <valexey> kemiisto: more information in specification.
[20:31:57] <valexey> + subpackages
[20:32:16] <kemiisto> в модуле есть вроде submodules
[20:32:20] <kemiisto> не?
[20:32:38] <valexey> specification example:
[20:32:41] <valexey> procedure Increment (X : in out Counter_Type)
 with Global => null,
      Depends => (X => X);
[20:32:42] <kemiisto> но это не то, да
[20:33:05] <kemiisto> я вспонил, что такое subpackages
[20:34:13] <kemiisto> ну понятно
[20:34:27] <kemiisto> а теперь ещё предусловия можно в спеку кидать
[20:34:36] <Kemet> субпекаджи не нужны, а такую спецификацию да, полезно
[20:35:03] <kemiisto> сабпакеджи нужны
[20:35:13] <valexey> kemiisto: It is compile-time verification system. Not runtime.
[20:35:19] <kemiisto> если язык нацелен на разработчиков библиотек
[20:35:47] <kemiisto> valexey: некоторые предусловия тоже можно проверять в компайл-тайм
[20:35:57] <Kemet> не нужны - это решается внеязыковыми средствами
[20:36:00] <valexey> yep.
[20:36:07] <kemiisto> то что сейчас всё проверяется в ран-тайм - деталь реализации
[20:36:35] <valexey> in ada-spark - it is checked in compile time
[20:36:37] <kemiisto> Kemet: и каждый будет решать по своему
[20:36:45] <kemiisto> зоопарк несовместимых решений
[20:36:55] <kemiisto> Абирон-вей
[20:37:13] <kemiisto> за спарк не скажу
[20:37:29] <kemiisto> ада слишком большой язык
[20:37:33] <kemiisto> как и плюсы
[20:37:36] <kemiisto> говна много
[20:37:53] <kemiisto> у С++ есть причина держать говно - обратная совместимость
[20:37:57] <kemiisto> а вот у Ады...
[20:38:06] <kemiisto> могли бы и повыкидывать
[20:38:12] <valexey> SPARK guaranties that there is no runtime errors (exceptions, aborts, asserts and so on).
[20:40:15] <kemiisto> ада странная какая-то
[20:40:21] <kemiisto> то-ли вообще
[20:40:29] <kemiisto> то-ли только после плюсов
[20:40:45] <kemiisto> :-D
[20:42:57] <kemiisto> и ещё как непрофессиональный программист скажу
[20:43:18] <kemiisto> около 8 лет назад, когда я начал интересоваться программированием
[20:43:25] <kemiisto> С++ был ужасен
[20:43:37] <kemiisto> и я видел преимущества в Оберонах
[20:43:54] <kemiisto> но время прошло
[20:44:04] <kemiisto> и С++ стал действительно лучше
[20:44:32] <valexey> backward compatibabilyty is very important for ada. Because there are tons of 30-years old military and aerospace software.
[20:44:49] <kemiisto> да я понимаю
[20:45:08] <kemiisto> фортран тоже убог и крупноват по тем же причинам
[20:45:10] <valexey> Big customers want suck compatibability.
[20:45:24] <kemiisto> suck :-D
[20:45:31] <valexey> *such
[20:45:34] <valexey> ups...
[20:45:36] <valexey> :-)
[20:45:36] <kemiisto> вот уж точно по Фрейду описочка
[20:46:26] <kemiisto> зато Вирт развлекается уже который десяток
[20:46:39] <kemiisto> то этот цикл добавить, то тот тип данных уберёт
[20:46:54] <kemiisto> и ещё им не нравиться, что оберно не популярен
[20:47:06] <kemiisto> а взлетела бы модула-2, скажем, как следует
[20:47:16] <kemiisto> и обероно вообще бы не было
[20:47:22] <kemiisto> :-D
[20:47:46] <kemiisto> самому бы Вирту пришлось модулу-3 делать
[20:47:46] <valexey> I have one complain about Ada - in C++ you have tools to build libs and different abstractions. One root - many leafs. In Ada there are tons of roots with some leafs. Ada language has many features that sould be implemented as a library.
[20:47:58] <valexey> And you can't create such library in Ada.
[20:47:59] <kemiisto> да ещё и обратно-совместимую со второй
[20:48:45] <kemiisto> чёт не распарсил про Аду
[20:48:49] <kemiisto> :-(
[20:49:05] <valexey> Ada is not self-extendable language :-) C++ is self-extendable.
[20:49:32] <kemiisto> а понял
[20:49:34] <kemiisto> вроде
[20:49:54] <kemiisto> в язык напихали то, что можно было бы держать в библиотеках?
[20:49:56] <kemiisto> так
[20:49:58] <valexey> In C++ you can write a lib for your purpose (with metaprogramming), In Ada you'll fuck yourself.
[20:50:03] <kemiisto> если б язык был другой
[20:50:04] <valexey> Yes.
[20:52:55] <kemiisto> а что в Оберонах с метапрограммированием? как обычно: закат солнца вручную и то только для тех, кому надо?
[20:53:09] <valexey> I suggest that it would be great if someone will rethink Ada as D and Rust aouthors rethink C++.
[20:53:30] <valexey> kemiisto: there is no compile-time meta for Oberon
[20:53:45] <kemiisto> ага, и будет это переосмысленная Ада не нужна также как D и Rust
[20:53:56] <valexey> kemiisto: There is only reflection/runtime type information in runtime.
[20:54:13] <valexey> And you can load module and call procedures by name.
[20:54:23] <valexey> That's all.
[20:54:51] <kemiisto> ну если тебе это недостаточно - оно тебе не нужно :-D
[20:55:47] <valexey> kemiisto: useless Rust is more successful than any oberon :-)
[20:56:32] <kemiisto> но не Це
[20:56:54] <valexey> yep
[20:57:14] <valexey> Ada with python syntax :-)
[20:57:27] <kemiisto> фу
[20:57:30] <kemiisto> гадость
[20:57:42] <kemiisto> а наоборот?
[20:57:46] <kemiisto> =-O
[20:57:50] <valexey> Ada with C++ syntax :-D
[20:58:08] <valexey> Ada with HASKELL SYNTAX!!1
[21:01:48] <valexey> "SPARK 2014 excludes data structures based on pointers. To work around this restriction, the content of a data structure can be hidden using private types."
[21:01:50] <valexey> :-)
[21:01:57] <valexey> http://www.spark-2014.org/entries/detail/spark-2014-rationale-formal-containers
[21:02:20] <kemiisto> я так и не дошёл до этих прайват тайпс...
[21:02:28] <kemiisto> слишком много в Аде всего
[21:02:34] <valexey> it is like opaque pointers in C
[21:02:48] <kemiisto> я си плохо знаю
[21:02:54] <valexey> * opaque datatype
[21:03:08] <valexey> https://en.wikipedia.org/wiki/Opaque_data_type
[21:10:01] <kemiisto> pimpl, короче
[21:10:08] <kemiisto> вот с этим я хоть знаком
[21:13:18] <kemiisto> причём на аде оно прям и выглядит как Pimpl
[21:17:56] <valexey> :-)
[21:20:50] <valexey> kemiisto: may be Go will be good for you? ;-)
[21:21:53] <kemiisto> чёт он страшный какой-та
[21:22:02] <kemiisto> :|
[21:22:25] <valexey> it is ok :-)
[21:22:40] <valexey> He will not your wife :-)
[21:52:52] <TRUE> valexey> https://en.wikipedia.org/wiki/Men_in_Black_(film)
2H Company - Люди в чёрном https://www.youtube.com/watch?v=GJKHm4a2rqs
[22:43:10] <kemiisto> а вот такой вопрос
[22:43:36] <kemiisto> скажем есть класс с членом-указателем :-D
[22:43:56] <kemiisto> нужен указатель, потому что требуется полиморфное поведение
[22:44:23] <kemiisto> знаю, что можно ссылками обойтись во многих случаях
[22:44:30] <kemiisto> и знаю про умные указатели
[22:44:47] <kemiisto> но хочу ограничиться обычными указателями
[22:45:03] <kemiisto> нужно для сравнения с ФОртраном
[22:45:12] <kemiisto> там только обычные указатели есть
[22:45:15] <kemiisto> ах да
[22:45:28] <kemiisto> сечас про плюсы речь
[22:45:32] <kemiisto> если кто не понял
[22:45:52] <kemiisto> ну вот теперь значит нужно этот указатель инициализировать в конструкторе
[22:46:12] <kemiisto> вариант 1: конструктор тупо принимает ссылку и хранит
[22:46:22] <kemiisto> но тут получается не очень красиво
[22:46:44] <kemiisto> бо создаём объект в одном месте (перед вызовом конструктора)
[22:47:12] <kemiisto> а уничтожаем в другом (в деструкторе объекта, который содержит ссылку)
[22:47:29] <kemiisto> т.е. new и delete разнесены
[22:47:41] <kemiisto> что, вроде как плохо считается
[22:48:20] <kemiisto> вариант 1: конструктор тупо принимает УКАЗАТЕЛЬ и хранит
[22:48:27] <kemiisto> описался как обычно
[22:48:46] <kemiisto> Linebreaking::Composition quick = Linebreaking::Composition(new Linebreaking::SimpleCompositor());
[22:48:50] <kemiisto> типо вот так
[22:49:06] <kemiisto> это паттерн стратегия типа, пример из GoF прямо
[22:49:46] <kemiisto> т.е. тут new вот тут в клиентском коде при создании объекта
[22:49:57] <kemiisto> а delete - он в деструкторе
[22:50:11] <kemiisto> плохая идея, вроде, не?
[22:50:51] <kemiisto> valexey, vlad2?
[23:02:40] <vlad2> Просто в конструктор нужно отдавать std::auto_ptr.
[23:03:45] <vlad2> Тогда читатель явно видит, что овнерщип отдается объекту и этот объект чего хочет, то и делает с ним (уничтожает в деструкторе).
[23:04:51] <kemiisto> vlad2: не, я хочу без умных указателей
[23:06:09] <vlad2> std::auto_ptr имеет нулевой оверхед. Просто декларирует передачу овнершипа. Ты может даже мембер оставть как простой указатель/ссылку, если религия не позволяет.
[23:06:29] <kemiisto> да я понимаю
[23:06:44] <kemiisto> ситуация умушленно искуственная
[23:06:55] <kemiisto> С++ только с "сырыми" указателями
[23:07:06] <kemiisto> мне интересно как бы это выглядело
[23:07:25] <kemiisto> не будь всяких специфичных плюсовых вещей
[23:07:36] <kemiisto> типо ссылок и умных указателей
[23:08:03] <vlad2> Ну так и выглядело бы - непонятно :) Передаешь ссылку/указатель. В чем проблема?
[23:08:24] <kemiisto> вот я и говорю
[23:08:31] <kemiisto> вроде как плохой тон
[23:08:46] <kemiisto> new и delete далеко друг от друга
[23:08:55] <kemiisto> в разных единицах трансляции
[23:09:00] <vlad2> Ну и что?
[23:09:16] <kemiisto> ну надо значит, скажем, явно документировать
[23:09:26] <kemiisto> что конструктор завладеят указателем
[23:09:35] <kemiisto> и удалять его уже не надо
[23:09:41] <valexey> std::auto_ptr is depricated
[23:09:49] <vlad2> new и delete для того и нужны, чтобы можно было разнести создание и удаление. Иначе можно все на стэке делает.
[23:10:31] <kemiisto> valexey: да в курсе мы, в курсе
[23:10:50] <vlad2> Использование std::auto_ptr это и есть "явная документация", проверяемая компилятором.
[23:11:09] <kemiisto> я понимаю это
[23:11:21] <kemiisto> так же как сейчас std::unique_ptr
[23:11:48] <kemiisto> если по значению передавать в конструктор - значит отдавать создаваемому объекту во владение
[23:12:00] <kemiisto> это всё хорошо
[23:12:19] <kemiisto> интересно как рекомендовали поступать ДО всяких умных указателей?
[23:12:39] <vlad2> См. Apple и ObjectiveC :)
[23:12:53] <vlad2> naming conventions всякие
[23:13:09] <kemiisto> ну понятно
[23:13:14] <kemiisto> документирование короче
[23:13:25] <vlad2> Плюс комменты, да.
[23:13:26] <kemiisto> либо комментарии, либо соглашения по наименованию
[23:14:52] <vlad2> Причем в случае Objective-C еще тотальный подсчет ссылок (ручной).
[23:15:29] <vlad2> В винде COM - тоже тотальный подсчет ссылок.
[23:17:47] <kemiisto> через тернии к умным указателям :-D
[23:20:08] <vlad2> Угу.
[23:24:54] <kemiisto> а GC, выходит, таки не лучший вариант
[23:25:07] <kemiisto> ибо только для управления памятью подходит
[23:26:32] <valexey> in modern objc there is ARC already
[23:26:43] <valexey> automatic reference counting
[23:26:57] <valexey> GC is ugly thing.