-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80




Форум на Исходниках.RU


Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://forum.sources.ru.
Данный дневник сформирован из открытого RSS-источника по адресу http://forum.sources.ru/yandex.php, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 20:36 + в цитатник
korvin:
Цитата Fester @
Функция, которая ничего не делает - это заглушка, т.е. фактически это и есть mock.

Нет.

Цитата Fester @
Я уж как-нибудь обойдуть одним объектом, который полностью описывает "пользователя" и не буду убиваться из-за некоторой избыточности

Любитель сильной связности. Понятно.

Цитата Fester @
В подавляющем случае как раз нет и в 99% случаев функция не использует все поля.

Только в говнокоде.

Цитата Fester @
Просто из-за того, что никто не будет шлепать отдельный объект ради каждой функции.

Просто убогие недоязычки не позволяют легко и просто описывать типы. Впрочем, на сегодняшний день из таких только Java осталась, да Pascal. На Джаве ты не пишешь, значит на Паскале?

Цитата Fester @
В данном тесте - последний параметр - это заглушка и, соответственно Request - это мок-объект.

Нет. Request даже не объект.

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838319


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 18:36 + в цитатник
Fester:
Цитата Wound @
Не совсем понял эту цитату.

Я опирался на код:
Цитата korvin @
final var response = subject.submit(new Transfer.Request(
money,
() -> sourceAccount,
() -> destinationAccount,
() -> { /* e.g. do nothing in this particular test case */ }
));

В данном тесте - последний параметр - это заглушка и, соответственно Request - это мок-объект.

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838298


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 18:18 + в цитатник
Grey goose: Некогда использовать такое. Надо баги фиксать

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838297


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 18:09 + в цитатник
Wound:
Цитата Fester @
Функция, которая ничего не делает - это заглушка, т.е. фактически это и есть mock. Каждый объект, в котором тебе нужна "чистая функция" - это есть твой mock-объект.

Не совсем понял эту цитату. Ты точно понимаешь, что подразумевается под чистыми функциями(Pure function)?

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838294


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 17:43 + в цитатник
Fester:
Цитата korvin @
У меня-то их и нет.

Ты пытаешься избавиться от них создавая левые параметры в Request'е :)

Цитата korvin @
Я не переписываю, я пытаюсь объяснить тебе, болезному, в чём разница между чистой функцией и объектом.

Функция, которая ничего не делает - это заглушка, т.е. фактически это и есть mock. Каждый объект, в котором тебе нужна "чистая функция" - это есть твой mock-объект.


Цитата korvin @
Если они требуют разные входные данные, то, естественно у них будут разные типы аргумента. А ты что, клепаешь God object'ы?

Если у меня есть сущность "пользователь", у которого есть фамилия, имя, день рождения, емыл и физический адрес (страна, город, индекс, улица, дом) и у меня есть 2 сервиса: 1) поздравляет пользователя с днем рождения по мылу и 2) отправляет новогоднюю открытку по почте, то я не буду шлепать 2 объекта так чтобы в одном были дата рождения и е-мыл, а в другом почтовый адрес. Я уж как-нибудь обойдуть одним объектом, который полностью описывает "пользователя" и не буду убиваться из-за некоторой избыточности. И нет, это не God object.

Цитата korvin @
В подавляющем большинстве случаев — да. Если функция не использует какие-то поля, то зачем эти поля нужны? Для красоты?

В подавляющем случае как раз нет и в 99% случаев функция не использует все поля. Просто из-за того, что никто не будет шлепать отдельный объект ради каждой функции.

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838292


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 16:27 + в цитатник
korvin:
Цитата Fester @
Значит ли это, что других функций в классе Transfer нет?

В моём — нет.

Цитата Fester @
Или все другие функции должны точно также как и submit использовать все поля Request'а?

Ты чем читал? У каждой функции свои область определения и область значений. Что не ясно в этой фразе?

Цитата Fester @
Я думал, что ты тут пытаешься избавиться от моков

У меня-то их и нет.

Цитата Fester @
Изменится то, что ты уже 2-й раз переписываешь свой код и все это ради того, чтобы не было моков.

