@dlangru

Страница 161 из 719
Dmitry
27.04.2017
08:47:09
Я сервис по обработке геоданных пишу на нем

Oleg
27.04.2017
08:52:13
Ребят, кто-нить юзает dlang в продакшене?
Это просто интерес или перед тобой выбор стоит?

Dmitry
27.04.2017
08:52:28
Исключительно интерес

Dmitry
27.04.2017
08:53:59
"Причина всех проблем с типами данных родом из пятидесятых годов, когда компьютеры были ламповыми. Чем больше ламп, тем больше требуется энергии и косвенных затрат (например, тем быстрее выгорают лампы). Кроме того, задействовать дополнительную память было действительно страшно. У машины могла быть только пара килобайт. К примеру, память Atari 2600 была всего 128 байтов. И поэтому не хотелось выделять 64 бита на то, что могло бы быть представлено 4 битами. И кто-то догадался в целях экономии использовать дополнительную арифметику. Догадка была действительно великолепной. Но, спустя 50 лет, мы должны спросить себя — почему мы все еще делаем это? Аналогичная ситуация сохраняется на других языках. Например, в Java у вас есть byte, char, short, int, long, flot, double и т.п. Каждый раз, когда вам нужно создать параметр, переменную или элемент, вы должны спросить себя, к какому типу будет относится новая структура. Значение сэкономленной при этом памяти настолько мало, что говорить о нем нет смысла. Нет никакой пользы в том, чтобы сделать правильный выбор. Фактически время, которое вы потратили на размышления, стоит бесконечно больше, чем сэкономленный ресурс. Но если вы ошибетесь, все перестанет работать, и тесты это не выявят. Это плохо." Есть мнение что современные системы типов — зло т.к. сильно осложняют разработку. Вот к примеру объявил я переменную как int т.к. не думал, что из БД может ID прилететь больше чем вмещает в себя int и все упало. Мое мнение. Современному языку хватило бы трех целочисленных типов. int - целое float - число с плавающей точкой bool - булевое Это позволило бы значительно ускорить разработку и сократить количество ошибок. Во всяком случае на Питон без типов наверно сотни тысяч человек пишут и живут как-то..)) Ваше мнение?

Google
Grigirii
27.04.2017
08:56:06
знаковость типа - контракт с разработчиком. это дополнительная инфа, которая полезна и для человека и для компилера. Даже всякие checkedInt делают, который диапазоны проверяет. Так что типизация должна развиваться и уточнятся, а не отменяться.

Dmitry
27.04.2017
08:58:43
В какую сторону развиваться? Пока я вижу только что количество тех же целочисленных типов только растет и в итоге вместо "прилетит ли число" нужно думать еще какое число может прилететь и что делать если прилетит число которое не влезет в размерность

Oleg
27.04.2017
09:01:10
"Причина всех проблем с типами данных родом из пятидесятых годов, когда компьютеры были ламповыми. Чем больше ламп, тем больше требуется энергии и косвенных затрат (например, тем быстрее выгорают лампы). Кроме того, задействовать дополнительную память было действительно страшно. У машины могла быть только пара килобайт. К примеру, память Atari 2600 была всего 128 байтов. И поэтому не хотелось выделять 64 бита на то, что могло бы быть представлено 4 битами. И кто-то догадался в целях экономии использовать дополнительную арифметику. Догадка была действительно великолепной. Но, спустя 50 лет, мы должны спросить себя — почему мы все еще делаем это? Аналогичная ситуация сохраняется на других языках. Например, в Java у вас есть byte, char, short, int, long, flot, double и т.п. Каждый раз, когда вам нужно создать параметр, переменную или элемент, вы должны спросить себя, к какому типу будет относится новая структура. Значение сэкономленной при этом памяти настолько мало, что говорить о нем нет смысла. Нет никакой пользы в том, чтобы сделать правильный выбор. Фактически время, которое вы потратили на размышления, стоит бесконечно больше, чем сэкономленный ресурс. Но если вы ошибетесь, все перестанет работать, и тесты это не выявят. Это плохо." Есть мнение что современные системы типов — зло т.к. сильно осложняют разработку. Вот к примеру объявил я переменную как int т.к. не думал, что из БД может ID прилететь больше чем вмещает в себя int и все упало. Мое мнение. Современному языку хватило бы трех целочисленных типов. int - целое float - число с плавающей точкой bool - булевое Это позволило бы значительно ускорить разработку и сократить количество ошибок. Во всяком случае на Питон без типов наверно сотни тысяч человек пишут и живут как-то..)) Ваше мнение?
Полная чушь)

