LINUX.ORG.RU

Golang в крупных проектах возможен (back)?

 


0

6

В enterprise например, да и вообще где нужно много бизнес-логики?

Встречал мнение, что этот язык плохо для этого подходит. Хочу разобраться почему. Там нет фреймворков уровня Laravel/Spring? Скорее всего позже добавят. Отсутствие привычного ООП мешает его юзать? Нельзя обойтись текущими средствами Go?


Ответ на: комментарий от asdpm

ты не лучший объяснитель вещей

Так обезъян не учитель и не ставил себе такой задачи. Мне попробовали предъявить за мой фразу, я раскидал, с примером (уже на нескольких языках). Написал что гуглить (хотя это гуглится все даже без подсказок), оставил домашнее задание на выходные так сказать - бестолку.

Если собеседники не могут банально проверить то о чем идет речь, то как вообще с ними что-то обсуждать? Они просто закусили удила, поэтому не важно поймут они что-то или нет, я просто зоонаблюдаю как они сами себя обоссывают и иногда добавляю струю.

Остальные давно поняли о чем речь и перестали спорить, копнув вопрос.

Obezyan
()
Ответ на: комментарий от opcode

Тот случай когда жаль что нельзя одновременно поставить клоуна и фейспалм.

Мы говорим о проблеме float-ов в стандарте IEEE-754. Один из двух оставшихся хомо эректусов на голубом глазу пытается подсунуть from decimal import *.

Obezyan
()
Ответ на: комментарий от Obezyan

этот пример ничего не доказывает, как и следующий и int

jshell> (2147483647 * 2) / 2
$21 ==> -1

jshell> 2147483647 * (2 / 2)
$22 ==> 2147483647

как впрочем и контр-примеры, очевидно не использующие float

C-style arbitrary precision calculator (version 2.15.0.6)
; (0.1 + 0.2 - 0.3) * 10**17
	0
asdpm
()
Ответ на: комментарий от LamerOk

если я правильно понял, он изначально говорил о float, чтобы считать процессором. ты же понимаешь, что несмотря на то, что «проблемы» такой нет - просто не используй float а считай «программно» (в SQL есть, даже в php есть, C# это вообще встроенный value type), всё же например C код считающий через какой-нибудь gmp (хотя я не сравнивал) может оказаться медленнее такового на float/double, особенно если последний векторизовался. а тут нам говорят, что тот же код якобы на самом деле мог бы считать точнее.

да и дефолтом в большинстве языков является не decimal или arbitrary precision библиотека, а float: литерал 1.5 - в большинстве языков это float. вроде в lua вообще все нумерические литералы это float (и еще в каком-то языке так же сделано)

asdpm
()
Ответ на: комментарий от Obezyan

я понял, но твой пример демонстрировал, что «можно используя порядок эвалюации вывести значение за пределы, где этот тип данных нормально работает». и тебе прекрасно понятно, что это принцип общий

asdpm
()
Ответ на: комментарий от LamerOk

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

На этом пожалуй закончим, я устал от тупости собеседников, одни виляния жопками. Видимо таки поняли насколько попали в просак и теперь «перед пацанами стыдно» давать заднюю. Все надеяться выпетлять.

Обезъян желает вам эволюционировать. Обнял, покружил, поставил на место.

Obezyan
()
Ответ на: комментарий от asdpm

я понял, но твой пример демонстрировал, что «можно используя порядок эвалюации вывести значение за пределы, где этот тип данных нормально работает». и тебе прекрасно понятно, что это принцип общий

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

Я привел максимально наглядный и известный пример. Можно привести еще бесконечное количество подобных. Думал, что начав гуглить (0.1+0.2-0.3) люди сразу найдут о чем речь и успокоятся, но нет, позориться - так до конца.

Им теперь только пароль выкладывать после такого.

Obezyan
()
Ответ на: комментарий от Obezyan

кажется я понял, что бы призван продемонстрировать тот пример, если это так, беру свои слова про пример назад.

я например тупой и сам не смогу за пределами совсем простого «вынеси за скобки» как в том примере. то есть если там и можно вероятность проблемы снизить, то я могу надеяться только что gcc/jvm за меня это сделает (и что не сделает наоборот). но оно не сможет, потому что даже видя «формулу» не знает, что там будет в рантайме.

у меня был код на C где разница типа 0 / 5.5511 повлияла бы по крайней мере на визуальный результат (возможно та программа работает неправильно, но конкретно в ней ничего критичного). причем программа считала два часа на питоне и после переноса функции в С стала считать 30 секунд, то есть decimal/gmp там «не канает». от любой дополнительной точности float (за небольшую цену) в той программе я бы точно не отказался

asdpm
()
Ответ на: комментарий от Obezyan

Вы в очередной раз проигнорировали ключевой момент:

разумеется, мы все ожидаем, что ты говоришь о числах в формате IEEE 754, а не распечатке в ASCII хрен пойми откуда взятых десятичных дробей

Пожалуйста, продемонстрируйте над какими величинами в формате IEEE 754 производятся вычисления в этих выражениях, а затем покажите почему вы считаете эти две последовательности вычислений тождественными.

opcode
()
Ответ на: комментарий от asdpm

кажется я понял, что бы призван продемонстрировать тот пример

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

у меня был код на C

у меня тоже, в том числе и тот который через CUDA работает на видеокартах и где порядки, бывает, доходят до 2^256 со всякими реализациями BIG NUMBERS. При таких расчетах появление значений «около нуля» интервал (0,1) приводит к лавинообразному накоплению ошибки. Приходится стараться разделять примерно как вы описали, но это не всегда возможно. Если тема вам интересна, могу предложить ознакомиться с вот этим.

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

Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 2)
Ответ на: комментарий от asdpm