Я не переписываю, я пытаюсь объяснить тебе, болезному, в чём разница между чистой функцией и объектом.

Цитата Fester @
Если в данном случае и можно вынести в статический метод (т.к. функция примитивна), то нельзя гаравтировать, что вынос в статику будет работать в любом случае.

С чего б вдруг?

Цитата Fester @
Или если у тебя 10 функций, то ты шлепаешь свой Request для каждой?

Если они требуют разные входные данные, то, естественно у них будут разные типы аргумента. А ты что, клепаешь God object'ы?

Цитата Fester @
Так чтобы каждая функция использовала все публичные поля своего Request'а?

В подавляющем большинстве случаев — да. Если функция не использует какие-то поля, то зачем эти поля нужны? Для красоты?

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838287


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 16:04 + в цитатник
Fester:
Цитата korvin @
Все используются, именно поэтому Request является типом аргумента submit. Это её (submit) область определения.

Значит ли это, что других функций в классе Transfer нет? Или все другие функции должны точно также как и submit использовать все поля Request'а?

Цитата korvin @
Ну тебе ж не нравилось, что я вызываю простую чистую функцию. Вот тебе альтернативное решение.

Ты это для меня делаешь? Я думал, что ты тут пытаешься избавиться от моков

Цитата korvin @
И что? Если они будут внешние, что принципиально изменится?

Изменится то, что ты уже 2-й раз переписываешь свой код и все это ради того, чтобы не было моков. При этом код не становится понятнее.

Цитата korvin @
Ну вынеси их в статику

Если в данном случае и можно вынести в статический метод (т.к. функция примитивна), то нельзя гаравтировать, что вынос в статику будет работать в любом случае.

Цитата korvin @
Он говорит, что в классе не должно быть десяток каких-то функций, не имеющих отношения к классу.

Ну значит у класса может быть больше одной функции. Слава богу! Осталось только уточнить, могут ли эти функции использовать разные данные... Или если у тебя 10 функций, то ты шлепаешь свой Request для каждой? Так чтобы каждая функция использовала все публичные поля своего Request'а?

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838286


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 15:16 + в цитатник
korvin:
Цитата Fester @
Все знают публичные поля класса Request (имя и тип), но никто не знает какие из этих публичных полей используются функцией submit

Все используются, именно поэтому Request является типом аргумента submit. Это её (submit) область определения.

Цитата Fester @
а, скажем, доступ к файловой системе нужно.

Конечно, ведь это внешний ресурс с побочными эффектами.

Цитата Fester @
Ты понимаешь, что вместо вызова некой функции (в данном случае canWithdraw) ты предлагаешь создать некое поле, которое должно заполняться гезультатом работы этой функции.

Ну тебе ж не нравилось, что я вызываю простую чистую функцию. Вот тебе альтернативное решение.

Цитата Fester @
При этом мало того, что функцию все равно придется вызывать (в продуктивном коде)

И что? Это дело этой функции, с точки зрения submit это просто bool.

Цитата Fester @
так еще у тебя и Request'e добавится куча полей.

Какая куча полей?

Цитата Fester @
Смотри свой собственный код, у тебя у Account есть как минимум две функции: hasSameOwnerAs и canWithdraw

И что? Если они будут внешние, что принципиально изменится?

Ну вынеси их в статику
    class Account {
    public final ID id;
    public final Money balance;
    ...
    public static boolean haveSameOwners(Account a, Account b) { ... }
    public static boolean canWithdraw(Account a, Money amount) { ... }
    }

Что-то поменялось?

Цитата Fester @
Ясен хрен, что тут должна быть абстракция.

:facepalm: с хера ли? Тебе что, инъекцию абстракций сделали?

Цитата Fester @
Т.е. Request - это тоже нифига не plain data объект!

:facepalm: откуда такой глупый вывод?

Цитата Fester @
Это должен быть интерфейс типа

Нет, не должен.

Цитата Fester @
ingle Responsibility Principle ничего не говорит о том, что в классе должна быть одна функция.

