Как стать автором
Обновить
-7
0
Шарымов Михаил Алексеевич @misha_shar53

Программист

Отправить сообщение
| Я передаю параметр анонимной функции в качестве параметра анонимной функции, а не замыкания. То, что в MUMPS нет замыканий — очень грустно.

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

| Это — цикл, только вы оббегаете все свои задания, а я проверяю в цикле одно условие (длину массива вычислять не нужно, функция len просто возвращает значение длины, которое уже есть), а цикл у меня холостой. Я мог бы его не использовать, а идти дальше заниматься своими делами, а в конце проверить — выполнились задания или нет. Одним условием. Вам, опять же, цикл понадобился бы, причём вам нужно ещё и хранить сколько заданий вы запустили и везде это протаскивать, как переменную.|

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

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

С этим я полностью согласен и обязательно последую вашему совету. Только пожалуйста прежде чем решите начать беседовать со мной познакомтись с языком MUMPS. Это недолго. Нескольких часов вполне хватит. Первой документацией по MUMPS была книжка небольшого формата на 20 листов. Она кстати актуальна и сейчас. С наилучшими пожеланиями.
А понял с помощью замыкания вы передаете параметр анонимной функции. В MUMPS нет анонимных функций и замыкание ненужно.
| Т.е. вас не порадовало, что мне не пришлось засорять глобальную зону видимости лишней функцией (в MUMPS есть замыкания?),

Точка входа primjob(j) не засоряет глобальную зону видимости она локальна внутри модуля primer. primer засоряет глобальную зону видимости.
Анонимные подпрограммы в MUMPS есть но они не используются в команде Job. Остальное я не понял. Язык Go я не знаю. Понятия замыкания в MUMPS нет. Что делает замыкание в вашем случае я не понял.
Lock стандартный механизм. Чем он вас не устраивает? Существуют и другие способы обмена данными те же каналы они не требуют Lock. Это не более чем пример синхронизации данных.

| Не понравилось, что нет цикла, оббегающего все задания?

// цикла, а пока делаем что-то бесполезное — спим, например
for len(ch) > 0 {
time.Sleep(100 * time.Millisecond)
}

А это что не цикл?
Я согласен. В Go многозадачность сделана хорошо.
| да и язык сам куча читаемее.
Ну это утверждение спорно. Мой пример смотрится непрезентабельно из за моего неумения форматировать текст. Каналы есть и в MUMPS. Принципиального преимущества я не заметил.
Да разница потрясающая. Job заменили на go. И сразу ужас превратился в шедевр. Только job изобретен в 70 годах а Go совсем вчера. Я кстати считаю что многозадачность в Go на высоте только там нет всего остального что мне нужно. Мой пример демонстрирует не только многозадачность но и синхронизацию данных. Если бы создатели новых языков программирования знали бы что нибудь еще кроме языка Си то я думаю что мне не пришлось бы расхваливать язык MUMPS созданный в 70 годах.
SQL это не организация данных, хотя он предполагает что данные организованы в виде таблиц, а метод доступа к данным. Кстати есть реализации MUMPS систем где SQL надстроен над MUMPS. Правда этим чудом я никогда не пользовался, но ничто не мешает это делать.
| Предположим, некая подпрограмма выделила блок памяти и вернула его вызывающему коду. Кто, как и когда его автоматически удалит?

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

| Гибкость языка. Отсутствие деклараций. Как одно связано с другим?

Прямо. Я имею возможность писать обработку данных независимо от структуры переданной мне переменной. это может быть просто переменная, а может быть и дерево произвольной структуры. В MUMPS декларирование смысла не имеет. Тип данных известен. Структура-дерево. Что еще надо знать?
Одновременное выполнение 20 заданий.
primer; Многозадачность
; Связь заданий будем осуществлять через файловую переменную удалим ее если она существует
Kill ^Ajob
; начальное значение
Set ^Ajob=0
; в цикле запускаем задания
For j=1:`1:20 job primjob(j)
; в цикле проверяем завершение всех заданий
For Lock +^Ajob Quit:^Ajob=20 Lock -^Ajob Halt .1
; снимаем блокировку
Lock -^Ajob
; и очищаем файловую переменную
Kill ^Ajob
Q
; запускаемое задание
primjob(j) Lock +^Ajob; блокирование переменной
Set ^Ajob(j)=1,^Ajob=^Ajob+1; изменение значений
Lock -^Ajob; разблокирование
; завершение задания
Quit
Разговор получается несколько верхушечным. Как и всякий язык этот имеет свои достоинства и недостатки. Пока речь идет о стандарте языка. Реализации могут отличаться от стандарта иногда значительно. Но ядро реализованных языков всегда в той или иной мере соответствует стандарту.
Достоинства:
-Самый удачный метод управления памятью. Автоматическое выделение и освобождение памяти без сборщика мусора и утечек памяти.
-Многозадачность заложенная в языке. Просто и переносимо.
-Синхронизация процессов и данных заложенная в языке.
-Синхронный и асинхронный ввод вывод реализован в языке.
-Гибкость языка. Отсутствие деклараций и в языке есть косвенная адресация(в терминах MUMPS) и команда XECUTE которые позволяют сформировать и выполнить команду на лету. Аналог команды XECUTE есть в JavaScript — eval.
-Полнофункциональная база данных с транзакциями и журналированием.
-Распределенная база данных. Узлы базы данных могут находиться в любой точке мира.
Возможно есть и другие достоинства.

Недостатки:
-Не совсем удачный синтаксис.
-Наличие косвенности и команды XECUTE при неудачном их использовании осложняет понимание логики выполнения программы.
И возможно это не все. Но других обоснованных претензий к языку я не встречал кроме возможно с отсутствием приоритета операций, но с этим я категорически не согласен и не могу это отнести к недостаткам языка.
Ну это зависит от стиля программирования. Будешь писать понятно будет понятно нет так нет. Чем он хуже других? Выражения они и в других языках выражения ну еще допустим код команды и условие выполнения команды. Как это влияет на читабельность?
Нет MUMPS не поддерживает рефакторинг. Проблема рефакторинга глубже просто добавления одного индекса.
В подобных случаях пишу программу которая и выполняет рефакторинг. Вы имеете какое то дерево в котором надо изменить структуру. Как вы себе представляете команду которая должна объяснить как изменить эту структуру. Существует очень много структур в которые может быть преобразовано исходное дерево. Из исходного дерева можно получить 2^n различных структур где n глубина индекса. Мне не приходилось сталкиваться с простым добавлением индекса как правило требовалась одновременная обработка нескольких деревьев а это уже простым рефакторингом не выполнишь. Средств рефакторинга данных нет ни в одном языке программирования, а в базах данных подобную работу выполняют внешние утилиты.
Ну тут все очевидно если переменная IF равна переменной THEN то вызвать подпрограмму THEN. Кстати THEN не является командой.
Вас никто не заставляет использовать имена переменных совпадающих с командами. В голове у себя зарезервируйте эти имена и не используйте.
Любая переменная в зависимости от операции трактуется либо как число либо как логическое значение либо как строка. Если тебе нужен целый результат то округляй.
3.6 + .5 \ 1
Исходный код компилируется в Pi код затем этот код интерпретируется.
-Нужно. Это и определение области видимости и защита от опечаток.

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

-Серьёзно? Пользователя спрашивают сколько штук пришло товара и сколько денег он стоит и пользователь вводит 1.5 штук и 1,444 денег. Так и писать? Штуки всегда целые, а деньги округляются до целого или до двух знаков после запятой (могут быть и другие правила учёта, но банк не примет перевод на 1,444 рубля или доллара, а вообще имелось в виду 1444).

Ну товарищи не серьезно. Весь ввод необходимо проверять и типов данных намного больше это могут быть и телефоны и коды из классификатора причем тут декларация переменных.
Полностью с вами согласен. Только в MUMPS можно добавить сколько угодно глубокую структуру ключей.
Безусловно скобки. Стека нет. Можно использовать промежуточные переменные. но какой в этом смысл.
2*3+1-(4*5)+6
Скобки стандартный инструмент. И если у тебя не стековая машина то всегда есть выражения когда тебе придется использовать скобки.
-Как по мне, так все-таки лучше расставить скобки, как в математике. Речь же не о языке вроде Forth.
А мне проще опираться на простое правило всегда верное.

-IF THEN THEN ELSE ELSE=THEN END
Не понял. Это синтаксически не верная конструкция. Не понял смысла.

Информация

В рейтинге
Не участвует
Откуда
Алматы (Алма-Ата), Алма-Атинская обл., Казахстан
Дата рождения
Зарегистрирован
Активность