если я правильно понял, он изначально говорил о float, чтобы считать процессором.

Это не существенно.

(0.1 + 0.2 - 0.3)
Обезьян пытается объяснить что в нормальном стандарте ответом был бы ноль.

а следовательно нет мотивов чистить мусор в младших разрядах при его превращении в десятичную строку.

Проблема в непонимании простейшей школьной математики, уже всё сказано раз два.

При преобразовании любой "обычной" по одному основанию дроби в дробь по другому основанию, будет вероятность получения бесконечной дроби. И тут "точность" расчётов (про которую тут распинается наш хвостатый друг) не имеет вообще никакого значения. Сколько бы битов ты не насыпал, в конечном итоге дробь придётся округлить на последнем знаке. Соответственно гарантировать, что расчёты в дробях по одному основанию дадут идентичные результаты после конвертации в дроби с другим основанием в принципе нельзя. Ни основания дробей, ни размерность чисел значения не имеют.

Именно это происходит с конвертацией десятичного 0.1 в дробь по основанию 2.

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

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

сам не смогу за пределами совсем простого «вынеси за скобки» как в том примере.

Вынос за скобки и прочие алгебраические преобразования вообще тут не при чём. Алгебраическими преобразованиями можно вообще много чего сделать, но это (пока) не задача арифмометра.

LamerOk ★★★★★
()
Последнее исправление: LamerOk (всего исправлений: 1)
Ответ на: комментарий от LamerOk

(0.1 + 0.2 - 0.3)

Обезьян пытается объяснить что в нормальном стандарте ответом был бы ноль.

Не надо извращать мои слова.

Обезъян пытался объяснить что давно пора добавить доп проверки которые проверяют появление слишком отличающейся разрядности (вверх, вида 10^17 или вниз, в ситуации наоборот) в ряду операндов около нуля и преобразует выражение замедляя! таким образом накопление ошибки.

Для замедления накопления ошибки в 2008м году добавили FMA (fused multiply-add) и обозвали обновленный стандарт: IEEE754-2008 Это позволило снизить накопление ошибки. В будущем стандарте будут еще подобные улучшения и проверки.

Ну прочитайте хоть про FMA, ну нельзя быть такой бестолочью. Ай все, нафиг.

Obezyan
()
Ответ на: комментарий от Obezyan

Вы так резво сыпете демагогическими уловками, что приходится уже отгадывать, какой же из выдвинутых вами тезисов вы сейчас пытаетесь отстоять:

  • вы знаете некие «баги» в стандарте IEEE-754

  • эти «баги», мешающие получению достаточной точности арифметических вычислений, никаким ЯП не победить

Пока что ничего убедительного представлено не было.

opcode
()
Ответ на: комментарий от Obezyan

Обезьян пытается объяснить что в нормальном стандарте ответом был бы ноль.

Не надо извращать мои слова.

Чувак - это литерально цитата тебя буква в букву.

давно пора добавить доп проверки

Нет, не пора. Потому что тогда воспроизводимость арифметики полетит к чёрту. Загугли, зачем в жаве ключевое слово strictfp.

которые проверяют появление слишком отличающейся разрядности

И каков будет численный критерий «слишком»? На глазок? Примерно так почувствовать?

Не высокая точность операций между находящимися на разных по порядку концах представимого спектра чисел будет проблемой в любой размерности системах с плавающей точкой - это арифметическое свойство самой системы. Совершенно не понятно, с какого хрена вот прям именно сейчас её ВНЕЗАПНО надо почему-то "решать".

и преобразует выражение

А разложение суммы квадратов еще, случайно, делать не надо?

Ну и да, ловко ты переобуваешься с тезиса на тезис по ходу пьесы.

LamerOk ★★★★★
()
Последнее исправление: LamerOk (всего исправлений: 1)