Автор Тема: Сириус - обероноподобный язык и компилятор  (Прочитано 77565 раз)

DIzer

  • Гость
Или другими словами: "Зачем нужно было писать неправильно в первой секции, если мы смогли всё сделать правильно во второй?" И раз удалось обнаружить какие-то побочные эффекты во второй секции, то это же самое можно было бы выполнить и в первой секции, правильно организовав условие продолжения. Таким образом, вторая причина - это частный случай первой.
Ну даете.. простой пример, внутри цикла обработка ВНЕШНИХ данных - вот вам и источник заразы... но я говорю про другое.. давайте просто возьмем распространенный момент  "общего плана" -  поиск по неупорядоченному набору элементов-  условие поиска состоит как минимум из двух частей проверки на принадлежность множеству и на равенство определенному значению (так называемый линейный поиск). Естественно наше желание... разобраться с результатом поиска... не вижу каким образом ветка ELSE в цикле может помочь мне в этом. Более того  ELSE IF в данном случае по смыслу уводит далеко от реальности... все равно, что табуретку назвать тумбочкой... да и сам факт, что по приведенной вами форме цикла WHILE я не смог "угадать"  смысл конструкции говорит о многом...

DIzer

  • Гость
Упоминание заимствований из графного Паскаля - убедило меня  еще более в сильном влиянии предметной области на Сириус.
Не графский, а графический ) Там, кстати, не только паскаль был, но и графический ассемблер.
Вот пример
$===========================================$
!SB,#10,R2                                  !
!-------->$=================================$
 CLR R0   !LT,R1,#10 GT,A(R0),A(R1),B       !
 MOV #1,R1!-------->$--------------->$----->!
                    !MOVB A(R0), R3  !INC R0
                    !MOVB A(R1),A(R0)!INC R1
                    !MOVB R3,A(R1)   !
                    !                !
                    !--------------->!
Не графический, а псевдографический...  :D ;D

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Цикл-паук, безусловно красивая и правильная вещь
Цикл-паук, безусловно, был высосан из пальца дилетантами, в наукообразных потугах.
Если уж называете его "красивая и правильная вещь", приводите примеры.
Быстро выясняется, что с этим большие проблемы.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Цикл-паук, безусловно, был высосан из пальца дилетантами, в наукообразных потугах.
Если уж называете его "красивая и правильная вещь", приводите примеры.
Быстро выясняется, что с этим большие проблемы.
Да, на самом деле, примеров-то куча, если посмотреть с точки зрения логики цикла-паука -  многие в WHILE ставят ифы с брейками и ретурнами )
По сути, это и есть условия выхода, и в пауке находятся в секции OUT.
Я не говорю, что он лучше и понятнее привычных циклов, но право на жизнь имеет, особенно там, где в цикле анализируется много состояний, от которых зависит точка входа в цикл, и завершающие операции при выходе

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Гм. У меня сложилось впечатление, что советская школа тяготеля к графическим или комбинированным языкам и средствам разработки. Тот же дракон, а теперь еще и вот это вот..
Ну тяготела это вряд-ли, но то, что такие подходы были и использовались не в лабораторных, а в промышленных условиях это факт.
Пытались ускорить ввод, сократить объем вводимых данных, унифицировать. Как результат - редакторы, в которых ключевые слова вводились одним нажатием, более того были редакторы, в которых вводились целые языковые конструкции, в которых были спецполя, по которым можно было перемещаться табулятором, редактировать, удалять/вставлять текущую секцию или всю конструкцию одним нажатием, что и повышало скорость ввода и исключало ошибки. Всё как в современных средствах разработки, не прошло и 20 лет )))
Ну, справедливости ради, в ZX Spectrum'e тоже ключевые слова вводились одним нажатием. И это было дико неудобно (по крайней мере для меня лично).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
$===========================================$
!SB,#10,R2                                  !
!-------->$=================================$
 CLR R0   !LT,R1,#10 GT,A(R0),A(R1),B       !
 MOV #1,R1!-------->$--------------->$----->!
                    !MOVB A(R0), R3  !INC R0
                    !MOVB A(R1),A(R0)!INC R1
                    !MOVB R3,A(R1)   !
                    !                !
                    !--------------->!
