Как стать автором
Обновить

Комментарии 58

Проблемка с катом была, поправил :)

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

Скоро недостатком станет не только строгая типизация, но и вообще "компилятор от меня что-то хочет".
Меня, как "олдскула" это просто убивает...

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

Ассемблер - самый мягкий не типизированный язык из возможных.

И что? Правил дорожного движения тоже когда-то не существовало. Лучше было?

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

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

Если бы ваши предположения были верными, мы бы имели сейчас код того же качества, как был в 1949. Он не такой. Даже близко не такой.

Хуже ?

До Маргарет Гамильтон программирование считалось особой дисциплиной хардварщиков и было в аховом состоянии.

На всякий случай, goto considered harmful вышло в 1968.

Представьте себе качество кода до этого.

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

Безусловно Ассемблер самый гибкий из всех языков программирования.

А, в чём гибкость ассемблера, к примеру, в сравнении с Лисп и/или Форт?

Проще, может быть, но гибкость это не синоним простоты.
Осталось, к примеру, только сравнить решения на MSH с каким то количеством решений на других языках с ресурса roettacode.org.
а лучше, на таком замечательном языке как MSH сделать Вау проект и на нём продемонстрировать все его сильные стороны! 😋

P.S. На том же MUMMS 109 решений разных задач с rosettacode.org

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

Такую доработку я выполнил, создав язык MSH.

Гм, а это что значит?

Посмотрел. Язык пахнет 80ыми (или даже 70ыми). Много КАПСОМ КЛЮЧЕВЫХ СЛОВ, слишком подробно тривиальные вопросы прописываются.

в очередной раз статья про ЯП без примеров. Пришлось идти в вики и смотреть на достаточно спорный синтаксис MUMPS.

Разработка, сопровождение и внедрение систем на MUMPS требует на порядки меньше затрат труда по сравнению с системами написанными на других языках программирования.

Это заявление как-то голословно звучит. Как вы сравнивали, с чем сравнивали, на каких системах?

У джентельменов принято верить на слово! 😋

Вот именно.

Заявление основано на многолетнем опыте разработки, внедрении и сопровождении информационных систем. Это мой личный опыт. Так что это утверждение проверено.

Это мой личный опыт. Так что это утверждение проверено.

Это называется - субъективняая оценка. Чтобы что-то "проверить", нужны объективные критерии проверки. Они имеются?

Возможно на ваших задачах, это проверено, но вот как понять будет ли это так на моих? Стоит ли мне выкинуть условные kotlin, C#, js, C++, и т.д. и срочно перейти на MUMPS ?

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

У меня такое впечатление, что статью никто не прочитал дальше анотации. MUMPS существует только в виде языка базы данных. У этого языка есть потенциал языка программирования но подходящей реализации нет. MSH это вообще проект а не реализация языка. Речь идет только о потенциале этого типа языков.

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

У меня такое впечатление, что статью никто не прочитал дальше анотации.

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

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

Про MSH у вас написано:

Такую доработку я выполнил, создав язык MSH. Потратил на это я десятилетия.

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

Про многозадачность, то как вы описали её - очень похожее есть в куче языков. Хотелось бы сравнения с корутинами, горутинами, async/await - чем они хуже MSH?

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

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

При чем тут ОС и ассемблер? Многозадачность уже давно встроена в некоторые языки, причем безо всяких библиотек.

Звучит дико. Что вы такое делаете, что вам нужен ассемблер, тонкости ос в 2022???Современные языки могут в многопоточность и/или асинхронность без всяких ассемблеров. Почитайте уже про современные языки, не ограничивайтесь языками прошлого века.

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

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

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

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

P.S. Но, у автора же, конечно нет ещё реализации его улучшенного MUMPS, языка MSH, то, вероятно придётся запасаться попкорном для появления каких то результатов такого гипотетического сравнения.

Улучшенного MUMPS еще нет, придется ограничиться стандартным.

Prog Set ^A[1,2,3]="Привет Мир"

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


Но на PHP код будет такой:


$a[1][2][3] = "Привет Мир";

На MUMPS 31 символ, на PHP 27. На PHP и меньше длина кода в символах и меньше логических конструкций, при том что я добавил пробелы для улучшения читаемости. На приведенном вами примере PHP оказался лучше MUMPS по тем критериям, которые можно измерить для такого объема кода. Делаем вывод, что ваше утверждение "требует на порядки меньше затрат труда" неверно?

Ничего общего. У меня приведен не код строки , а программа. И даже строки кода не имеют между собой ничего общего. Они выполняют разные задачи. Приведите программу выполняющую ту же работу.

И у меня, представьте себе, тоже программа. Ее можно запустить вот так:


php -r '$a[1][2][3] = "Привет Мир";'