Maxim
27.04.2017
09:01:15
это прям как похапе)

там int всегда знаковый и размер его зависит от разрядности системы

Grigirii
27.04.2017
09:01:36
в сторону уточнения контракта. Если бы CheckedInt не стоил бы столь дорого, я бы использовал его везде. В идеале программист должен указывать диапазон допустимых значений, а компилер проверять, что всё точно влезет. Как пример, парсинг инта из строки. Уже сейчас есть набор типов на 8, 16, 32, 64 бита и функция может проверять размер числа и для каждого типа знать допустимые значения. Поэтому переполнение никогда не возможно - вылетит эксепшен, вернётся ошибка и тд и тп.

Maxim
27.04.2017
09:02:26
и вот как-то раз мне пришлось делать простейший конгруэнтный генератор псевдослучайных чисел на похапе, проклял все на свете)

Grigirii
27.04.2017
09:02:30
В идеале компилирующийся код не должен содержать ошибок - всё должен проверить компилятор. Пока это недостижимо и слишком многословно, но rust, D, C++ быстро движутся в эту сторону

и контракты типов и их размеры - одна маленькая частичка

Dmitry
27.04.2017
09:03:12
Grigirii ну вот в случае с БД. Получается проще лепить тип с запасом т.к. нет гарантии что завтра его размерность не вырастет. Думаю такая ситуация не единична.

Grigirii
27.04.2017
09:03:49
это по факту изменение схемы БД, она всегда требует обновления использующего кода

Maxim
27.04.2017
09:04:07
на самом деле, как миниму на архитектуре x86 обилие целочисленных типов обусловлено разрядностью операндов, над которыми способен выполнять операции процессор)

Grigirii
27.04.2017
09:04:09
и не забывай, что для производительности это может быть чертовски важно

Google
Maxim
27.04.2017
09:04:27
если язык претендует на близость к железу, он без этих типов не обойдется

Dmitry
27.04.2017
09:05:03
Если я не ошибаюсь в Dart есть тип типа "Num" — типа число и еще какие-то типы общего плана

Grigirii
27.04.2017
09:05:06
сейчас AVX ограничен общим размером операндов. Если юзать 64 бита против 32, то можно сделать вдвое меньше операций за такт

Maxim
27.04.2017
09:05:13
а экономии места при объявлении byte вместо int в современных программах не будет, потому что все равно память съестся выравниванием)

Maxim
27.04.2017
09:09:00
нет, если это важно
ну тут в большинстве случаев дело компромисса: либо память, либо скорость)

Oleg
27.04.2017
09:09:06
если используется передача данных по сети, серийному порту, между цп и видеокартой: везде это важно и значительно экономит место

если не вообще делает возможным передачу

Maxim
27.04.2017
09:10:05
мы же сейчас говорим не про передачу данных между периферией, а про расположение переменных в памяти)

Oleg
27.04.2017
09:10:31
а как они по твоему будут располагаться в памяти, если ты выровняешь по 1 байту их?

там не будет никаких пробелов

Maxim
27.04.2017
09:11:12
ключевое тут: если выровняешь)

Oleg
27.04.2017
09:11:16
изображения, видео, там тоже важен размер типа данных

ключевое это то что подход "всегда использовать long" бред

и существует огромное количество случаев, где это делать нельзя

