LINUX.ORG.RU

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

 


0

6

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

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


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

У меня попросили пример, я дал. В ответ суют свои примеры. Ну да ладно.

негодный язык

Причём тут язык?

0.3 в IEEE 754 невозможно было выразить точно до 2008 года. Это баг который исправили в IEEE 754-2008 - ввели десятичное представление и там 0.3 это 0.3. Но вы ведь о них даже не слышали.

Короче, вам всем ДЗ на выходные, гуглите Густофсона и его unum числа II и III типа. Самые любознательные могут прочитать книгу The end of Error.

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

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

Причём тут язык?

Тыж говорил что баг в языках. Получился очень такой жирный наброс.

Возможно когда-нибудь завезут в процессоры общего назначения decimal floating point ALU, только даже тогда эта фича будет еще много лет присутствовать как расширение, использовать его будут разве только математические либы.

Может лет через 20 какие-нибудь высокоуровневые языки/платформы начнут переключаться на использование DFP арифметики по дефолту, и это событие будет в новостях.

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

Кстати, я сейчас даже не вижу проблем чтоб в CPU использовать DFPU потому как сейчас быстрый FPU и не нужен. Он был необходимостью раньше, в 90-х для игрушек, когда в видеокартах не было блока T&L, позже эволюционировавшего в шейдеры. Я даже не знаю для чего он сейчас используется вне игрушек, декодинг мультимедиа стоит на целочисленных. Интерфейсы операционных систем теперь рисуют на GPU. FPU используется только там где нужна и допустима аппроксимация, какой-нибудь аудио фильтр/эквалайзер и трансформации в фотошопе.

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

Тыж говорил что баг в языках. Получился очень такой жирный наброс.

Я написал:

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

Языки содержат баги тех стандартов которым они соответствуют. Это не вина языка что стандарт срезает углы обосновывая косяки архитектуры. Это залипухи уровня вычислений в 80 битных регистрах ALU с принудительно преобразованием результата в 64битный вариант на основе правил округления стандарта.

Возможно когда-нибудь завезут в процессоры общего назначения decimal floating point

Завезли в стандарт в 2008м. Возможность использования есть в Python и .Net. Ждём остальных правок о которых я писал ранее.

Может лет через 20 какие-нибудь высокоуровневые языки/платформы начнут переключаться на использование DFP арифметики по дефолту, и это событие будет в новостях.

Я честно рад что вы похоже действительно поняли о чём я писал. Мой прогноз - ближайшие 5 лет появление этого всего в стандарте и ещё год до появления обновлений, как аппаратный так и программных.

Кто из нас прав по срокам покажет время.

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

Получился очень такой жирный наброс.

Это был не наброс, товарищ действительно не понимает о чём говорит, только пару новых слов со вчерашнего дня выучил и свёл всё к унылому тупняку.

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

FPU используется только там где нужна и допустима аппроксимация

И даже FPU используется, только если вы сами это укажете. А так современные компиляторы для обработки float уже довольно давно SIMD код генерируют.

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

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

вот простейший пример

(0.1 + 0.2 - 0.3) * 10**17

Поясню, а то вы туговаты

Да-да, это я туговат.

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

Возможно когда-нибудь завезут в процессоры общего назначения decimal floating point ALU, только даже тогда эта фича будет еще много лет присутствовать как расширение, использовать его будут разве только математические либы.

Ты решил помочь обезяну троллить тупостью? BCD существуют хрен сколько лет и были даже в этих наших x86 / i386. Умерло за невостребованностью.

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

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

Да-да, это я туговат.

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

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

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

Внезапно, реализация тех же самых цифр тем же самым методом даёт тот же самый результат. Кто бы мог подумать. Зато, можно и так:

CL-USER> (+ 1/10 2/10)
3/10
ugoday ★★★★★
()
Ответ на: комментарий от Aber

Ну, раз уже мы положили, что допустимым ответом является «это не бред, так написано в стандарте, учи стандарт», то сложные математиские выражения вроде 2 + 2 или 0.1 + 0.2 могут в общем случае равняться чему угодно, смотря к какой волшебной книжке обращается читатель.

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

Ну, раз уже мы положили, что допустимым ответом является «это не бред, так написано в стандарте, учи стандарт», то сложные математиские выражения вроде 2 + 2 или 0.1 + 0.2 могут в общем случае равняться чему угодно, смотря к какой волшебной книжке обращается читатель.

Ну и к чему эта унылая клоунада? Если тебе нужна арифметика с дробями по основанию 10, то используешь соответствующие инструменты - от DECIMAL в базах данных, до decimal в питоне / дотнете и прочих BigDecimal. Если ты используешь плавающую точку в IEEE 754 определённой разрядности - то получаешь арифметику по этим правилам.

Какой смысл несут все эти пафосные подвывания, закатанные глаза и заломанные руки пьяной поэтессы?

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

могут в общем случае равняться чему угодно

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

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

серьезно достает отсутствие таймаутов у средств синхронизации. потому что без таймаутов просто невозможно написать устойчивый код.

на самом деле таймаутов недостаточно. Нужно асинхронное API (а на него уже и таймауты навешиваются). Странно в golang этого нет, хотя механизм cancellation на первый взгляд весьма развит.

В интернетах советуют вместо асинхронного мьютекса использовать канал. Я к сожалению не разбираюсь в Golang, поэтому не могу оценить плюсы и минусы этого решения.

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

Нужно асинхронное API (а на него уже и таймауты навешиваются).

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

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

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

даже и не понятно, а по какому поводу истерика то?

Сограждане, не видящие никаких шероховатостей в высказываниях: „В стандарте нет проблем, потому что стандарт тождественно равен сам себе“, вызывают у меня сложные чувства. А так всё нормально.

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

ну вот есть стандарт на ток в сети, и там допуск ±10 процентов по напряжению. Вы как производитель оборудования должны учитывать, что никто вам не гарантирует ровно 230 вольт, и если утюг вашего производства сгорел, это не проблемы стандарта, это ваши проблемы. Если ваша программа работает с числами стандарта IEEE 754 и в программе баг из-за того, что вы не учли особенностей стандарта и решили тупенько сравнить два флоата на равенство, это стандарт виноват или вы?

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

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

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

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

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

как можно внешнюю операцию, не пойми в каком состоянии находящуюся, остановить? непонятно что вы хотите.

пример приведите

alysnix ★★★
()
Ответ на: комментарий от ugoday

Бедненький, покупаешь в магазине бутылку, на которой крупным капсом написано «вода», приносишь домой, а в ней.. шок! сенсация! в ней вода! Вечер испорчен.

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

как можно внешнюю операцию, не пойми в каком состоянии находящуюся, остановить?

применительно к Go достаточно, чтобы эта операция была context aware.

Вот как раз пример такого мьютекса: https://h12.io/article/go-pattern-context-aware-lock

Вот ещё: https://github.com/viney-shih/go-lock

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

Сограждане, не видящие никаких шероховатостей в высказываниях: „В стандарте нет проблем, потому что стандарт тождественно равен сам себе“, вызывают у меня сложные чувства.

Сограждане, утверждающие, что "стандарт содержит ошибки, потому что его поведение отличается от моего манямирка", вызывают куда как более сложные чувства.

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

Сограждане, утверждающие, что "стандарт содержит ошибки,

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

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

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

Это нормально, если проблема стандарта продемонстрирована на конкретных примерах. Тогда это предметное обсуждение. Если же весь широко используемый много лет на практике стандарт объявлен "неправильным" и заявлено, что "в нём ошибки", но вместо прикладных проблем в эксплуатации демонстрируется полное непонимание школьной арифметики - то это просто тупняк, а не "критический взгляд" на стандарт.

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

стандарт всегда правильный, потому что соответсвует сам себе

Стандарт «правильный» или «неправильный» – это ваша оценка, ваши эмоции. Но это вообще не его функция. Стандарт описывает нечто, соответствующее/удовлетворяющее его описанию.

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

Да, требовать могут надзорные или сертификационные органы, но стандарт-то тут причём.

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

Все физические константы иррациональны, но человеку конечно удобнее с рациональными.

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

Иначе говоря, физика спокойно может обходиться рациональными числами, но математика, используемая физиками, так поступать не хочет, поскольку никто не хочет вместо g(x)dx = df(x) писать |g(x)dx - df(x)| < epsilon для любого наперёд заданного epsilon.

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

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

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

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

Прекращайте клоунаду. Вам показали пример где нарушается базовый закон математики - результат без раскрытия скобок и с раскрытием скобок не равнозначен.

У текущего стандарта 3 основные проблемы:

  1. Плохая точность при разнознаковых вычислениях.
  2. Плохая точность при расчетах около нуля.
  3. Плохая точность при расчетах у бесконечности.

