LINUX.ORG.RU

Многопоточный питон, PEP 554

 ,


1

4

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

https://github.com/ericsnowcurrently/multi-core-python
https://www.python.org/dev/peps/pep-0554/

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

Теперь главный вопрос: зачем? PEP 554 предлагает обращаться за помощью к каналам, как в Go, но:
- каналы как средство взаимодействия потоков убоги даже в Go;
- в питоне уже есть multiprocessing, который по сути и есть развитая идея каналов с возможностью прокинуть в обе стороны вызов функции и запрос атрибутов объекта, вплоть до итераторов, но не более того.

Для людей, которые уже готовы отвечать «ну дык есть же многопроцессы, есть форк на никсах - вот и используйте их», напомню, что реализация форка процесса на уровне ОС-и в действительности мало помогает многоПРОЦЕССовости питона - машем ручкой сборщику мусора, который передергивает счетчики ссылок:
https://instagram-engineering.com/dismissing-python-garbage-collection-at-ins...

>>> import os, sys, gc
>>> len(gc.get_objects())
6888
Это весьма эффективная модель сборки мусора... если у вас ровно один процесс.

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

def hello():
    return "hello world"
то окажется, что объект строки и объект функции сидят в другом интерпретаторе, а сборщик мусора принципиально не умеет работать более чем в одном потоке, потому просачивание объекта из одного потока в другой вызывает катастрофические последствия.

Можно замутить атомарные операции на питоне, которые будет писать сам пользователь для описания превращений сложных структур, но есть проблема с побочными эффектами и гарантией потокобезопасности, потому что:
- любая функция в питоне использует все вышестоящие контексты, а также имеются замыкания, которые могут использовать свои собственные контексты;
- в CPython довольно сложно понять, работает ли функция с побочными эффектами или без онны. Речь не только про код на питоне, но еще и про код на си.

Для решения проблемы со стандартными бибиотеками и сборщиком мусора сообразительные люди довольно быстро придумали Jython, позже - IronPython, а потом и PyPy. Все три реализации привязывают вас к соответствующей среде выполнения, и это неприкольно даже несмотря на возможность выйти из них в расширения на C или других языках - проще написать уже всё на крестах или жабе, чем морочиться с пирамидами языков.

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

Кто-то видит свет в конце тонеля? Или же это предсмертные видения?

★★★★

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

В node.js «import» появился только с 8.5.0, например.
А SpiderMonkey вроде пока не собирается никуда уходить.

Еще напиши, что в браузере fs нету и net. Это разные окружения совершенно. Еще бы пожаловался, что писать на qt это не тоже самое, что на boost.

Потом через пятсот строк эта ошибка вылезет - поди разбери, где ошибка возникла

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

Тебе палки в колеса ставит сам язык

Никто не ставит тебе палки в колёса кроме тебя самого. Эти особенности просто надо знать и учитывать. Не делать if (a.b) {...} если a.b может не быть объектом и т.д. Никто не заставляет тебя стрелять себе в ногу.

а что ты будешь делать с нетривиальными ошибками?

Это всё можно исключить банально делая проверку входных данных, чтобы там не было ничего неожиданного. В жабке говнокодеры, вон, страдают от npe. И чо?

Но комментарии не помогут исключить всё неявное поведение при исполнении

Еще раз объясняю. Всё «неявное поведение» от рук из жопы и срача во входных данных. Один дурак засунет в массив числа в перемешку со строками, другой этот массив не проверит а виноват js.

300 тысяч строк кода. Давай, обтыкивайся логами

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

Ты - тот самый мастер, который готов каменным топором выточить шарикоподшипник?

Обоснуй за топор сначала, пока от тебя одно неосиляторство.

В этом треде были примеры. Youtube, Instagram, Dropbox - это большие и известные, но есть и поменьше проектики.

Где сорцы всего этого и что там из себя представляет пистон?

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

Так это клей, который можно заменить на что угодно. Причём тут пистон и «большие проекты» еще раз?

А в чем проблема?

Для спринга, например, нету jdbi, потому что никто её туда не завернул. Не всегда получается сесть и поехать. Ну и ты пишешь под стек и становишься программистом на фреймворке.

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

Когда-нибудь это станет стандартом

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

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

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

А ты не работал над проектом, где код кроме тебя пишет еще хотя бы один человек?

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

Есть самые разные сервера, есть самые разные клиентские устройства, есть самые разные задачи.

Какие устройства? Где можно гонять електрон? Так это нода. Или ты ноду собрался гонять на клиенте? Так это тоже нода. Какие еще бывают сервера? Тостеры? Ну с этим всё плохо x86 закопали.

DNS может оказаться не продублирован элементарно. Обработка пошла по другому сценарию, который оказался непредусмотрен.

Ты докапываешься до какой-то херни, лишь бы докопаться. Если вся сеть ляжет твой монолит также ляжет. Если брокер или сеть ляжет микросервисы (сюрприз!) тоже лягут, пока админ не поднимет сеть. Давай еще обсудим что будет при выходе из строя всего железа, внезапного кз в бесперебойниках или взрыве датацентра.

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