Не говорит. Он говорит, что в классе не должно быть десяток каких-то функций, не имеющих отношения к классу.

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838285


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 14:40 + в цитатник
Fester:
Цитата korvin @
В смысле «я знаю»? класс Request публичный с публичными полями. Все знают, как оно реализовано.

Все знают публичные поля класса Request (имя и тип), но никто не знает какие из этих публичных полей используются функцией submit. А значит, для вызова submit тебе надо либо инициализировать все поля класса Request, либо знать какие поля класса Request использует submit, чтобы не создавать лишние объекты.

Цитата korvin @
может мне ещё и JDK мокать? java.lang.Math.sin, например?

java.lang.Math.sin мокать не нужно, а, скажем, доступ к файловой системе нужно.

Цитата korvin @
А то ж вдруг я его вызываю, да синус считаю. Ты сам-то мокаешь стандартную библиотеку?

Я мокаю то, что мне нужно. Например доступ к реестр или доступ к файлам - тоже вполне себе стандартные штуки.

Цитата korvin @
Также как и любое другое поле: передам нужное мне значение в конструктор

Ты понимаешь, что вместо вызова некой функции (в данном случае canWithdraw) ты предлагаешь создать некое поле, которое должно заполняться гезультатом работы этой функции. При этом мало того, что функцию все равно придется вызывать (в продуктивном коде), так еще у тебя и Request'e добавится куча полей.


Цитата korvin @
С хера ли? Ты что, Егора Бугаенко начитался/насмотрелся? Plain data там, никаких объектов, никаких абстракций.

Не знаю кто такой Егор Бугаенко.
Никаких plain data там нет. Смотри свой собственный код, у тебя у Account есть как минимум две функции: hasSameOwnerAs и canWithdraw плюс к этому read-only проперти owner. Ясен хрен, что тут должна быть абстракция.

Цитата korvin @
1) у каждой функции своя область определения, значит у каждой будет свой Request

Отлично! Т.е. Request - это тоже нифига не plain data объект!
Это должен быть интерфейс типа
    public interface IRequest
    {
    Money Amount {get;} // тут хз, возможно тоже должна быть абстракция
    IAccount Source {get;}
    IAccount Destination {get;}
    Action CheckCompliance{ get; set; }
    }



Цитата korvin @
2) нафига перегружать модуль Transfer ещё десятком какимх-то функций? Про Single Responsibility Principle слышал?

ingle Responsibility Principle ничего не говорит о том, что в классе должна быть одна функция.

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838284


Метки:  

Производительность Си в сравнении с Rust

Пятница, 04 Сентября 2020 г. 14:04 + в цитатник
OpenGL:
Цитата Black_Dragon @
if (pointer != nullptr) - уже накладные расходы, а в ООП тоже будут доп проверки, вычисления.

Я не понимаю, о каких накладных расходах и дополнительных проверках идёт речь. Если тебе надо проверять указатель на nullptr в плюсах, то надо делать это и в си. Если в программе на си это делать не надо (например, потому что он был проверен уровнем выше), то и в плюсах тебе ничто не мешает построить систему аналогично.

Цитата Black_Dragon @
Откуда узнать, какую виртуальную функцию вызвать или это лишний переход, доступ сделать для этого?

Он и в си будет делаться, если тебе нужна динамическая диспетчеризация, при помощи набора указателей на функции. Это ровно такая же VMT, только написанная руками.

Цитата Black_Dragon @
Просто, что мы рассматриваем. Одно дело, когда это ОС или жесткий реалтайм, тут борьба за быстродействие до тактов и лишних инструкций. Имхо.

Лично я о том, что не на всех языках у тебя будут получаться лишние инструкции в сравнении с Си. С++ - достаточно тонкая прослойка над ним. Если отключить RTTI и исключения (а ядро ОС, если бы писалось на плюсах, писалось бы без них), то вообще не будет никакого оверхеда. С растом чуть сложнее, в нём у тебя у объектов с деструктором есть drop flag, который обязательно проверяется при выходе из скопа, в нём для полиморфизма используются fat pointers, так что на язык без оверхеда в сравнении с си он всё-таки плохо тянет, но и в нём он настолько мал, что, вероятно, даже в ядре ОС это не будет особо важным.