Не графический, а псевдографический...  :D ;D
)))
Ну ценность там в том, что сама логика Р-схемы не зависит от языка, это просто паттерн, что очень ценно, к примеру, когда переписываешь код под конкретный процессор - не нужно думать, что же делает этот код на чужом ассемблере, алгоритм понятен из Р-схемы, остается только заменить содержимое нескольких секций. Были целые библиотеки таких паттернов, с подробным описанием. Теоретически так можно было унифицировать И существовало бы некое разделение труда - кто-то придумывает алгоритмы в виде Р-схем, а кто-то наполняет их конкретным содержанием, Р-схемы же использовались не только для программирования, но и для описания технологических и производственных процессов - бизнес-процессов ))), потоков и т.п.
Та же самая графическая структура для Паскаля
$===========================================$
!z := 1 TO 10                               !
!-------->$=================================$
 i := 0   !j < 10    A[i] > A[j]            !
 j := 1   !-------->$--------------->$----->!
                    !x := A[i]       !INC(i)
                    !A[i] := A[j]    !INC(j)
                    !A[j] := x       !
                    !                !
                    !--------------->!

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Ну, справедливости ради, в ZX Spectrum'e тоже ключевые слова вводились одним нажатием. И это было дико неудобно (по крайней мере для меня лично).
Ну, вводом ключевых слов одним нажатием, вернее двумя - управляющая клавиша и клавиша на которую ключевое слово повешено - я почти не пользовался, поэтому за удобство ничего не скажу, а вот автодополнение было и есть крайне удобная штука, по крайней мере для меня.

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Да, на самом деле, примеров-то куча, если посмотреть с точки зрения логики цикла-паука -  многие в WHILE ставят ифы с брейками и ретурнами )
По сути, это и есть условия выхода, и в пауке находятся в секции OUT.
Я не говорю, что он лучше и понятнее привычных циклов, но право на жизнь имеет, особенно там, где в цикле анализируется много состояний, от которых зависит точка входа в цикл, и завершающие операции при выходе
Если есть пример - в студию.
А так нечего воздух сотрясать. "Куча, многие ставят, там..."

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
да и сам факт, что по приведенной вами форме цикла WHILE я не смог "угадать"  смысл конструкции говорит о многом...
Не совсем понял, о чём это Вы. Вы ничего не путаете?

DIzer

  • Гость