А ты не работал над проектом, где код кроме тебя пишет еще хотя бы один человек?

Идиотский вопрос. Кто-то не даёт договориться или сделать корп.стандарт? Ты докапываешься лишь бы до чего и уже достаточно обезумел в своих попытках.

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

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

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

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

1) при передаче данных между процессами слишком велик оверхед по сравнению с нитями; 2) управление процессами на порядок сложнее управления нитями; 3) сам модуль multiprocessing полон багов и неизлечимых проблем.

a.b.c

Когда-нибудь откроешь для себя статическую типизацию и mypy, подобные проблемы как рукой снимет.

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

огромных масштабах - это, на самом деле, люди учатся писать быстрые программы

Не передёргивай(было «масштабируемые» или «эффективные»). На самом деле, они учатся получать решения с помошью медленных программ(откуда 5+ и весь зоопарк). Преимущества именно этого подхода мне очевидны. А недостатки – электричество (которое мы договорились не считать) и что ещё?.

проблему быстрого … в один поток

В один поток режешь вход на независимые куски, обрабатываешь каждый в 1 поток на 100500 одноядерных серверах, клеишь взад как повезёт. Там, где первое возможно, сложно ожидать проблем.

для кластеров: на сколько процентов растет производительность

Растёт не производительность. Растёт скорость – у правильных программ. И не растёт у неправильных. Точно так же, как в случае все-потоки-в-одной-корзине – отличается лишь размер штрафа за неправильную реализацию.

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

Тебе палки в колеса ставит сам язык

Никто не ставит тебе палки в колёса кроме тебя самого. Эти особенности просто надо знать и учитывать. Не делать if (a.b) {...} если a.b может не быть объектом и т.д. Никто не заставляет тебя стрелять себе в ногу.

Но комментарии не помогут исключить всё неявное поведение при исполнении

Еще раз объясняю. Всё «неявное поведение» от рук из жопы и срача во входных данных. Один дурак засунет в массив числа в перемешку со строками, другой этот массив не проверит а виноват js.

300 тысяч строк кода. Давай, обтыкивайся логами

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

Потом через пятсот строк эта ошибка вылезет - поди разбери, где ошибка возникла

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

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

Ты - тот самый мастер, который готов каменным топором выточить шарикоподшипник?

Обоснуй за топор сначала, пока от тебя одно неосиляторство.

Знаешь, у меня до сих пор лежит старый фотоаппарат, где нужно было выставлять экспозицию и диафрагму. Почему до сих пор люди такими не пользуются? Пока я выставляю свою экспозицию и диафрагму - люди думают над композицией самой картинки или уже сделали пять фоток, а не занимаются доведением мастерства механики фотографирования до такой степени, что наконец можно начинать задумываться про содержание фотографии.
Скриптовые языки задумывались как инструмент абстракции над механическими деталями, но JS привнесло свои детали (иные по сравнению с каким-то C), с которыми нужно постоянно возиться и

Эти особенности просто надо знать и учитывать

В этом треде были примеры. Youtube, Instagram, Dropbox - это большие и известные, но есть и поменьше проектики.

Где сорцы всего этого и что там из себя представляет пистон?

Блин, я даже не знаю, где бы взять сорцы проекта побольше. Может у кого-то из сидящих здесь есть под рукой предложения?

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

Так это клей, который можно заменить на что угодно. Причём тут пистон и «большие проекты» еще раз?

Вопрос в том, насколько эффективен этот клей, то есть, насколько выразителен язык, насколько можно пользоваться абстракцией, не парясь о деталях, и при этом иметь возможность при необходимости изменить детали - для чего twisted и написан на питоне, а не C.
На JS просто не получается написать никакой крупный фреймворк так, чтобы приложение не начало просто рассыпаться то там, то тут, потому что помнить всё и везде не получается.

Для спринга, например, нету jdbi, потому что никто её туда не завернул. Не всегда получается сесть и поехать. Ну и ты пишешь под стек и становишься программистом на фреймворке.

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

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

Почему это обязательно должно становиться стандартом? Кто-то не даёт так писать, если это не стандарт? JS всем похер как ты там пишешь

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

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

Какие устройства? Где можно гонять електрон? Так это нода. Или ты ноду собрался гонять на клиенте? Так это тоже нода. Какие еще бывают сервера? Тостеры? Ну с этим всё плохо x86 закопали.

Запускаю атом - не могу найти ни одной даты вообще. Разрабы панически боятся показывать пользователю дату. Наконец, поставил плагин для показа даты-времени в строке статуса, и что же я вижу? «08/14(Wed) 23:38». Правильный ответ отображается на панели оболочки: «14.8.19 23:38».

