Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Build in obfuscation? oOСкрытый текстAppendix 7: An example of «traditional» M coding style
%DTC
%DTC; SF/XAK — DATE/TIME OPERATIONS ;1/16/92 11:36 AM
;;19.0;VA FileMan;;Jul 14, 1992
D I 'X1!'X2 S X="" Q
S X=X1 D H S X1=%H,X=X2,X2=%Y+1 D H S X=X1-%H,%Y=%Y+1&X2
K %H,X1,X2 Q
;
C S X=X1 Q:'X D H S %H=%H+X2 D YMD S:$P(X1,".",2) X=X_"."_$P(X1,".",2)
K X1,X2 Q
S S %=%#60/100+(%#3600\60)/100+(%\3600)/100 Q
;
H I X<1410000 S %H=0,%Y=-1 Q
S %Y=$E(X,1,3),%M=$E(X,4,5),%D=$E(X,6,7)
S %T=$E(X_0,9,10)*60+$E(X_«000»,11,12)*60+$E(X_«00000»,13,14)
TOH S
%H=%M>2&'(%Y#4)+$P("^31^59^90^120^151^181^212^243^273^304^334","^",%M)+%D
S %='%M!'%D,%Y=%Y-141,%H=%H+(%Y*365)+(%Y\4)-(%Y>59)+%,%Y=$S(%:-
1,1:%H+4#7)
K %M,%D,% Q
;
[...]
Я на MUMPS построил серверную часть бух.учета при этом мне не пришлось кувыркаться с чудесными базами данных вроде Оракла и MS SQL.
Приходится комбинировать язык с базой. Комбинация не очень удачная с моей точки зрения.
NoSQL базы это примитивные базы Ключ-значение. Строить на них сложные взаимосвязанные структуры данных сложно.
А писать обращение к базе в виде:
Set ^A[«организация»,«подотчетник»,«материал»]=89,28
намного проще чем открывать закрывать базу и корректировать данные с помощью SQL операторов мало приспособленных для этих целей.
// будем выполнять по 20 заданий одновременно
ch := make(chan byte, 20)
// всего тысяча заданий
for i := 0; i < 1000; i++ {
ch <- 1
// внутрь можно передавать значения,
// например, номер выполняемого задания
go func(index int) {
// тело вашего задания
// как выполнили, освобождаем очередь
<-ch
}(i)
}
// проверяем все ли уже отработали после завершения
// цикла, а пока делаем что-то бесполезное — спим, например
for len(ch) > 0 {
time.Sleep(100 * time.Millisecond)
}
А это что не цикл?
await Task.Factory.ContinueWhenAll(
Enumerable.Range(1, 20).Select(t => Task.Factory.StartNew(() => {})).ToArray(),
ct => {});
Поэтому так важен язык с хорошей организацией данных.
3) Отсутствие безымянных структур.
struct X {int a,b;};
struct Y {struct X; int c;} y;
int main()
{
y.a=1;
}
-не поддерживаются привычные приоритеты арифметических операций (например, выражение 2+3×10 даёт в MUMPS значение 50);
-лишний пробел или разрыв строки может совершенно изменить смысл синтаксической конструкции;
-ключевые слова языка не зарезервированы и могут широко использоваться в качестве идентификаторов.
-IF THEN THEN ELSE ELSE=THEN END
Не понял. Это синтаксически не верная конструкция. Не понял смысла.
IF IF=THEN DO THENДекларирование переменных вообще не нужно.
Для предметной области не важно целое или действительное значение имеет переменная. Какое значение пользователь ввел с клавиатуры такое и есть.
Самый удачный метод управления памятью. Автоматическое выделение и освобождение памяти без сборщика мусора и утечек памяти.
Гибкость языка. Отсутствие деклараций
она может быть уничтожена далее в любой программе с помощью команды Kill
bar=foo, а после Kill ^foo?если вас интересует случай Kill foo то переменная foo будет удалена, а в bar останется копия.
Ссылок в MUMPS нет.
Автоматическое выделение и освобождение памяти без сборщика мусора и утечек памяти
Если во внешней программе были переменные с такими же именами как в New то они как бы помещаются в стек и становятся недоступными внутри этой программы.
Если в подпрограмме переменная была объявлена через команду New то она будет уничтожена после выхода из подпрограммы, если нет то она может быть уничтожена далее в любой программе с помощью команды Kill иначе вся память будет освобождена при завершении приложения.
Kill?Я имею возможность писать обработку данных независимо от структуры переданной мне переменной
Если это внешняя переменная то она будет постоянно использоваться, если нет то используем New.
Если я собираюсь обрабатывать структуру то у меня есть набор механизмов обойти эту структуру и выполнить нужную операцию
А что декларации используются для чего нибудь другого кроме описания типа переменной?
var temp;
temp = "qqq";
temp = 123;
В MUMPS нет возможности узнать будет ли использоваться переменная или нет. Часть кода формируется во время исполнения и возможно в цикле. Возможности транслятору узнать будет ли в дальнейшем использоваться переменная нет в принципе.
Конечно я должен ожидать на входе дерево и тогда смогу обработать и скалярное значение.
Декларирование отсутствует как таковое, а типизация происходит в момент выполнения любой операции и от нее зависит.
Только зачем в этом случае декларация? Что бы программист не дай бог в именах переменных не запутался?
received = 15;
//много кода
recieved = size + 13;
Вы оспариваете один из них об автоматическом управлении данными. По команде New создается новая область видимости переменной при завершении подпрограммы Автоматически освобождается эта переменная.
new не создается новая область видимости, создается переменная в текущей области видимости (ограниченной подпрограммой), скрывающая существующую в глобальной области видимости переменную с таким же именем.Только я нигде не встречал чтобы такую кашу из языков и технологий кто нибудь использовал.
Команда New в одной из форм создает именно область видимости.
Вообще-то да только я не знаю ничего хуже такого слоеного пирога.
То ввод в эксплуатацию и сопровождение требует огромных трудозатрат. А поиск ошибок когда валится в каком то слое незабываемое удовольствие.
Команда New без аргументов [создает именно область видимости]
NEW ... NEW ... QUIT не значения после QUIT вернутся к значениям до второго NEW, а будет выход из текущего блока выполнения (который не обязательно начат NEW).А что разве это не так? В любом банке сопровождение осуществляется целым отделом IT и каких только специалистов там нет.
Но это по существу мало чем отличается от области видимости.
Ну доказательство здесь довольно проблематично. Надо одну и туже задачу реализовать на разных технологиях и затем сравнить. Я такого примера не знаю. Да и это не совсем корректно. Квалификация исполнителей должна быть идентичной, что уже переносит данное сравнение в область фантазий.
Технологии вы можете выбирать на свое усмотрения, но альтернативные все таки следует знать. [...] Я могу опираться только на свой опыт, а он меня ведет только в сторону MUMPS.
Языки программирования. Куда идем товарищи. Еще один малоизвестный но очень мощный язык