Maxim
27.04.2017
09:12:08
а если нет, то в большинстве случаев все, что меньше dword в x86 и мешьше qword в amt64, выровняется по dword и qword соответственно

Oleg
27.04.2017
09:12:31
и?

только из-за оптимизации скорости доступа

Maxim
27.04.2017
09:12:50
именно)

о чем я и говорил)

Google
Oleg
27.04.2017
09:13:25
а я говорю об изначальном утверждении, которое Дмитрий привёл

типа время затраченное на выбор типа не окупается

Maxim
27.04.2017
09:13:57
обилие целочисленных типов обусловлено не экономией памяти, а тем, что с такими типами операндов работает процессор, и в языках, близких к железу, без этого не обойтись)

по идее, можно строго для себя решить, что пока ты работаешь с базами данных, клепаешь сайтики и всякие консольные утилиты, используй только подмножество целочисленных типов (int или long, например), и проблема будет решена)

а как только приходится гонять данные по серийным портам или, не дай бог, по isa шине какой-нибудь, используй весь набор)

Oleg
27.04.2017
09:17:38
а раньше больше обработка была

и никогда не задавался вопросом "а нужны ли мне типы разные"

потому что они нужны

без них никуда

только сайтики и бд

Maxim
27.04.2017
09:19:01
ну обычно такие вопросы возникают у людей, которые не сталкивались тесно с железом и считают программирование исключительно математической дисциплиной)

Dmitry
27.04.2017
09:20:08
Ну весь фронтэнд такой...

Мнение из соседнего окна: "Плюс типизация даже на уровне int, bool, float сильно снижает скорость “хакерского” программирования, или “прототипного”, как я его называю - когда ты ещё точно не знаешь какие будут параметры, что будет возвращаться, ты просто пишешь код тоже самое со структурами данных Мне кажется невозможно быстро набросать прототип кода если приходится думать о HasMap, HashSet, LinkedArray и т.п. по сути всё что для этого нужно - обычный массив и ассоциативный и всё - можно напрототипировать очень быстро, а качество кода подтянуть через несколько итераций (а лучше с ноля переписать нормально, разнести на функции и тп)"

Maxim
27.04.2017
09:21:47
тогда идеальный язык для прототипирования - это похапе 7)

я иногда кромольными делами занимаюсь и использую его как замену bash-скриптам, если нужно сделать что-то более менее сложное)

с rdmd действительно больше времени татится на разработку, но количество потенциальных ошибок обычно гораздо меньше

Oleg
27.04.2017
09:24:01
да и к тому же есть вообще auto и шаблоны

если уж совсем пофигу какой тип

Google
Dmitry
27.04.2017
09:31:07
А про то что отчет с нуля начинается кто что думает?) Есть мнение что можно было бы нормально жить если бы все от единицы считалось)

Тем более в Delphi (кажется) и Julia именно так и сделано

Maxim
27.04.2017
09:33:23
подозреваю, это как-то связано с адресацией сегмент:смещение)

Dmitry
27.04.2017
09:34:29
мнение: поправки на уровне смещения и тд можно было делать на уровне компилятора про математику: Julia создана математиками для математиков

qwerty
27.04.2017
09:34:38
хотя там тоже отчет не всегда с 0 начинается

Денис
27.04.2017
09:57:27
А про то что отчет с нуля начинается кто что думает?) Есть мнение что можно было бы нормально жить если бы все от единицы считалось)
А в чём разница вообще? Единственная неудобность в отсчете с 0, так это то, что где-то отсчёт с 1. Просто когда пишешь в матлабе или октаве прототип, а потом надо переписать на нормальном языке неудобно вспоминать где 0, а где 1. Был бы единый стандарт, что везде начинаем с 0, или везде с 1 и проблем бы вообще никаких не было бы.

Dmitry
27.04.2017
09:58:07
ну вот тут вся и фишка, что людям удобнее с 1 считать и язык программирования должен это учитывать