>>> import locale, datetime
>>> locale.setlocale(locale.LC_ALL, '')
'Russian_Russia.1251'
>>> datetime.datetime.now().strftime('%x %X')
'14.8.19 23:45:37'
А теперь очередь ноды (10.16.2):
> new Intl.DateTimeFormat('es', { month: 'long' }).format(new Date(9e8)  )
'enero'
> new Date().toLocaleString('en-GB')
'15/08/2019, 00:54:28'
> new Date().toLocaleString('ru-RU')
'15.08.2019, 00:54:42'
> new Date().toLocaleString()
'15.08.2019, 00:55:00'
И нет, оно никак не реагирует на смену настроек формата даты.

DNS может оказаться не продублирован элементарно. Обработка пошла по другому сценарию, который оказался непредусмотрен.

Ты докапываешься до какой-то херни, лишь бы докопаться. Если вся сеть ляжет твой монолит также ляжет.

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

Меня осенило, откуда у тебя такое отношение к среде. Очевидно, что нормальный человек должен жить в США, и ему нужно отображать числа и даты в соответствующем формате. Юзер привык к другим датам и запятой в числах? Теперь привыкнет к нормальному формату, с точкой в числе и слэшами в дате. Разрабы ОС какие-то настройки делают в системе - вот лошары, это ж прошлый век, у нас есть прогрессивные и передовые инструменты разработки, которые уже переросли эти настройки.

Логично, для для окончательного устранения любых возможностей изменения среды применяется докер, после чего кодер может писать свое сверхнадежное и предсказуемое приложение на 100 строк, которое будет суммировать числа и добавлять к ним строку, после чего из нее можно будет создать распределенную систему на 10 серверах. Вот так, вот, distrubuted computing минимальными усилиями и максимальным выхлопом.

Кого я забыл упомянуть в этом контексте? NoSQL, конечно же. Идеология очень простая: SQL придумали дурачье, линукс и никсы проектировали лошары, никлаус Вирт - наивный фантазер, Дональд Кнут - а кто это такой? Вот же он, новый прорыв в технология, которого мир не видал: монго - лучшая база данных, а оракл, постгрес - просто давно устаревший мусор; нода, дающая удобство программирования, выше которого я еще не видел.

Я выше уже называл JS белым листом. Таким же белыми листом является и NoSQL, и докер - по мере популяризации NoSQL базы приобретают транзакции и реляционность, JS приобретает систему типов и инструменты организации кода, а докер, перечеркнувший все старые инструменты администрирования никсов, перестает быть откровенным глюкодромом и позволяет наконец воспользоваться функциями линукса, которые в ядре были за 8 лет до первого релиза докера.

На самом деле одлфаги могли мне напомнить, что один в один такая же история была с MySQL, в котором даже транзакций не было первое время. История повторяется снова и снова: рождается новое поколение программистов, идущих в светлое будущее и не отягощенных знаниями устаревших, отживших своё технологий, и эти новые люди заново строят велосипеды в третий раз за 40 лет.

byko3y ★★★★
() автор топика

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

в питоне уже есть multiprocessing, который по сути и есть развитая идея каналов

что через годик-другой реализацией независимых...

можно будет хоронить

обожаю, когда люди несут ахинею с умным видом. прям как Путин.

Питон сдох. он не плох для несложных скриптов, но игру он проиграл. ему не место в серьёзном софтостроении. js и так вполне достаточно. точка.

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

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

На Go конфе в киеве недавно поставили рекорд - написали программу на 20 строк в Go на каналах, которая имеет неочевидное и непредсказуемое поведение. Угробить программу такими каналами, которые реализованы в Go, слишком просто - это недопустимо для питона. Нужна как минимум серьезная модификация механизма каналов.

1) при передаче данных между процессами слишком велик оверхед по сравнению с нитями

Shared memory. Есть на всех платформах.

3) сам модуль multiprocessing полон багов и неизлечимых проблем.

К сожалению, да.

a.b.c

Когда-нибудь откроешь для себя статическую типизацию и mypy, подобные проблемы как рукой снимет.

Ошибка цитирования? Я не понимаю, где я мог писать про проблемы с типами.
https://lwn.net/Articles/643269/ - без подсказок типов (type hint, type annotation) в стандартных библиотеках смысла получается мало, но проблема в том, что полная аннотация библиотек практически нереализуема из-за слишком свободного приема аргументов.
https://rpython.readthedocs.io/en/latest/faq.html#what-is-this-rpython-language - весь смысл создания RPython заключался в возможности выведения типов (type inference). В обычном питоне не получается выводить типы из-за чрезмерной динамичности, а потому даже те скромные возможности, которые дают аннотации типов, оказываются довольно бесполезны.
http://doc.pypy.org/en/latest/faq.html#would-type-annotations-help-pypy-s-per... - в итоге PyPy просто игнорирует аннотации и прибегает к трассирующей JIT-компиляции, когда оптимизация производится по фактическим данным, а не по каким-то абстрактным типам, которые в случае питона все-таки значат намного меньше, чем значат классы в Java. К слову, классы RPython неизменяемы, и они могли бы подойти в качестве типов, но, к сожалению, на RPython никто не пишет.

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