Ничего общего.

В таком случае опишите отличия.


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

А почему вы от меня требуете формального соблюдения ваших критериев, если сами не соблюдаете мои? Давайте уж тогда начнем с того, что я попросил вас привести программу длиной более 10 строк, которая выполняет какую-то полезную работу, а не является абстрактным Hello World. Вы ведь сетуете на то, что программистам неинтересен MUMPS, говорите про "разработку, сопровождение и внедрение систем", вот и покажите пример из тех, для которых обычно требуется разработка, сопровождение и внедрение, то есть делающий полезную работу.

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

А какую работу выполняет ваша программа? Я просто не смог ее запустить — можно ли считать, что она не выполняет никакой работы? ;)

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

Бейсик круче любого MUMPS и MSH!
Попробуйте доказать, что это не так. 😋

P.S. Кстати встретился какой то язык M ответвление MUMPS?
в этом посте блога Join the M revolution—Get your tools
(08 Mar 2012)

Здесь, если кому надо, учебный материал The Mumps Programming Language
A Homepage for MSM-Workstation
What is MSM-Workstation?

In brief, it's an implementation of ANSI Standard M that runs on Microsoft Windows 95, Windows 98, Windows NT 4.0 and Windows 2000. As well as implementing most of X11.1-1995 (the M language) it also implements the M Windowing API (MWAPI), integrating with the GUI facilities of its host environment. Developed by Micronetics Design Corporation, version 2.0.0 was released to the world shortly before the MSM product line was acquired by InterSystems Corporation.
Я от вас ничего не требую.

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


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

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


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

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


Я могу записать в одной транзакции что-то типа такого?


^A["account","234","sum"]-=100
^A["order","123","status"]="paid"

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


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


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


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


А я могу записать значение


^A["order","123","created_at"]="2022...";
^A["order","123","status"]="paid";

а потом прочитать его по ключу ^A["order","123"] в виде ["created_at": "2022...", "status": "paid"], чтобы отправить его например в виде JSON в качестве ответа Web API? Насколько я понял из документации, тоже нет. Ну и зачем мне тогда такие ассоциативные массивы, если каждое свойство объекта надо доставать по отдельности?


И если это все-таки зачем-то понадобится, на PHP (да и в любом языке программирования общего назначения), можно написать пару функций, которые будут делать то же самое. Их надо написать 1 раз, и они будет работать для всего остального кода независимо от его размера. Можно написать не на PHP, а на C в виде расширения PHP, и тогда в исходном коде программы их не будет. Всего-то 60 строк, и получаем возможность, которая есть в MUMPS, и даже больше, так как можно использовать составные значения, а не только строки с числами.


w(['A',1,2,3],'Привет Мир');
w(['A','orders','123','created_at'],'2022-01-10 12:34:00');
w(['A','orders','123','status'],'paid');

$tmp = r(['A',1,2,3]);
var_dump($tmp);
$tmp = r(['A','orders','123']);
var_dump($tmp);

/*
string(19) "Привет Мир"
array(2) {
  'created_at' => string(19) "2022-01-10 12:34:00"
  'status' => string(4) "paid"
}
*/

Скрытый текст
function w(array $key, $value)
{
    $file = 'db.txt';
    $fp = fopen($file, 'c+');
    if (flock($fp, LOCK_EX)) {
        $contents = fread($fp, 1024*1024);
        $data = json_decode($contents, true) ?: [];

        $storage = &$data;
        $lastElement = array_pop($key);
        foreach ($key as $element) {
            if (!array_key_exists($element, $storage)) {
                $storage[$element] = [];
            }
            $storage = &$storage[$element];
        }

        $storage[$lastElement] = $value;
        unset($storage);

        fseek($fp, 0, SEEK_SET);
        $contents = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

        fwrite($fp, $contents);

        fflush($fp);
        flock($fp, LOCK_UN);
    } else {
        throw new RuntimeException('Cannot get lock');
    }

    fclose($fp);
}

function r(array $key)
{
    $file = 'db.txt';
    $fp = fopen($file, 'c+');
    $value = null;

    if (flock($fp, LOCK_EX)) {
        $contents = fread($fp, 1024*1024);
        $data = json_decode($contents, true) ?: [];

        $value = $data;
        foreach ($key as $element) {
            if (!array_key_exists($element, $value)) {
                $value = null;
                break;
            }
            $value = $value[$element];
        }

        flock($fp, LOCK_UN);

    } else {
        throw new RuntimeException('Cannot get lock');
    }

    fclose($fp);

    return $value;
}

Я правильно понял, это как basic но со встроенной базой данных?

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

Да очень убедительно. Замена одной строки программы, чуть ли не целой программной системой. Убедили.

