История изменений
Исправление
asdpm,
(текущая версия)
:
возьмем три строчки из того файла:
ln.mu.Lock()
ln.channels = appendIfNotExists(ln.channels, channels...)
ln.mu.Unlock()
-
почему в языке якобы хорошо приспособленном для конкурентного программирования, лок захватывается вручную? в языке нет синкронайзед блоков? нет синкронайзед методов? ок, они так решили. но чем это лучше в сравнении с prior art в лице банальной джавы, сишарпа? ничем. чем это «понятнее»? ничем.
-
почему в языке якобы хорошо приспособленном для конкурентного программирования, лок отпускается вручную? все те же вопросы из пунка 1. этот язык слишком прогрессивен чтобы делать как принято в индустрии? язык слишком особенный?
-
кто отпустит блокировку если вызов appendIfNotExists привет к панике или как там оно у них называется? ну раз синкронайзед блоки не хотят, то может быть тогда try-with-resource/context-managers? ок, возможно в голанге какая-то своя магия, но может быть тогда блок finally? в языке есть блок finally? лок-то кто отпустит?
-
далее мы видим проверку ошибки из каменного века и понимаем, что паника из appendIfNotExists() рассматривается автором как невозможная в принципе. наверное этот голанг как-то это гарантирует (он же язык прогрессивный), и автор об этом знает откуда-то, хорошо, ок. но я бы не сказал, что это «читабельный и понятный» язык.
-
после проверки видим return и тут возникает догадка (всего лишь догадка!), что блокировку автор отпустил сразу же после вызова не только потому что он молодец и старается ее долго не держать, а потому, что нет механизма ее автоматического снятия (и плюс синтаксического воплощения этого механизма). и если он не снимет ее сразу, то он либо ошибочно забудет ее, либо ошибочно снимет дважды, либо таки соорудит что-то в духе goto на хвост функции (всё новое - это хорошо забытое…). возможно я не прав, и всё тут совсем не так работает и вообще по другому развивается, но тогда за этим кодом стоит слишком много неявных, частных семантических аспектов или даже «магии». ну или может быть просто этот язык не взял планку, которую взяли очень многие, включая дубовую жаву.. лет так примерно 20 назад.
-
если бы между захватом и отпусканием менялось состояние доступное за пределами этой функции, то чтобы его можно было корректно прочесть, нужны SA. и вероятно здесь они лок/анлок.
далее я вынужден признать, что буду говорить на основании полузабытых и возможно ошибочных воспоминаний.
как-то я пытался этот вопрос относительно голанга выяснить, и обнаружил, что у голанга вместо модели памяти документ, суть которого сводиться к «ничему». то есть если жава годами над этим билась и смогла, и по сей день тратит ресурсы на это, то голанг считает, что он особенный. нет, не по техническим причинам, а просто потому что они сами для себя сделали исключение. ну действительно зачем ее формулировать, потом гарантировать ее соблюдение, тратить деньги на это, да еще и на нескольких платформах. пусть будет всё через гонку, пусть программы будут потенциально сломаны или сегодня корректны, а завтра сломаны. там в тексте конечно не так было написано, но по итогу-то оставалось именно это.
это убогий язык, который сильно не соответствует своему имиджу, авторы которого сделали говно и предпочитают не признавать ошибки и не решать проблемы, а забалтывать их, убеждать программистов в том, что это не проблемы вовсе. проект в значительной степени обязанный своему успеху маркетингу, хайпу, зомбированию и intellectual dishonesty - не редкость вовсе, просто в данном случае это не фреймворк какой-нибудь, а аж целый язык программирования.
Исходная версия
asdpm,
:
возьмем три строчки из того файла:
ln.mu.Lock()
ln.channels = appendIfNotExists(ln.channels, channels...)
ln.mu.Unlock()
-
почему в языке якобы хорошо приспособленном для конкурентного программирования, лок захватывается вручную? в языке нет синкронайзед блоков? нет синкронайзед методов? ок, они так решили. но чем это лучше в сравнении с prior art в лице банальной джавы, сишарпа? ничем. чем это «понятнее»? ничем.
-
почему в языке якобы хорошо приспособленном для конкурентного программирования, лок отпускается вручную? все те же вопросы из пунка 1. этот язык слишком прогрессивен чтобы делать как принято в индустрии? язык слишком особенный?
-
кто отпустит блокировку если вызов appendIfNotExists привет к панике или как там оно у них называется? ну раз синкронайзед блоки не хотят, то может быть тогда try-with-resource/context-managers? ок, возможно в голанге какая-то своя магия, но может быть тогда блок finally? в языке есть блок finally? лок-то кто отпустит?
-
далее мы видим проверку ошибки из каменного века и понимаем, что паника из appendIfNotExists() рассматривается автором как невозможная в принципе. наверное этот голанг как-то это гарантирует (он же язык прогрессивный), и автор об этом знает откуда-то, хорошо, ок. но я бы не сказал, что это «читабельный и понятный» язык.
-
после проверки видим return и тут возникает догадка (всего лишь догадка!), что блокировку автор отпустил сразу же после вызова не только потому что он молодец и старается ее долго не держать, а потому, что нет механизма ее автоматического снятия (и плюс синтаксического воплощения этого механизма). и если он не снимет ее сразу, то он либо ошибочно забудет ее, либо ошибочно снимет дважды, либо таки соорудит что-то в духе goto на хвост функции (всё новое - это хорошо забытое…). возможно я не прав, и всё тут совсем не так работает и вообще по другому развивается, но тогда за этим кодом стоит слишком много неявных, частных семантических аспектов или даже «магии». ну или может быть просто этот язык не взял планку, которую взяли очень многие, включая дубовую жаву.. лет так примерно 20 назад.
-
если бы между захватом и отпусканием менялось состояние доступное за пределами этой функции, то чтобы его можно было корректно прочесть, нужны SA. и вероятно здесь они лок/анлок.
далее я вынужден признать, что буду говорить на основании полузабытых и возможно ошибочных воспоминаний.
как-то я пытался этот вопрос относительно голанга выяснить, и обнаружил, что у голанга вместо модели памяти документ, суть которого сводиться к «ничему». то есть если жава годами над этим билась и смогла, и по сей день тратит ресурсы на это, то голанг считает, что он особенный. нет, не по техническим причинам, а просто потому что они сами для себя сделали исключение. ну действительно зачем ее формулировать, потом гарантировать ее соблюдение, тратить деньги на это, да еще и на нескольких платформах. пусть будет всё через гонку, пусть программы будут потенциально сломаны или сегодня корректны, а завтра сломаны. там в тексте конечно не так было написано, но по итогу-то оставалось именно это.
это убогий язык, который сильно не соответствует своему имиджу, авторы которого сделали говно и предпочитают не признавать ошибки и не решать проблемы, а забалтывать их, убеждать программистов в том, что это не проблемы вовсе. проект в значительной степени обязанный своему успеху маркетингу, хайпу, зомбированию и intellectual honesty - не редкость вовсе, просто в данном случае это не фреймворк какой-нибудь, а аж целый язык программирования.