Питон сдох. он не плох для несложных скриптов, но игру он проиграл. ему не место в серьёзном софтостроении. js и так вполне достаточно. точка.

Пенсионерам не место в серьёзном софтостроения - бомжей и так вполне достаточно. Отличные истории.

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

ну ладно. чтоб тебя немножко утешить: есть не плохая реализация питона на Go - пойдёт как скриптовый язычёк

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

GPython скорее для стеба написали, он очень сырой пока что. Ну и проблему многопотоков он никак не решает - PyPy в этом плане не менее перспективный.

byko3y ★★★★
() автор топика
Ответ на: комментарий от Shadow
> '1' - '1'
0
> '1' + '1'
'11'

Да, это тот самый знаменитый подход «мы не выдаем ошибки до последнего».

>>> '1'+'1'
'11'
>>> '1'-'1'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'str'

byko3y ★★★★
() автор топика

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

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

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

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

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

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

знает что такое мьютекс

там есть локи, семафоры и даже асинки с go натырили. интересно: я среднестатистический?

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

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

Вопрос не в том, что прогер когда-то читал что-то про мьютексы, типа «я видел мьютексы по телевизору». Вопрос в умении с этим мьютексом обращаться. Типичный высер - это заворачивание всего кода в мьютекс. В итоге получаем дедлоки и фактическую однопоточность.
А про забавность - ты это зря. В Erlang вот почему-то многопоточность не звучит забавно, да?

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

там есть локи, семафоры и даже асинки с go натырили. интересно: я среднестатистический?

Какие еще асинки в го?

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

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

горутины - теже асинки но не так насахарены. натырили так же как и в Kotlin

Локи и семафоры в питоне нужны больше для многопроцессовости

чел спрашивал про мутексы - или это не то же самое?

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

В Erlang зелёные потоки так-то. А что, в Erlang завезли GIL?

Блокировка процесса там никуда не исчезала. По крайней мере в BEAM. Это я про erts_proc_lock/erts_proc_unlock. Если один процесс работает, то другой процесс не может прямо в кучу первого отправить данные - есть неблокирующуй механизм m-buff, из которого первый процесс потом заберет данные.
Это, кстати, интересный механизм для питона, но проблема в том, что объекты питона проблематично перекинуть через границу интерпретаторов.

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

Это норма для кода более 5000 строк, который писало несколько человек. Почему я и удивился тому, что ты пишешь сам и маленькие проекты, но при этом проецируешь опыт как общеприменяемый.

Старик, микросервисы в 2к19 это уже вчерашний день. А модульность и куски кода как можно меньше и понятнее придумали еще в том тысячелетии. Не нужно пилить портянки на 5к+ строк.

Блин, я даже не знаю, где бы взять сорцы проекта побольше

Ссылки на сорцы.

с которыми нужно постоянно возиться

С чем там нужно возиться? На яве с оопотой надо, например возиться, описывать все твои dto под каждую задачу и выдрачиваться с иерархией, которая полетит в помойку после следующих пожеланий начальника.

На JS просто не получается написать никакой крупный фреймворк

Никаких принципиально нерешаемых технических ограничений для этого нет.

для чего twisted и написан на питоне, а не C

Почему у тебя скриптопа в одном предложении с си? Это несравнимые вещи.

Потому что код должны читать другие люди.

Берешь и пишешь что у тебя как устроено. Люди читают. Profit.

И нет, оно никак не реагирует на смену настроек формата даты.

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

Меня осенило, откуда у тебя такое отношение к среде. Очевидно, что нормальный человек должен жить в США, и ему нужно отображать числа и даты в соответствующем формате. Юзер привык к другим датам и запятой в числах?

Переведи ему в нужный формат. Всего этого зависимого от окружения говна с локализацией и intl вообще не должно быть. В одной либе на яве недавно был факап с точкой при парсинге флоата из-за такого дерьма приходится всем выставлять us локаль и нулевую tz.

Кого я забыл упомянуть в этом контексте? NoSQL, конечно же.

Ууу, дед, всё с тобой понятно. Ты старый не успеваешь молодыми и начинаешь брюзжать.

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

Да, это тот самый знаменитый подход «мы не выдаем ошибки до последнего».

Кодер не сам ли дурак, если делает арифметику над строками?

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

Зато под питон быстрее кодить.

На динамической скриптоте быстрее кодить чем на другой такой же? Это вкусовщина.

1+1=11

Так в пистоне тоже самое.

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

Это норма для кода более 5000 строк, который писало несколько человек. Почему я и удивился тому, что ты пишешь сам и маленькие проекты, но при этом проецируешь опыт как общеприменяемый.

А модульность и куски кода как можно меньше и понятнее придумали еще в том тысячелетии. Не нужно пилить портянки на 5к+ строк.

Ты понимаешь, что 500 строк пишется для дохленького курсача в институт за пару вечеров с перерывами на дотку? Чтобы код что-то делал - его нужно написать. А там уже неважно, будь то код модульный, каскадный, монолитный, или гранитобетонный.
Ты можешь, конечно, бить файлы 5-10 к строк на более мелкие модули, но проблема в том, что у тебя в проекте может быть таких файлов уже десятки, и ты рискуешься заблудиться в том, какой кусок куда ты засунул. А второй разраб когда код увидит - так и вовсе тебя расцелует.
Да, в проектах на C++ любят бить код по модулям чуть ли не до уровня отдельной функции в каждом модуле - я могу предположить, что это какое-то тяжелое наследие фундаментального устройства языка, вроде той же жабы, где в одном модуле мог быть только один класс.
Вот возьмем симейк - порядка 150 строк проект. Из них 50 тыс разбито на 400 файлов менее 1 тысячи строк каждый. Такое устройство вынуждает использовать инструменты, чтобы собирать эти файлы в кучу, хотя можно было бы иметь два десятка файлов и пользоваться банальным текстовым редактором. Я так понимаю, что именно отсюда проистекает такая острая необходимость в инструментах чтения кода для жабы и крестов, которой, почему-то, не испытывают кодеры на других языках.

Ссылки на сорцы.

Ну не нахожу я конечные проекты на питоне. Обычно такая хрень не публикуется просто. Вот тебе гуглооблако на 800 к строк: https://github.com/googleapis/google-cloud-python

С чем там нужно возиться? На яве с оопотой надо, например возиться, описывать все твои dto под каждую задачу и выдрачиваться с иерархией, которая полетит в помойку после следующих пожеланий начальника.

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

На JS просто не получается написать никакой крупный фреймворк

Никаких принципиально нерешаемых технических ограничений для этого нет.

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

для чего twisted и написан на питоне, а не C

Почему у тебя скриптопа в одном предложении с си? Это несравнимые вещи.

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

Потому что код должны читать другие люди.

Берешь и пишешь что у тебя как устроено. Люди читают. Profit.

Почему код должен дублироваться описанием? Дополняться - да. В описании ведь тоже можно сделать ошибку. Код является ультимативным описанием поведения программы, и если по коду непонятно - это плохой код. А если код на языке систематически непонятен - это плохой язык. Стоит признать, что, например, C - это ужасный язык, паскаль (не объектный) - намного лучше сей, кресты - это ужасный язык, жаба - это плохой язык, а котлин - лучше жабы. «Да, я пишу на дряном языке - но что ж поделать, на обычную работу я не хочу идти» - многие талантливые кодеры замечают, что индустрия катится в говно, в какую обертку это говно не заворачивай, и мухи сделают единственный правильный выбор.

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

И нет, оно никак не реагирует на смену настроек формата даты.

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

Очевидно, что нормальный человек должен жить в США, и ему нужно отображать числа и даты в соответствующем формате. Юзер привык к другим датам и запятой в числах?

Переведи ему в нужный формат. Всего этого зависимого от окружения говна с локализацией и intl вообще не должно быть. В одной либе на яве недавно был факап с точкой при парсинге флоата из-за такого дерьма приходится всем выставлять us локаль и нулевую tz.

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

Кого я забыл упомянуть в этом контексте? NoSQL, конечно же.

Ууу, дед, всё с тобой понятно. Ты старый не успеваешь молодыми и начинаешь брюзжать.

История учит, что люди не учатся на ошибках истории.

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

Да, это тот самый знаменитый подход «мы не выдаем ошибки до последнего».

Кодер не сам ли дурак, если делает арифметику над строками?

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

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

На динамической скриптоте быстрее кодить чем на другой такой же? Это вкусовщина.

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

1+1=11

Так в пистоне тоже самое.

Здесь важно не то, как работают плюсы в разных языках, а то, как работают операторы в одном языке. Функции арифметических операторов нелогичны в JS, что создает потенциал для написания ошибок.

> a='1'
'1'
> ++a
2

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

Уровень питона - сотни тысяч строк.

Ты не показал пока ни одного проекта на 100к строк. Вот это - просто куча мелкий библиотек, которые я имею ввиду в том числе. И там половина кода - комментарии.

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

Рантайм и так покажет все ошибки. Он или отработает или нет. Тесты или пройдут или нет.

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

Большой проект выполняет только одну большую задачу, которая принципиально не бьётся на мелкие? Никак нельзя организовать взаимодействие или документировать мелкие куски? Только портянки на 500кк строк одним файлом?

Но имея фреймворк на питоне в программе на питоне можно иметь несравнимо более широкую поверхность взаимодействия

Пистон самый звездатый, потому что это пистон, понятно.

Почему код должен дублироваться описанием?

Что бы было понятно что происходит на уровне крупных модулей и не ковыряться иголкой где-то в жопе каждый раз. По такой логике зачем писать для всего man, есть же сорцы. Но я могу использовать какой-нибудь jq или sed вообще не зная языка, на котором он там сделан, но нет, в твой пистоно-говнокод надо обязательно лезть руками, если что-то не понятно.