из приведенного примера очевидно, что адекватного примера на замену одной строки MUMPS у вас нет, поэтому пытаетесь подменить вопрос о функционале, вопросом о полезности. Это разные темы. Есть прекрасная украинская пословица: В огороде бузина, а в Киеве дядька.

Так расскажите о функционале вашей сакральной строки. Что в этом хелловорде особенного.

Да очень убедительно.
адекватного примера на замену одной строки MUMPS у вас нет

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


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


Замена одной строки программы, чуть ли не целой программной системой.

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


А MUMPS это разве не программная система? Там тоже кто-то взял и написал код для сохранения в файл, и занимает он гораздо больше 1 строки.


И почему кстати критерием должна быть только запись в файл? В PHP есть функция json_encode(), которая переводит объекты сложной структуры в JSON-представление. Это тоже делается одной строкой. Сколько строк вам понадобится для реализации этого в MUMPS? Раз у вас критерий "в язык это не встроили", значит он проигрывает по этому критерию.


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


подменить вопрос о функционале, вопросом о полезности

1. Вы сами указали критерий "разработка, сопровождение и внедрение систем". Бесполезные системы никто не сопровождает и не внедряет.
2. Я ничего не подменял, мой код имеет тот же функционал, что и ваш.

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

Полезность программного обеспечения отдельная и очень серьезная тема, требующая как минимум отдельной статьи.

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


К свойствам языка она имеет косвенное отношение.

Хороший язык, на котором нельзя написать полезную программу? Это какой-то нонсенс. Зачем кому-то использовать такой язык?


Сомнений в том что на MUMPS можно писать полезные программы у меня нет.

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

Я разработал сервер системы бухучета, по функционалу примерно как 1С мы втроем ее внедряем и сопровождаем. Работает годами даже без нашего сопровождения. Хотите попробовать могу выслать можете сравнить.

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

У меня был опыт написания части бухгалтерской системы сделанной на Турбо Бейсик с «реляционной СУБД» в рамках этой же реализации под ДОС.
И о чём это говорит?
Да, ни о чём, кроме полученного какого то субъективного опыта.

Вы считаете свой опыт абсолютным критерием истины в конкуретной среде других существующих решений как той же 1С?

P.S. В плане одного из элементов дизайна языка M интересно выглядит возможность сокращения в написании слов языка, но думаю IDE всё же должна предоставлять возможность по отображению программы в полном варианте слов, если есть такой запрос к ней.

Сомнений в том что на MUMPS можно писать полезные программы у меня нет.

Так никто и не сомневался, что полезные программы можно писать на чем угодно, хоть и на brainfuck. Вопрос в целесообразности. Вы так и не ответили на простой вопрос: что легко и просто делается на MUMPS и нелегко и непросто на любой другом современном языке?

Это рабочая программа. Она выполняется в любой MUMPS системе.Как она может не запускаться у вас ума не приложу. Приметивнее программу трудно придумать. Вы что то не разобрались. На какой MUMPS системе вы ее запускали? Дает она именно тот результат который определяется приведенной в программе командой. Кому интересно может обратиться к документации по MUMPS.

Ну вот, обычного линукса уже недостаточно ;)
Ок, где взять MUMPS систему?

Отвечу за автора. Я вот такое нашёл https://github.com/programarivm/mumps-examples с примерами и инструкцией как запустить. Посмотрел примеры, для себя всё понял, запускать не стал.

Возможно, как скриптовый язык для систем с которыми он идёт, он не плох(хоть я и сильно сомневаюсь), но всерьёз mumps сравнивать с нормальными языками - просто бессмысленно.

О боже - я это дочитал до конца! И ничерта не понял. Потом открыл Вики и как понял.

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

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

Статья не про MUMPS и Диамс, как вы на них работали, а про свойства этого языка. В любой системе масса возможностей подвесить систему. А не снять блокировку с глобали это надо еще умудрится, я в своей практике такого не встречал вообще. У меня годами пользователи работали и работают без всяких ошибок. Для языков программирования 30-40 лет не срок. Языки 30-40 летней давности все еще популярны и это самые используемые языки. За это время новых идей почти не появилось. Я затрудняюсь назвать такие, кроме пожалуй ООП. Все остальное пустая мишура.

MUMPS/ДИАМС были хороши 30-40 лет назад для быстрого разворачивания недорогих рабочих мест: 1 компьютер, 1 база данных, пара мультиплексорных карт по 16 последовательных портов, 32 VT-xxx совместимых терминала с клавиатурами, -- и вот уже бухгалтерия и отдел кадров дружно стучат указательными пальцами по клавишам. Потом приложение, блокирующее глобаль, вылетает по ошибке, не сняв блокировку, и все виснут и идут обедать.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории