[00:00:02] <valexey> ну, можно небось вернуть спец. значение. Но поскольку механизмы построения абстракций там убогие, то особо эту идею не развить.
[00:00:13] <kemiisto> о том и речь
[00:00:46] <valexey> зато фортрановские чистые функции могут быть АЦЦКИ заоптимизированны
[00:00:52] <valexey> то есть они гарантированно просты
[00:01:01] <kemiisto> а что с них толку
[00:01:04] <valexey> с точки зрения железа
[00:01:08] <kemiisto> если нет никакой диагностики ашипок
[00:01:09] <kemiisto> ?
[00:01:16] <kemiisto> рухнет
[00:01:29] <kemiisto> и не поймёшь, откуда всё пошло
[00:01:31] <valexey> ну, типо предусловие должно быть проверено вне этой функции. нужно проверять - лепи обертку.
[00:01:47] <kemiisto> да это то понятно
[00:02:16] <valexey> ну и оно же для ЧМов в основном. так что там это функции больше в ЧМ-смысле.
[00:02:35] <valexey> а не в смысле той математики что хаскель использует.
[00:02:42] <valexey> (и на которой он строится)
[00:04:00] <valexey> ваще у этих языков сильно разные задачи. фортран должен быть быстр и ориентирован на ЧМ, а хаскель должен быть безопасен и гибок.
[00:04:11] <valexey> совсем разные штуки.
[00:05:12] <kemiisto> ну и уж тогда давай скажи за оберон
[00:05:13] <kemiisto> :-D
[00:05:18] <kemiisto> он то зачем нужен?
[00:05:35] <valexey> чтобы легко писать его компилятор!
[00:05:40] <kemiisto> оберно просто должен быть
[00:05:41] <kemiisto> во
[00:05:45] <kemiisto> оберон
[00:06:09] <kemiisto> та что-то видимо не так уж и легко
[00:06:19] <kemiisto> ибо их (компиляторов) - кот наплакал
[00:06:20] <valexey> ну, а чо. отличный подопытный кролик. на нем же можно отрабатывать все тулзы для программирования. рефакторинги там, анализ кода и проч.
[00:06:20] <kemiisto> :-D
[00:06:56] <valexey> ну, компиляторов то куча. но все недоработанные до продакшина. ибо в продакшине оберон как-то не особо нужен :-)
[00:08:06] <valexey> возможно он мог бы занять нишу для упрощенного варианта processing'a
[00:08:16] <valexey> который http://processing.org/
[00:08:34] <valexey> то есть совсем для нубов в программировании которым хочется сразу вау сделать.
[00:09:09] <kemiisto> ну с жавой только и тягаться :-D
[00:09:16] <kemiisto> можно даже не начинать
[00:09:25] <valexey> с js еще
[00:09:33] <valexey> ибо процессинг уже и js умеет.
[00:09:44] <kemiisto> не блин
[00:09:46] <kemiisto> туфта
[00:09:59] <kemiisto> я про чистоту
[00:09:59] <valexey> хто?
[00:10:06] <kemiisto> бессмыслица
[00:10:08] <kemiisto> вот в D
[00:10:09] <valexey> гыде?
[00:10:15] <kemiisto> http://dlang.org/function.html#pure-functions
[00:10:18] <valexey> в D не чистота, а лажа
[00:10:22] <kemiisto> As a concession to practicality, a pure function can:
[00:10:24] <valexey> истинно чистый - только хаскель!
[00:10:30] <kemiisto> terminate the program
[00:10:37] <kemiisto> вот
[00:10:41] <kemiisto> practicality!
[00:10:49] <kemiisto> а без этого бессмысленно
[00:11:02] <kemiisto> надо ходя бы предусловия иметь возможность проверять
[00:11:04] <vlad2> /me поднял continious C++ тесты. Может к завтрему даранятся...
[00:11:14] <kemiisto> и сразу тряпать, если что не так
[00:11:24] <valexey> Эмм.. Зачем чистой функции кого-то там терминировать? Чем хаскельный Maybe не устраивает?
[00:11:31] <valexey> Ну или Exception хаскельный же
[00:11:39] <kemiisto> тем, что его нету в Фортране :-D
[00:11:43] <valexey> Там сразу будет видно где проблема.
[00:11:44] <kemiisto> так то я бы только рад
[00:12:10] <valexey> Ну, блин. Натягивать парадигму функциональных языков на Ди или Фортран - то еще извращение.
[00:12:24] <kemiisto> но она там натянута не мной
[00:12:27] <kemiisto> стандарт
[00:12:38] <kemiisto> местами
[00:13:04] <kemiisto> в любом случае
[00:13:17] <kemiisto> почему нельзя из чистой функции стопорнуть прогу?
[00:13:23] <kemiisto> всё ж чисто
[00:13:44] <valexey> нет. это изменение состояния. это не чисто.
[00:13:59] <valexey> просто по определению чистой функции.
[00:14:06] <kemiisto> для вызывающего метода это будет вызов функции, выполняющейся бесконечное время
[00:14:17] <kemiisto> это в лучшем случае исчезновение состояния
[00:14:23] <kemiisto> изменения я тут не вижу
[00:14:35] <valexey> исчезновение - это тоже изменение :-)
[00:14:43] <kemiisto> нет
[00:14:43] <valexey> поэтому же чистая функция и в лог писать не может.
[00:15:33] <kemiisto> хм...
[00:17:14] <valexey> ну, опять таки, тут вопрос не в формулировках, а в том, ЗАЧЕМ в данный язык вводится данное понятие. какие цели это преследует?
[00:17:26] <kemiisto> ну там есть например
[00:17:29] <kemiisto> FORALL
[00:17:35] <valexey> подозреваю что в фортране это было сделано для убероптимизации.
[00:17:35] <kemiisto> это цикл особый
[00:17:48] <kemiisto> который допускает возможность автоматического распараллеливания
[00:18:11] <valexey> угу. я и говорю - это тупо подсказки комилятору.
[00:18:22] <valexey> в фортране
[00:18:30] <kemiisto> там внутри можно только чистые функции вызывать
[00:18:38] <kemiisto> ну да
[00:25:12] <valexey> ну, то есть это дает предсказуемость. что например не будет опустошения кеша
[00:25:24] <valexey> что не будет системных вызовов и прерываний
[00:25:35] <valexey> это очень важно для оптимизации именно числодробилен
[01:07:55] <vlad2> Тесты доранились! Причем половина - зеленые! Круто! :)
[01:11:02] <valexey> vlad2: это все фигня по сравнению с видеосъемкой в студии!
[01:12:38] <vlad2> Хе-хе :)
[01:12:43] <vlad2> Как прошло?
[01:13:04] <valexey> ну, три часа снимали дубли говорения о нашем приложении на камеру
[01:13:15] <valexey> в итоге должно получиться минуты 3-4 видео :-)
[01:13:59] <valexey> то есть нарабатывали сырье для монтажа
[02:14:25] <vlad2> А кто монтаж делает?
[02:14:49] <valexey> да есть один человек. он и дизайном занимается.
[02:15:32] <valexey> но тут большую роль пожалуй играют не деньги, а азарт и энтузиазм :-)
[02:16:34] <valexey> ибо это круто :-)
[18:34:27] <vlad2> факинг факинг факинг яндекс
[18:34:40] <vlad2> обновил пунтосвитчер
[18:35:05] <vlad2> Внимательно снял все галки "не ставить это дерьмо и не ставить этот тулбар".
[18:35:32] <vlad2> И все равно он поставил мне свой браузер со стрингами! И сделал его дефолтовым! WTF???
[18:35:45] <shaggie> yep
[18:35:51] <shaggie> там этих галок был вагон
[18:35:53] <shaggie> спамеры
[18:46:04] <vlad2> Написал им письмо в поддержку. Культурное. Хотя было сложно.
[19:03:04] <shaggie> у меня на двух машинах пунто обновился без происшествий (с учётом всех снятых галок)
[19:03:15] <shaggie> видимо, баг
[20:05:58] <valexey> это называется - хоть бери инсталлятор, декомпилируй, и выкорячивай оттуда все эти левые штуки.
[20:34:34] <jordan36957> Я вот тут подумал, в большинстве случаев где нужно просто хранить последовательно, использовать не список а динамический массив. Если мало памяти использовать массив указателей. Массивом проще управлять. Какую книжку не прочитаю, везде в примерах списки. Очереди и стеки тоже на списках. И поиск быстрее за счёт предвыборки.
[20:34:54] <jordan36957> Где Алексей на съёмках. :-)
[20:35:35] <jordan36957> В книгах по стл, упор всегда идёт на вектор.
[21:41:15] <vlad2> Да, я редко использую std::list
[21:41:25] <vlad2> std::vector почти всегда предпочтительнее.
[21:50:14] <vlad2> list удобен в учебных примерах, чтоб показать что такое динамические структуры данных
[21:50:22] <vlad2> ну и указатели
[21:53:54] <jordan36957> Смотрел реализацию fcl-stl в free pascal, там всё сделано через динамический массив,
[21:53:55] <vlad2> Ну и в оберонах :) Потому как чтоб сделать аналог std::vector (со всякими реаалокациями on demand) нужно написать сколько-то не совсем тривиального кода под конкретный тип. Из библиотеки его не потребить (дженериков нет). Поэтому проще каждый раз колбасить интрузивный список.
[21:54:20] <jordan36957> Вот. Именно.
[21:54:44] <jordan36957> Каждый раз, писать одно и тоже по многу раз.
[21:57:32] <jordan36957> Мне понравилась библиотека glib для си, там полно всяких алгоритмов, но что бы использовать нужно приводить типы. В принципе не сложно, но визуально, некоё нагромождение чувствуется. Особенно реализация массива, ляпота. :-)
[22:02:10] <jordan36957> Вот такой вопрос
[22:02:16] <jordan36957> ри разворачивании шаблонов порождается неэффективный код, так как язык шаблонов не предоставляет никаких средств для оптимизации (см. также раздел Вычислительная производительность); в-третьих, это решение является плохо портируемым (например, разработчики Qt/KDE, хоть и ориентировались на идеологию С++, но отказались от использования шаблонов по ряду причин, главной из которых они называют непортируемость[
[22:02:19] <jordan36957> Это из вики
[22:02:55] <vlad2> Про неэффективный код какой-то бред.
[22:02:58] <jordan36957> В чём проблема портируемости?
[22:03:00] <vlad2> Код обычный.
[22:03:04] <vlad2> Просто его много.
[22:03:25] <vlad2> И он часто тривиальный - типа вызова вызова чего-то через что-то.
[22:03:38] <jordan36957> http://ru.wikipedia.org/wiki/C%2B%2B#.D0.9E.D1.82.D1.81.D1.83.D1.82.D1.81.D1.82.D0.B2.D0.B8.D0.B5_.D0.B2.D0.BE.D0.B7.D0.BC.D0.BE.D0.B6.D0.BD.D0.BE.D1.81.D1.82.D0.B5.D0.B9
[22:03:51] <vlad2> Поэтому да - очень важно для компиляторв иметь хоть какую-то оптимизация вообще, особенно inline.
[22:04:22] <jordan36957> Об оптимизации я понял, но в чём проблема портируемости шаблонов?
[22:04:44] <jordan36957> Или эта критика устаревшая?
[22:04:45] <vlad2> Посмотри тот-же std::auto_ptr - если компилятор не умеет инлайнить какой-нибудь "operator ->" - то будет все плохо, да. Но я таких тупых компиляторов еще не видел :)
[22:05:25] <jordan36957> Ок
[22:05:26] <vlad2> Да, с шаблонами были проблемы на заре всего этого дела - до начала 2000-х.
[22:05:38] <vlad2> Потом компиляторы в массе пришли в чувство.
[22:06:01] <vlad2> В смысле одни и те же шаблоны стали компилится без особых задвигов.
[22:08:08] <jordan36957> Теперь понятно.
[22:08:55] <vlad2> В свое время очень можно было ссылаться на comeau или как-то так - типа самый "стандартный" компилятор на то время - если он компилит, а твой компилятор нет - то это проблема твоего компилятора :)
[22:09:03] <vlad2> модно
[22:09:18] <vlad2> Оно было в онлайне и каждый мог проверить свой шаблон :)
[22:12:52] <vlad2> Qt/KDE - имеют древнюю историю, так что их можно было понять.
[22:17:38] <vlad2> Кроме того, у меня такое личное впечатление, что народ в то время был в эйфории от шаблонов и клепал действительно ужасные вещи :) Потом как-то более умеренно стали подходить к этому делу и все страшные вещи переместились в boost, у которого все хорошо с разными компиляторами. Так что на практике все эти несовместимости перестали парить.
[22:19:41] <jordan36957> Ещё вопрос. Если я напишу свой шаблонный вектор но без классвов. То есть всё процедурно. Как указать конструктор и деструктор, так как вещь удобная.
[22:30:03] <vlad2> Не очень понял, что значит без классов. У тебя все равно будет какая-то структура, в которой будет лежать указатель на память и размер твоего вектора.
[22:30:54] <jordan36957> Да. Но это только структура. Без объявления class
[22:31:39] <vlad2> class и struct в С++ это одно и тоже, за искобчением доступа к содержимому по умолчанию.
[22:31:48] <vlad2> struct - по умолчанию public
[22:31:58] <vlad2> class - по умолчанию private
[22:32:01] <vlad2> Все.
[22:32:34] <vlad2> struct X {private: int i;} это тоже самое что class X{int i;}
[22:32:59] <vlad2> Соответственно конструктор у struct тоже может быть,
[22:33:05] <vlad2> И деструктор.
[22:33:10] <vlad2> И все остальное.
[22:33:16] <jordan36957> ещё раз пойду перечитаю об ооп.
[22:33:43] <vlad2> Там OOП не причем :)
[22:34:33] <jordan36957> Блин, у меня почему то в голове засело что class это такая неведомая зверушка. :-)
[22:34:40] <vlad2> В других языках - да, есть разница между аналогами struct/record и class/object. В С++ - почти нет.
[22:35:23] <jordan36957> О object в паскале.
[22:35:29] <vlad2> Да.
[22:36:27] <vlad2> В этом смысле С++ более единообразен :)
[22:37:17] <vlad2> Если писать его с нуля, то struct можно было и не вводить, достаточно class. Но так как делали совместимым с С - то в С++ есть struct.
[22:38:54] <jordan36957> И это я ещё до паттернов не добрался, всякие там фабрики и т.д
[22:43:07] <jordan36957> Тогда ещё0 вопрос, в книгах пишут(К примеру Стив Макконел - Совершенный код) не дублируйте код, но если нет дженериков, каков выход? Кроме привидения типа? Реализация одного и тогоже типизированного алгоритма, дублирует код в n прогрессии. Если применить это правило к оберону?
[22:46:15] <vlad2> Ну не пиши на обероне :) Что тут еще можно сказать. Если серьезно: вот надо написать алгоритм для n типов без дублирования кода и все это на обероне. Ну тогда я бы обратился к какому-то препроцессору. Вон там для ББ чего-то делали - типа встроенного язычка (рефала).
[22:46:49] <vlad2> Но понятно, что это все из серии "любые ваши фантазии за ваши деньги" :)
[22:47:11] <vlad2> Хочешь писать на обероне - закатывай рукава :)
[22:47:28] <jordan36957> Угу.
[22:50:49] <jordan36957> В чём тогда выйгрыш оберона? Кроме маленького компилятора? Только без смеху.
[22:52:00] <jordan36957> Без кп и других модных вещей.
[22:52:09] <jordan36957> Только оберон 2.
[22:52:55] <vlad2> Я бы все-таки про КП говорил. Он не сильно сложнее оберона2, и наиболее ближе к реальной жизни, чем все другие обероны.
[22:54:20] <vlad2> Она маленький и весь инструментарий (включая компилятор) может сопровождать один (!) человек для нужной человеку специфике. Вот выигрыш. Не для всех актуальный, конечно.
[22:54:50] <vlad2> При этом сам язык как ЯП без каких-то фатальных изъянов.
[22:55:15] <vlad2> И достаточно эффективный для обычного желелза.
[22:55:19] <jordan36957> То есть если допилить? То можно захватить мир? :-)
[22:55:53] <vlad2> Нет. Потому что уже 10 человек могут сделать что-то сильно лучше.
[22:58:00] <vlad2> Особенно если один из них сильно умный, а остальные не сильно упрямые :)
[22:59:27] <vlad2> Допилить не потеряв основное свойство (маленький и простой) нельзя.
[22:59:59] <vlad2> В смысле Вирт пытается сделать еще проще и меньше, но судя по последним оберонам у него не очень получается :)
[23:00:11] <jordan36957> Всё равно нужно идти на необходиму сложность.
[23:02:12] <vlad2> Ну типа как сказал один адский товарищ Вирту в пику: большие задачи требуют сложных инструментов.
[23:02:33] <jordan36957> Что Вирт на это ответил?
[23:03:27] <vlad2> Не знаю. Где-то на оборонкоре пробегало. На какой-то конференции или еще где-то. Не помню весь сетап.
[23:04:04] <jordan36957> Сложные != переусложненные. В общем дело в балансе.
[23:04:59] <vlad2> Вообще да. В люой серьезной книжке по программированию можно найти этот тезис, что надо делать "как можно проще". Так что в этом с оберонщиками никто не спорит.
[23:06:23] <jordan36957> Типа перекапывать огород детской лопаткой? Упорство + время, даст свои плоды. :-)
[23:06:53] <jordan36957> Это я к фразе, что писать на обероне нужно засучить рукава.
[23:07:17] <jordan36957> *засучив
[23:08:33] <vlad2> Все эти "жирные программы, которые ничего не делают полезного" не оттого, что программисты не любят простоту, а оттого, что внешние условия для них так поставлены, что платят именно за такие программы. И бороться обероном против этих условий бесполезно.
[23:10:33] <vlad2> На а сказки по то, что на обероне можно делать в 16 раз быстрее и качественнее так и остались сказками - никто с оборонкоре еще не доказал, что это правда.
[23:10:44] <jordan36957> Так в опен сорсе, тоже полно жирных программ, за них тоже особо не платят.
[23:12:19] <jordan36957> Так и представляю, Сборник сказок об обероне. Глава 1 - Оберон самый лучший язык в мире. :-) Издательство свидетели оберона. :-)
[23:12:25] <jordan36957> Ну это всё шутки.
[23:12:29] <vlad2> Лично я вообще ситаю, что сам факт, что на КП чего-то там делают оборонкоровцы, оно работает и они получают за это деньги - лишь подтверждает мой тезис о том, что выбор ЯП не является определяющим для конечного результата в виде программы, делающей требуемые вещи.
[23:14:40] <vlad2> Даже количество долбо!@#$а непосредственно с кодом сильно зависит от конкретного программиста, а не от языка.
[23:15:43] <vlad2> Особенно это видно было, когда кто-то постил на оборонкоре свои поделки на питоне.
[23:15:58] <vlad2> Человек мучил себя и язык :)
[23:16:06] <vlad2> А на выходе все равно какашка :)
[23:16:13] <vlad2> Так что пусть бы он лучше на обероне писал.
[23:25:10] <jordan36957> Меня лично ввёл в ступор оптимизированный код на кп. На обер спэйсе есть тема, меряли скорость разных языков.
[23:25:16] <jordan36957> Сейчас найду.
[23:26:01] <jordan36957> Скорость особо не увеличилась, но код стал страшным.
[23:27:34] <jordan36957> Потом форум тормозит.
[23:28:25] <vlad2> Ну оно на любом языке страшным становится после оптимизации :)
[23:29:13] <jordan36957> Не там проблемы в архитектуре. В отсутствии беззнаковых типов.
[23:33:13] <jordan36957> http://oberspace.dyndns.org/index.php/topic,484.msg15892.html#msg15892
[23:37:44] <jordan36957> Особенно это a2[m] := SHORT(SHORT(
[23:38:56] <vlad2> Ну да, страшненько.
[23:39:53] <vlad2> Гы. Сегодня 8-е августа. Всем смотреть Судзумию. Или как там ее.
[23:41:59] <jordan36957> ??
[23:42:54] <jordan36957> Гугл выдал аниме сериал.
[23:49:08] <TRUE> <jordan36957> Не там проблемы в архитектуре. В отсутствии беззнаковых типов.
[23:49:33] <TRUE> вообще-то, скорость после оптимизации увеличилась больше чем в 2 раза.
[23:50:25] <TRUE> и не надо употреблять слово "архитектура" всуе : )
[23:50:39] <jordan36957> :-) Ок
[23:51:18] <jordan36957> Я жеж не программист, мат часть плохо знаю. :-)
[23:52:59] <TRUE> Кстати, про беззнаковые: пару лет назад в мелкосовтовском пейнте нашли баг, позволявший неправильным BMP-файлом устроить переполнение буфера. Основан он был именно на присутствии знаковых и беззнаковых целых.
[23:54:34] <TRUE> а что за Судзимия?
[23:55:28] <jordan36957> Я спрашивал, молчит как партизан.
[23:57:42] <jordan36957> Я спать. Всем пока.
[23:57:47] <TRUE> пока