Нода не может в локализацию

Ой вей, что делать? В сишечке вообще понятия такого нет, как и в еще куче языков. Ни одной библиотеки нет, чтобы сделать тебе нужный формат даты/время, как жить теперь, проблема проблем.

но ты же не будешь каждую чертову функцию проверять на типы параметров и результат

Не каждую, проверка будет жрать ресурсы. Только те, которые ты не контролируешь или в качестве теста.

Функции арифметических операторов нелогичны в JS, что создает потенциал для написания ошибок.

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

Начинается

Заканчивается. Intl - это прикладуха для браузеров. Пожалуйся еще, что нету доступа к твоей любимой субд изкаробки как в пхп.

История учит, что люди не учатся на ошибках истории.

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

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

Ты не показал пока ни одного проекта на 100к строк. Вот это - просто куча мелкий библиотек, которые я имею ввиду в том числе. И там половина кода - комментарии.

Понимаешь в чем дело... Чтобы у вас в проекте было много строк - у вас должно быть много функционала, который можно разделить на отдельные модули. Если разраб хочет открыть код - он открывает либу/фреймворк, и мы получаем то самое имеющееся разнообразие на github-е. Если разраб не хочет открываться и копит код, как тот же ютьюб, то их больших проектов мы и не видим.
Далее, некоторые библиотеки на питоне требуют считанных строк кода для того, чтобы создать готовое приложение/выполнить прикладную задачу. Например twisted дает возможность в несколько сот строк сделать почтовый сервер, но есть localmail на 500 строк, которое предоставляет готовый IMAP/SMTP почтовый сервер в пять строк. Или библиотеки, которые предоставляют возможность в несколько десятков строк сделать распознавание примитивов на изображении. То есть, эти библиотеки являются практически прикладными программами, а не библиотеками.

А вот теперь скажи мне, что же ты хочешь увидеть-то?

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

Рантайм и так покажет все ошибки. Он или отработает или нет. Тесты или пройдут или нет.

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

Большой проект выполняет только одну большую задачу, которая принципиально не бьётся на мелкие? Никак нельзя организовать взаимодействие или документировать мелкие куски? Только портянки на 500кк строк одним файлом?

20 тыс строк потолок - с этого значения стараются бить на модули. Это я и у себя, и у других замечаю. Вот у твистеда IMAP на 6 тысяч строк, IRC-сервер на 4 тысячи строк - их разбиение принесет ущерб, потому что кусок сервера уедет в другой модуль. Всего почтовые функции примерно 30 тыс строк.
Ты хочешь предложить разнести почту и другие протоколы в разные репозитории? Я думаю, что ты имеешь довольно много опыта в состыковывании разных версий зависящего друг от друга софта. Когда взаимодействие простое - можно заткнуть, но что делать, если взаимодействие больше и сложное?
Внутри репозитория разбиение на модули присутствует, но распространяются они как единое целое, притертое друг к другу и проверенное на работоспособность.

Но имея фреймворк на питоне в программе на питоне можно иметь несравнимо более широкую поверхность взаимодействия

Пистон самый звездатый, потому что это пистон, понятно.

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

Почему код должен дублироваться описанием?

Что бы было понятно что происходит на уровне крупных модулей и не ковыряться иголкой где-то в жопе каждый раз. По такой логике зачем писать для всего man, есть же сорцы. Но я могу использовать какой-нибудь jq или sed вообще не зная языка, на котором он там сделан, но нет, в твой пистоно-говнокод надо обязательно лезть руками, если что-то не понятно.

Напомню контекст этого обсуждения:

Ты пишешь про то, что код не должен описывать структуру объекта

Так он и не описывает. Описывает какой-нибудь конфиг в случае js.

Хорошо, я понял идею. Когда-нибудь это станет стандартом и JS начнет быть похожим на питон.

Почему это обязательно должно становиться стандартом? Кто-то не даёт так писать, если это не стандарт? JS всем похер как ты там пишешь

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

Ой вей, что делать? В сишечке вообще понятия такого нет, как и в еще куче языков. Ни одной библиотеки нет, чтобы сделать тебе нужный формат даты/время, как жить теперь, проблема проблем.

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

Не каждую, проверка будет жрать ресурсы. Только те, которые ты не контролируешь или в качестве теста.

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

То, что у кодера говно в голове и он делает ++ стоки

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

Заканчивается. Intl - это прикладуха для браузеров.

Или же все-таки ты согласен с тем, что react - говнище и не нужен?

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

У nosql совершенно другая область применения, чем у рсубд, не знаю, почему ты считаешь, что это какая-то альтернатива или рсубд не нужно

Я тебе открою пристрашнейший секрет: MongoDB на текущий момент является реляционной СУБД.

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

MongoDB на текущий момент является реляционной СУБД