https://forum.sources.ru/index.php?showtopic=419518&view=findpost&p=3838281


Метки:  

Производительность Си в сравнении с Rust

Пятница, 04 Сентября 2020 г. 13:43 + в цитатник
Qraizer: В других языках может быть и по другому, но конкретно в Плюсах ООП бесплатен. Объектная модель такова, что написанные руками аналоги будут точно такими же. К примеру виртуальные методы представлены просто указателями на функции, и если переписать полиморфизм на C, получится то же самое.

Добавлено
Цитата
Подскажите, как здесь найти список своих тем?
Попробуй ткнуть в «Профиль» под своим ником, зайти в профиль и найти что-то вроде «темы этого участника».

https://forum.sources.ru/index.php?showtopic=419518&view=findpost&p=3838279


Метки:  

Производительность Си в сравнении с Rust

Пятница, 04 Сентября 2020 г. 13:24 + в цитатник
Black_Dragon:
Цитата OpenGL @
Вот это спорно

if (pointer != nullptr) - уже накладные расходы, а в ООП тоже будут доп проверки, вычисления. Откуда узнать, какую виртуальную функцию вызвать или это лишний переход, доступ сделать для этого? ООП за бесплатные такты процессора не реализуем. Ну может быть типа простой вариант, когда ты тупо наследуешь...

Просто, что мы рассматриваем. Одно дело, когда это ОС или жесткий реалтайм, тут борьба за быстродействие до тактов и лишних инструкций. Имхо.

https://forum.sources.ru/index.php?showtopic=419518&view=findpost&p=3838278


Метки:  

Производительность Си в сравнении с Rust

Пятница, 04 Сентября 2020 г. 12:49 + в цитатник
OpenGL:
Цитата Black_Dragon @
3) Всякие ООП тоже имеют накладные расходы....

Вот это спорно. По крайней мере если как альтернативу рассматривать плюсы.

https://forum.sources.ru/index.php?showtopic=419518&view=findpost&p=3838277


Метки:  

Производительность Си в сравнении с Rust

Пятница, 04 Сентября 2020 г. 12:34 + в цитатник
Black_Dragon:
Цитата Sunless @
не переписывают на другие языки, если осталььные языки их могут обогнать.

1) Вы знаете сколько кода в ОС-ах? И как вы себе представляете "переписать", а если еще что-то новое, быстрое появиться, опять переписывать?
2) Другие языки не быстрее. Языки высокого уровня (могут) внедряют разные защиты, например, проверка границ массива, а это накладные расходы...
3) Всякие ООП тоже имеют накладные расходы....

ОС-ы пишут очень профессиональные программисты, и весь контроль за работой кода и логики на них, а не на авторах библиотек или компилятора.
Например, перед тем как работать с указателем, надо проверить его на валидность, чтоб не получить крах программы по доступам.
Но в логике твой программы 100% дойдя до этого места указатель будет точно валиден и тебе не нужен код, где он будет лишний раз проверяться. По этому тебе не нужна библиотека, в которой есть лишние проверки, так как тебе нужно быстродействие.

https://forum.sources.ru/index.php?showtopic=419518&view=findpost&p=3838275


Метки:  

Производительность Си в сравнении с Rust

Пятница, 04 Сентября 2020 г. 12:04 + в цитатник
Sunless: Всё-таки не совсем понятно, почему ядра ОС и серверы пишут на Ассемблере и Си и не переписывают на другие языки, если осталььные языки их могут обогнать.
P.S.
Подскажите, как здесь найти список своих тем?

https://forum.sources.ru/index.php?showtopic=419518&view=findpost&p=3838273


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 09:18 + в цитатник
applegame:
Цитата korvin @
Ортогональные. Но на ФП как-то код более декларативен получается по-умолчанию.
Ну не знаю. По моему все такое же описание процесса. Та же упомянутая тобой композиция функций отнюдь не декларативна.

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838261


Метки:  

TDD vs не TDD