Я показал пример покрывающий первые два пункта с которым просто невозможно спорить, но вы поймали клин и не можете этого понять.

Это все ИЗВЕСТНЫЕ проблемы, о которых знают авторы стандарта и их комментарий сводится к тому что им в те года нужно было сделать стандарт который позволяет БЫСТРЫЕ общедоступные вычисления в ущерб точности и правильности результата. Это все гуглится.

Вы продолжаете отрицать реальность. Непонятно зачем.

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

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

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

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

А началось все с Go и бизнеса )

Сам спор начался с моего комментария в котором некоторым не понравилось моя фраза:

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

Меня попытались за нее притянуть, я объяснил более подробно что проблема в стандарте, который за основу берут и производители чипов и создатели языков (что логично). Самые толковые по ходу беседы освежили вопрос, почитав-погуглив и все поняли. Осталась буквально парочка самых тугих упорствующих в своем в агрессивном невежестве и глубоко зевающих :)

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

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

Сколько тебе чиселок надобно, долбодятелко?

irb(main):001:0> 42**13 
=> 1265437718438866624512
irb(main):002:0> 42**13  * 1024
=> 1295808223681399423500288
irb(main):003:0> 42**1024
=> 1611659778140961614931776885264212089964580238523769753713456869960997438133777219181894288410479598319125008603460315390217954865340533448646842615521079931704679497013347539935493221396258047544697750303233850259616442193621063016100687660808674689019973059120823942852632365238891691019498467084913737150474680528353538736853965696753378547440048975024746901163067406897394274761492599889004483279360942976995539445213558238897996862667960206870415234939738394964607369974186781123568046348501472873590947963378852171523799983177547149058037057272314349847749284404048709338335825516966982698496177016752070134014246722079096725247060861484911527439487963128996773880859943120164939229697856603992974973291536859492695455575969760639121912704055997723692344994632587316213080674594144099270842806277986436628009840049351086432201658774676528946794591864659294213911792223208785716231827473436903909618912040291677342060261128371270937092765806591945991259108637192596507975192878083807317203699612352220570956973179723422190835812828811956441007844697752791461915024937484096069681812942913549624530020299628609187373834369544645186360565729311363571282928824678820726247525181935732552979880627672071246611745501612515209755521862988502623718609120613833466921111127324850912051655922935910499696374500532691317412114010307279303198926784254551653182424238763980385290100113017806063235522921771362602087953397815411437655612949487220624565848386033545286411954753725589841706061729165201225777816251209642857711499757701293405450691469967797536533336081934689966110713625514348049453350552365237375748680798424279634300687051165656692693137052220088486199296
irb(main):006:0> require 'bigdecimal'
=> true
irb(main):007:0> 
irb(main):008:0> sum = BigDecimal("0")
=> 0.0
irb(main):009:1* 10_000.times do
irb(main):010:1*   sum = sum + BigDecimal("0.0001")
irb(main):011:0> end
=> 10000

С какого числа знаков "победу" отсчитывать будем?

Это был риторический вопрос, я знаю, что ты сейчас уйдёшь в отрицание и обосрёшься признать, что с тезисом «программой не победить (проблема точности вычисления чисел)» ты облажался. В этом треде - уже второй раз.

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

долбодятелко

у вас в голове сидит, тк вы не смогли противопоставить ничего моему примеру и сорвались на визг. Судя по вашему уровню вы очередной рубист из Днепра, но не суть.

Пусть будет руби, в принципе, я могу обоссать вас на 20+ современных языков, смотрите:

puts (0.1 + 0.2 - 0.3) * 10 ** 17
puts (0.1 * 10 ** 17 + 0.2 * 10 ** 17 -0.3 * 10 ** 17)

выводит:

5.551115123125783
0.0

А ведь это просто раскрытие скобок. Стандарт, допускающий нарушение ассоциативности.

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

упорствующих в своем в агрессивном невежестве

Уже и яростное гугление и терзание LLM испробованы, а результат всё тот же. Пока ваш запал не иссяк, освежите в памяти и произведение Крылова «Мартышка и очки».

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

Пока ваш запал не иссяк, освежите в памяти и произведение Крылова «Мартышка и очки».

Мартышка обоссала вас обоих. Пример выше, аргументов как-так от вас не поступило только оскорбления. Обтекайте :)

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

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

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

asdpm
()