Но в каком месте монго реляционная и зачем нужна еще одна рсубд, тем более такая говёная, как монго? Nosql нужны для key-value, например, т.к. на рсубд они плохо натягиваются. Да и вообще для всего сильно отличного от таблиц. Графы там, например, и т.д.

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

То есть, эти библиотеки являются практически прикладными программами, а не библиотеками.

Ну да. Что мешает сделать тоже самое на js кроме религии?

А вот теперь скажи мне, что же ты хочешь увидеть-то?

Портякни пистона на 100к строк же.

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

Ну, конечно, если тупо тестить всю систему на 100кк строк в лоб, а не по кускам.

20 тыс строк потолок - с этого значения стараются бить на модули.

А модуль внутри себя функций не содержит? В чём проблема? Ну ок, есть irc сервер, не важно на чём, кто-то будет залазить внутрь его? Нет. Он отлажен, работает и жрать не просит, входные данные чекает. Также и со всем остальным. 20к тоже не одним куском.

Внутри репозитория разбиение на модули присутствует, но распространяются они как единое целое, притертое друг к другу и проверенное на работоспособность.

А на js так принципиально нельзя, потому что это js, а не питон.

Я писал о том, что программист, тесно работающий с библиотекой, имеет трудности с пониманием принципов ее работы.

Зачем ему это понимать? Ты много понимаешь о том, как работает ос на низком уровне с дровами и железом? Ты понимаешь, как работает сеть на канальном и физическом уровне? Тебе оно сильно надо, чтобы запостить на ЛОР? Работает хорошо и ладно, входные и выходные данные обозначены.

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

«Технологии» это походу intl и форматирование дат. О чудо, вот это просто дико технологичная херня дату отформатировать.

но на десктопах есть большие проблемы

Если поставить либу - это Большие Проблемы, то я уже не знаю, как называются на самом деле большие проблемы.

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

Такие же особенности, как и у любого другого языка. Код, за который я отвечаю, данные которые я обрабатыванию, я контролирую априори.

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

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

что react - говнище и не нужен?

Не могу сказать, не дошли до него еще руки. Надеюсь в сентябре-октябре.

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

Но в каком месте монго реляционная и зачем нужна еще одна рсубд, тем более такая говёная, как монго? Nosql нужны для key-value, например, т.к. на рсубд они плохо натягиваются.

Потому что 50 лет истории разработки СУБД, которые пропустили рожденные в новом веке, показали, что нет ничего лучше, чем реляционная СУБД. Монго реляционная с тех пор, как ее перевели на Wiretiger, когда в нее ввели настоящие транзакции и ACID. Следующим шагом будет введение поддержки SQL, которой сейчас нет, но это - чистая формальность. Отличие истории MySQL от монги заключается в том, что в девяностых ни у кого не было сомнения в нужности SQL (тупо по инерции) и разрабы сразу делали его поддержку, хоть и абсолютно не разбирались в архитектуре СУБД, а нынче уже выросли люди, которые даже не знают, что такое SQL и зачем он нужен.

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

что нет ничего лучше, чем реляционная СУБД

Да, особенно, когда надо key-value или что-то еще, что не налазит на реляционную модель и sql типа деревьев. Ты говоришь, как мой коллега, для которого лучший стек - это делфи+ракл.

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

Отличие истории MySQL от монги заключается в том, что в девяностых ни у кого не было сомнения в нужности SQL (тупо по инерции) и разрабы сразу делали его поддержку, хоть и абсолютно не разбирались в архитектуре СУБД, а нынче уже выросли люди, которые даже не знают, что такое SQL и зачем он нужен.

Еще чуть раньше вообще не было понятия «СУБД».

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

Да, это тот самый знаменитый подход «мы не выдаем ошибки до последнего».

Не, я про неявную динамическую трансформацию типа переменной в JavaScript: жил был int, которому присвоили прилетевший str, и всё завертелось...

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

Ну да. Что мешает сделать тоже самое на js кроме религии?

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

Портякни пистона на 100к строк же.

Ты имешь в виду одним файлом? Так никто не делает. Twisted - это фреймворк, он состоит из модулей, эти модули тесно интегрированы, и все вместе они тянут на 300 к строк, но не каждый по отдельности. У питона неймспейс уровня файла и доступ к значению поиском по имени переменной - это создает трудности с уникальностью идентификаторов, приходится засовывать в еще один неймспейс, а это опять неудобство.

Ну, конечно, если тупо тестить всю систему на 100кк строк в лоб, а не по кускам.

Ну вот опять начинается. Я почему-то работаю с такими вещами, где даже тестируя с разных сторон минимальный осмысленный кусок не получается покрыть все случаи, а у него раз-два - и всё исчерпывающе затестировал. Дело в том, что чем меньше у тебя проект - тем меньше тебе нужны тесты, тем проще ими покрыть всё, и даже то, что не нужно. Адепты test-driven development обычно мастерство свое демонстрируют на hello world-ах, стыдлыво умалчивая о том, какой самый большой проект им приходилось писать.