Пятница, 04 Сентября 2020 г. 08:13 + в цитатник
korvin:
Цитата Fester @
Ты это знаешь только из-за того, что знаешь как оно реализовано.

В смысле «я знаю»? класс Request публичный с публичными полями. Все знают, как оно реализовано.

Цитата Fester @
Затем, что ты этот метод вызываешь и действуешь исходя из возвращаемого этим методом значения.

:facepalm: может мне ещё и JDK мокать? java.lang.Math.sin, например? А то ж вдруг я его вызываю, да синус считаю. Ты сам-то мокаешь стандартную библиотеку?

Цитата Fester @
Это поле надо будет как-то заполнить. Как ты собираешься это сделать?

Также как и любое другое поле: передам нужное мне значение в конструктор. Ты сходи перечитай мой пример, там в самом конце показано. Или ты не знаешь, как структурки создавать? У тебя что, одни int'ы и double'ы в коде? Не пробовал там
    struct Point {
    double x;
    double y;
    }

написать? Compound data type называется.

Цитата Fester @
(которые на секундочку должны быть полноценными объектами, а еще точнее абстракциями)

С хера ли? Ты что, Егора Бугаенко начитался/насмотрелся? Plain data там, никаких объектов, никаких абстракций.

Цитата Fester @
Если у тебя в классе Transfer будет 10 функций (submit, rollback, list, rejeckt, еще что-то) и все они будут что-то рассчитывать опираять на данные из source и/или destination, то тебе придется добавлять 10 функций твой Request.

:facepalm:
1) у каждой функции своя область определения, значит у каждой будет свой Request
2) нафига перегружать модуль Transfer ещё десятком какимх-то функций? Про Single Responsibility Principle слышал?

Цитата Fester @
А еще Account и Money чтобы работа шла так, как было задумано, а не по умолчанию

:facepalm: Сходи int и (+) замокай, а то вдруг они как-то не так сработают и у тебя всё пойдёт не так как было задумано. И malloc заодно.

Цитата applegame @
ФП и декларативное программирование ортогональные вещи на самом деле.

Ортогональные. Но на ФП как-то код более декларативен получается по-умолчанию.

https://forum.sources.ru/index.php?showtopic=419507&view=findpost&p=3838259


Метки:  

Покупка лицензии на софт от JetBrains

Пятница, 04 Сентября 2020 г. 02:29 + в цитатник
Костик+: Доброго времени суток
Кто-то сталкивался с покупкой именно кода активации для продукции компании JetBrains? Есть ли официальные посредники, кто занимается продажами?
Спасибо

https://forum.sources.ru/index.php?showtopic=419524&view=findpost&p=3838257


Метки:  

Производительность Си в сравнении с Rust

Четверг, 03 Сентября 2020 г. 20:40 + в цитатник
Black_Dragon: JoeUser
Знаем.... Межплатформенные языки, Java, например, если память не подводит.

Qraizer
Было у меня такое. Любитель оптимизировать расчеты просто, так и через OpenMP.
В одной программе были несколько разных тестовых кусков кода (оптимизировал и тестил), и сравнивал i7-4770 (ddr3) и i5-6500 (ddr4) (рабочий и домашний). Часть кода была быстрее на одном проце, другая часть на другом.

https://forum.sources.ru/index.php?showtopic=419518&view=findpost&p=3838249


Метки:  

Производительность Си в сравнении с Rust

Четверг, 03 Сентября 2020 г. 19:22 + в цитатник
Qraizer:
Цитата Sunless @
Есть ли универсальный способ, чтобы проверить, какой из компиляторов сгенерировал более оптимальную программу
Даже нет универсального способа проверять производительность, не то чтобы проверять оптимизированность. Берём, к примеру, две программы, запускаем на одном процессоре, выигрывает первая; запускаем их же на другом, выигрывает вторая. :-?

https://forum.sources.ru/index.php?showtopic=419518&view=findpost&p=3838248


Метки:  

Поиск сообщений в rss_forum_sources_ru
Страницы: 2628 ... 2424 2423 [2422] 2421 2420 ..
.. 1 Календарь