Grigirii
27.04.2017
10:00:19
ага, а кто будет учить процессор сравнивать с 1, а не с 0? Куча алгоритмов и оптимизаций стоится на этом самом ноле. Тривиальная работа итераторов ломается, их разность перестанет быть разностью указателей, да и много таких следствий. Всё решаемо, но зачем, если и так всё хорошо работает?

Pavel
27.04.2017
10:28:04
Я не понял, если тот чел написал что всем хватило бы только трех типов для написания программ, то что мешает ему начать писать его программы только с тремя типами то? Вот выложил бы исходник и сказал бы "посмотрите как здорово получается"

Admin
ERROR: S client not available

Dmitry
27.04.2017
10:29:09
Не, про три типа хватит всем это моя идея. Тот вообще без типов предлагает жить)

Pavel
27.04.2017
10:29:28
Ну ок ок, где его исходники?

Dmitry
27.04.2017
10:29:38
Я из языков с подобной типизацией только Dart видел, хотя там точно не помню какие типы еще есть

Pavel
27.04.2017
10:30:09
Я предлагаю всем жить счастливо и богато, давайте так и сделаем? Кто согласен? =)

Dmitry
27.04.2017
10:31:39
Grigirii просто получается отсчет с нуля нужен исключительно для системных языков. Опять таки все что уровнем чуть выше (типа Delphi) и уже можно смело с единицы считать

qwerty
27.04.2017
10:39:16
И каждый раз, когда программист переключается с одного языка на другой должен иметь привычку переключаться с одного отсчета на другой

Maxim
27.04.2017
10:41:01
вообще, я подозреваю, мода такая пошла и Си, а в Си такой подход вполне оправдан, т.к. массивы в Си - это просто указатель на начало)

грубо говоря foo[i] там равнозначно foo+i

ну а дальше это просто опыт предков - начинать считать с нуля)

Google
Pavel
27.04.2017
10:42:47
А если бы [i] означало i-1 то все было бы здорово

Maxim
27.04.2017
10:43:14
и программистам пришлось бы держать это в голове)

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

Grigirii
27.04.2017
10:47:24
да дело не только в указателях. арифметика с нолём гораздо более удобная по сравнению с 1. Срез с [i, j] пуст если i == j, можно оперировать вличиной j-i. Точно так же удобна итерация по i < length против i <= length. Это такие области, которые и так непросты, а 1 всё усложняет

Dmitry
27.04.2017
10:56:07
Кстати, вопрос. А никто логических косяков в следующем коде не видит? Он у меня строго при обработке второго элемента в цикле падает:

Первый норм, а во втором сразу в catch

проблема уходит если закомментить строку auto answer

Оказалось, что auto result = cmd_nearesPointOnRoad.executeQuery(); обязателньно нужно закрывать

Кстати, а в чем может быть причина и как бороться. У меня следующий цикл не обрабатывает прерывание по ctrl+с на Windows:

подозреваю что дело с continue

Maxim
27.04.2017
12:10:52
а он должен?)

Dmitry
27.04.2017
12:11:49
а разве нет? это же типа сигнал что приложению унжно убиться

Maxim
27.04.2017
12:12:13
в Windows, насколько помню, для этого есть SetConsoleCtrlHandler

в юниксах, да, шлется сигнал процессу

Dmitry
27.04.2017
12:12:58
просто остальные приложения убиваютя нормально, но вот после добавления подобного цикла все перестало работать

Maxim
27.04.2017
12:17:21
честно, давно ничего консольного для винды не писал, но, насколько помню, программы с бесконечными циклами по ctrl+c в винде не завершаются, для этого обработчик с флагом нужно делать через SetConsoleCtrlHandler

а в D дополнительно не забыть переменную-флаг объявить как __gshared

Dmitry
27.04.2017
12:18:16
Просто когда у меня continue было в блоке catch то все работало

Кстати, а сколько времени writeln занимает? Оно же блокирующее. Пока не напишется код дальше не идет, верно?

Maxim
27.04.2017
12:53:44
верно

Страница 161 из 719