20 тыс строк потолок - с этого значения стараются бить на модули.

А модуль внутри себя функций не содержит? В чём проблема? Ну ок, есть irc сервер, не важно на чём, кто-то будет залазить внутрь его? Нет. Он отлажен, работает и жрать не просит, входные данные чекает. Также и со всем остальным. 20к тоже не одним куском.

Функции нужны только IRC серверу. Понадобятся кому-то еще - их вынесут. Выносить преждевременно - значит бессмысленно усложнять поддержку.
Если бы модуль IRC сервера нужен был как черный ящик, то его бы не писали на питоне. Его написали на питоне, чтобы можно было расширять, изменять, добавлять свои обработки разных событий, оставляя большую часть достаточно сложного протокола на обработку библиотеке. По этой причине на twisted нельзя написать сервер в 10 строк, хотя кол-во требуемого кода и скромное. У тебя ведь может быть разных канал передачи данных, ты можешь тупо подключить сервер через два пайпа, например, и так далее.

Внутри репозитория разбиение на модули присутствует, но распространяются они как единое целое, притертое друг к другу и проверенное на работоспособность.

А на js так принципиально нельзя, потому что это js, а не питон.

Так можно сделать на JS, но это будет неюзабельно из-за бедных инструментов языка и плохой предсказуемости операций. Его тянут, его пытаются костылями дорастить до грамотно спроектированных языков, но все равно это лишь неаккуратные костыли, и чтобы полноценно сделать апгрейд - нужно полностью отказаться от совместимости со старым JS. Примерно как было с питоном 2->3, а то и радикальнее. JS регулярно ставит палки в колеса при разработке, просто ты уже привык, а по сравнению с жабой - так это вообще одна сплошная радость для тебя.

Зачем ему это понимать? Ты много понимаешь о том, как работает ос на низком уровне с дровами и железом? Ты понимаешь, как работает сеть на канальном и физическом уровне? Тебе оно сильно надо, чтобы запостить на ЛОР? Работает хорошо и ладно, входные и выходные данные обозначены.

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

«Технологии» это походу intl и форматирование дат. О чудо, вот это просто дико технологичная херня дату отформатировать.

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

Такие же особенности, как и у любого другого языка. Код, за который я отвечаю, данные которые я обрабатыванию, я контролирую априори.

Еще раз: ты контролируешь свой код, пока ты его помнишь. Есть замечательнейшие языки, у которых нет таких brainfuck-особенностей, как у JS. Эти языки снимают умственную нагрузку, они снимают необходимость ставить лишние тесты, они позволяют заниматься задачей, а не деталями кода.

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

Да, особенно, когда надо key-value или что-то еще, что не налазит на реляционную модель и sql типа деревьев.

Классическая олдскульная реляционка подразумевала ограниченный размер записи и строгую типизацию каждого поля. Нынче большинство реляционных баз уже фактически поддерживают key-value модель в форме резиновых полей blob/memo/etc.
Деревья мало кому нужны, их можно натянуть на реляционную модель, а простота СУБД гарантирует надежность и предсказуемость хранилища.

Ты говоришь, как мой коллега, для которого лучший стек - это делфи+ракл.

Синдром утёнка. К сожалению, многие им больны. И мне есть чему позавидовать им, потому что я вижу и признаю изъяны инструментов, а им хорошо - они пишут лучший в мире софт.

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

Деревья мало кому нужны, их можно натянуть на реляционную модель, а простота СУБД гарантирует надежность и предсказуемость хранилища.

Все от типа задачи зависит.
Ведь NOSQL базы почему начали разрабатывать и почему многие из нынешних СУБД
функциональность систем дополняют возможностями NOSQL?
Ответ прост.
Чем больше «рубанков» тем больше у столяра возможностей.

Владимир

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

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

Это ручная система, которую заменили на Sabre. Sabre хранила инфу о резервации и позволяла по всей стране взаимодействовать с этой инфой. Да, можно возразить, что это не совсем определение СУБД, поскольку база просто была как есть - ей не управляли, тогда вот тебе чистейшие СУБД:
https://en.wikipedia.org/wiki/Integrated_Data_Store - 1964
https://en.wikipedia.org/wiki/IBM_Information_Management_System - 1968

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

Ведь NOSQL базы почему начали разрабатывать и почему многие из нынешних СУБД функциональность систем дополняют возможностями NOSQL?

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

Чем больше «рубанков» тем больше у столяра возможностей.

Мне вспомнился безрукий мастер-бобер из Happy Tree Friends. Икона современного программирования.
https://www.youtube.com/watch?v=Ii8UoZXNbJ8

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

Концепия реляционной системы отличная и сфера ее применения большая, но имеется не малое количество задач где данные могут имеют свойства, которые плохо укладываются в реляционную модель.
ИМХНО системам управления данными еще «развиваться и развиваться».

Владимир

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.