да и сам факт, что по приведенной вами форме цикла WHILE я не смог "угадать"  смысл конструкции говорит о многом...
Не совсем понял, о чём это Вы. Вы ничего не путаете?
  нет не путаю- я вполне четко говорил (говорю) о расшифровке Сириуского WHILE  Kemet'а- относительно вас (вашей точки зрения) - Валерий- первая часть  сообщения...

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #100 : Май 24, 2012, 07:03:49 am »
Если есть пример - в студию.
А так нечего воздух сотрясать. "Куча, многие ставят, там..."
Понятно.
Peter, у Вас арахнофобия )
Я же не говорил, что данный тип цикла или данный подход нужно всегда и везде использовать, я говорил, что он имеет право на жизнь, и бывает очень удобен.
Хотел найти свою программу для обмена документами 1С в специальном текстовом формате, чтение было построено на конечных автоматах, и паук там использовался, но где то мсходники затерялись (
Вот тогда часть другого примера.
...
CYCLE
...
    | State = States.Init DO
        ch := Eot;
        IF Channel.Connect() THEN
            Dev.Init(); State := States.Next
        ELSE
            State := States.ChannelDisconnected;
        END;
    | State = States.Next DO channel.ReadChar ( ch ); State := States.Parse;
    | State = States.Parse DO
        IF MakeCommand( cmd, ch ) THEN
            State := States.Command
        ELSE
            State:= States.ErrorParseCommand
        END;
    | State.Command DO
        IF MakeParams (params, ch ) THEN
            State := States.DoCommand
        ELSE
            State := States.ErrorParseParams
        END;
    | State = States.DoCommand DO
        Dev.AddCommand( cmd, params , State ) ;
...
OUT
...
    | ch = eot DO Dev.SoftStop(); Channel.SaveState (); State := States.SoftStop;
    | ch = H DO Dev.Stop(); State := States.Halt;
    | ch = U DO Dev.handler.Unlink(); State = States.Quit;
    | ch = O DO Dev.PowerOff(); State := States.PowerOff;
...
ELSE
    ILLEGAL
END;

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #101 : Май 25, 2012, 08:47:41 am »
давайте просто возьмем распространенный момент  "общего плана" -  поиск по неупорядоченному набору элементов-  условие поиска состоит как минимум из двух частей проверки на принадлежность множеству и на равенство определенному значению (так называемый линейный поиск). Естественно наше желание... разобраться с результатом поиска... не вижу каким образом ветка ELSE в цикле может помочь мне в этом. Более того  ELSE IF в данном случае по смыслу уводит далеко от реальности... все равно, что табуретку назвать тумбочкой... да и сам факт, что по приведенной вами форме цикла WHILE я не смог "угадать"  смысл конструкции говорит о многом...
Зависит от того, что подразумевается под "разобраться с результатом поиска". Если, возникает необходимость что-то скорректировать из-за вылета из цикла это одно, если же мы используем результаты поиска это уже совсем другая история.
В первом случае очевидны две вещи: во-первых данный фрагмент кода, т.е. нормализация результата работы цикла, логически является частью цикла, без него он логически не завершен, поэтом вполне естественно желание как-то объединить это в одну конструкцию (тем более ранее такая конструкция была единой и выражалась с помощью Р-схем). Возможно, реализация этого желания в Сириусе - неудачная, нужно как-то иначе отделить эту секцию от тела цикла, не с помощью ELSE, а с помощью другого ключевого слова (какого?) ; во-вторых, коль приходится дополнительно анализировать результат работы цикла, чтобы выяснить корректно ли завершен цикл, возможно, стоит перепроектировать цикл,  исключить некоторые  до входа в цикл, чтобы избавиться от таких провк.
Во втором случае, когда мы используем результат поиска и требуется, например, проверка что указатель на экземпляр # NIL, то это же совсем другая задача, не связанная с циклом.

DIzer

  • Гость
Re: Сириус - обероноподобный язык и компилятор
« Ответ #102 : Май 25, 2012, 11:15:22 am »
давайте просто возьмем распространенный момент  "общего плана" -  поиск по неупорядоченному набору элементов-  условие поиска состоит как минимум из двух частей проверки на принадлежность множеству и на равенство определенному значению (так называемый линейный поиск). Естественно наше желание... разобраться с результатом поиска... не вижу каким образом ветка ELSE в цикле может помочь мне в этом. Более того  ELSE IF в данном случае по смыслу уводит далеко от реальности... все равно, что табуретку назвать тумбочкой... да и сам факт, что по приведенной вами форме цикла WHILE я не смог "угадать"  смысл конструкции говорит о многом...
Зависит от того, что подразумевается под "разобраться с результатом поиска". Если, возникает необходимость что-то скорректировать из-за вылета из цикла это одно, если же мы используем результаты поиска это уже совсем другая история.
В первом случае очевидны две вещи: во-первых данный фрагмент кода, т.е. нормализация результата работы цикла, логически является частью цикла, без него он логически не завершен, поэтом вполне естественно желание как-то объединить это в одну конструкцию (тем более ранее такая конструкция была единой и выражалась с помощью Р-схем). Возможно, реализация этого желания в Сириусе - неудачная, нужно как-то иначе отделить эту секцию от тела цикла, не с помощью ELSE, а с помощью другого ключевого слова (какого?) ; во-вторых, коль приходится дополнительно анализировать результат работы цикла, чтобы выяснить корректно ли завершен цикл, возможно, стоит перепроектировать цикл,  исключить некоторые  до входа в цикл, чтобы избавиться от таких провк
Во втором случае, когда мы используем результат поиска и требуется, например, проверка что указатель на экземпляр # NIL, то это же совсем другая задача, не связанная с циклом.
;) То и означает - -разобраться с  результатами поиска - у нас возможно как минимум 2 варианта - 1. мы нашли искомый элемент 2 мы не нашли его (просмотрев ВСЕ элементы множества) - понятно, что идеологически это единый кусок... так я говорю про то, что использование ELSE в этом случае уродливо (если не сказать еще хуже...).  А между тем вышеупомянутый паттерн.. весьма общий для ЯП в которых нет операторов  безусловного перехода и выхода из цикла...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Сириус - обероноподобный язык и компилятор
« Ответ #103 : Май 25, 2012, 11:19:53 am »
Ну, я в общем то вполне понимаю зачем этот самый ELSE. Вместе с ним цикл превращается в законченную отчуждаемую конструкцию. Вещь в себе. Эдакий независимый блок, еще не функция/процедура, но уже и не просто набор statement'ов.

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

DIzer

  • Гость
Re: Сириус - обероноподобный язык и компилятор
« Ответ #104 : Май 25, 2012, 11:20:03 am »
 :D Поясняю - с моей стороны это "гнусный" намек, на то что введением в секцию ELSE - вы не только не добились поставленной цели , но  и ухудшили ситуацию.