Re[5]: А эхо в ответ: мать...мать...мать...
От: moudrick Россия http://community.moudrick.net/
Дата: 21.06.05 14:40
Оценка: -1
Даже неудобно как-то критиковать правильный на 99,9% пост...

M>Единственным человеком, что решил отречься от фанатизма, был AVC. В одной из веток он верно отметил, что Оберон предназначен для работы в системе, построенной на нем же. И так же отметил, что BlackBox — это и есть эмлятор такой вот системы. Единственные доступные для изучения системы такого рода, что можно пощупать, — это BlueBottle и BlackBox.


Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.
Re[4]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 21.06.05 14:40
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Математически доказал, что там -1 вместо 0?


Да, без шуток.

Программа работала корректно (там почти всегда возвращались числа большие 0, ноль — минимум, вот такие данные были), так что тестирование проходило на ура. Методом пристального вглядывания в исходный текст программы обнаружил, вот...


Примеры типичных ошибок как так может быть:

Было:
n = ...
while(n > 0)
{
  ...
  n--;
}
use(n);

После глупого с моей стороны так сказать усовершенствования стало:
n = ...
while(n --> 0)
{
  ...
}
use(n); // теперь n на 1 меньше чем надо (а иногда нет)

Мне стыдно за такую глупость, поддался "моде" на --> 0 оператор...


Еще пример (авторство не моё)
  if(условие1) 
    return ЧтоТо1(......);

  if(условие2);
    return ЧтоТо2(......);

  if(условие3) 
    return ЧтоТо3(......);

лишняя точка с запятой поставленная по невнимательности у if(условие2).
Re[6]: Синтаксический оверхед
От: Socrat Россия  
Дата: 21.06.05 14:42
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, boomsic, Вы писали:


B>>так что получается в обероне точно так же програмист не может быть "уверен, что перед следующим оператором после выхода из цикла выполняется условие ~p (NOT p)."


СГ>Может. Таково одно из положений структурного программирования.

СГ>
СГ>WHILE p DO 
СГ>  ... 
СГ>END; 
СГ>ASSERT(~p) 
СГ>

СГ>Этот ассерт ни когда не остановит выполнение программы, условие ~p всегда истинно.

СГ>
СГ>while (p)
СГ>{ 
СГ>  ... 
СГ>}
СГ>assert(!p) 
СГ>

СГ>А вот этот ассерт иногда может остановить работу программы. Например, если внутри цикла сделать break не присвоив p ложное значение.


А при чем тут деструктор? И что тебе вообще не нравится? То, что можно прервать цикл в любое время? Так это даже иногда полезно.
Re[14]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 21.06.05 14:47
Оценка: :)
Здравствуйте, CrystaX, Вы писали:

CX>Каким критериям он должен соответствовать


Повторять по сто раз одно и тоже?

Тут про "звездочки": http://www.rsdn.ru/Forum/Message.aspx?mid=1216614&only=1
Автор: Сергей Губанов
Дата: 10.06.05


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


Потому что меньше одной "звездочки" нельзя, а больше одной — уже не надо.
Re[7]: Синтаксический оверхед
От: Socrat Россия  
Дата: 21.06.05 14:50
Оценка: 1 (1)
Здравствуйте, Privalov, Вы писали:

P>
P>   for (i=0; a[i]>=0 && i < N; i++);
P>


Хм... Лучше сначала i сравнить с N...
Re[5]: Синтаксический оверхед
От: Курилка Россия http://kirya.narod.ru/
Дата: 21.06.05 14:51
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:
...
СГ>Примеры типичных ошибок как так может быть:

СГ>Было:

СГ>
СГ>n = ...
СГ>while(n > 0)
СГ>{
СГ>  ...
СГ>  n--;
СГ>}
СГ>use(n);
СГ>

СГ>После глупого с моей стороны так сказать усовершенствования стало:
СГ>
СГ>n = ...
СГ>while(n --> 0)
СГ>{
СГ>  ...
СГ>}
СГ>use(n); // теперь n на 1 меньше чем надо (а иногда нет)
СГ>

СГ>Мне стыдно за такую глупость, поддался "моде" на --> 0 оператор...

Моде? Может просто не потрудился прочитать документацию и выяснить разницу между постфиксным и префиксными -- и ++? Просто, на мой взгляд, если не удосужился подумать, то никакая верификация тут не поможет
Re[15]: Синтаксический оверхед
От: CrystaX Россия https://crystax.me/
Дата: 21.06.05 14:51
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


СГ>Потому что меньше одной "звездочки" нельзя, а больше одной — уже не надо.


Почему Вы решили, что минимальное количество лексем является признаком правильности синтаксиса? Это откровение свыше или этому есть какие-то реальные обоснования?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[7]: Синтаксический оверхед
От: Oleg A. Bachin Украина  
Дата: 21.06.05 14:52
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>В Modula/Oberon ни одно из указанных Вами слов не присутсвует. До Паскаля мне дела нет, он устарел давным давно.


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

ЗЫ меня много что не устраивает в делфях, но поверьте не синтаксис
к begin/end привыкаешь за теже 10-15 минут перехода на делфи, за которые привыкаешь к {} в сях. в конце концов подсветка синтаксиса рулит и эти конструкции заметны только с непривычки.

ЗЫЫ
procedure TReferenceTree.UnlinkNode(current: PReferenceNode);
begin
  // unlink left/right
  if Assigned(current^.LeftInline) then
    begin
      if Assigned(current^.RightInline) then
        begin
          // glue left with right
          current^.LeftInline^.RightInline := current^.RightInline;
          current^.RightInline^.LeftInline := current^.LeftInline;
        end
      else
        // unlink left
        current^.LeftInline^.RightInline := nil;
    end
  else ; // nothink glue/unlink

  // unlink next/previous
  if Assigned(current^.PrevSibling) then
    begin
      if Assigned(current^.NextSibling) then
        begin
          // glue periouse with next
          current^.PrevSibling^.NextSibling := current^.NextSibling;

и т.д... и посмотрю на того кто осмелится такое писать в одну строку! понимаю что процедуры на 2-3 экрана это не нормально, но иногда без них не обойтись
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[2]: Синтаксический оверхед
От: Sergey J. A. Беларусь  
Дата: 21.06.05 14:55
Оценка:
Здравствуйте, AVC, Вы писали:

Разрешите вклинится.
Мой е2-е4:

AVC>а) Соответствие структурным принципам.


AVC>В отличие от синтаксиса Модулы/Оберона синтаксис Си/Си++ не соответствует принципам структурного программирования.

AVC>Рассмотрим хотя бы циклы.

Да. Рассмотрим.
Пример:

MODULE TestTest;
  IMPORT StdLog, Files; 

  PROCEDURE Test*();
  VAR  by: INTEGER;
  BEGIN
        by := 10;

        LOOP
            (*I expect by==0 after LOOP. Always. Oberon is cool.*)
            IF by=0 THEN EXIT END; 
            by := by - 1;
            EXIT;
        END;
        
        IF by # 0 THEN
            (*What the fuck !*)
        END;
        
  END Test;
END TestTest.


Итак, Оберон тоже не соответствует принципам структурного программирования.
Я — свихнувшееся сознание Джо.
Re[7]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 21.06.05 14:57
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Много раз уже звучал вопрос, а что EXIT убрали из языка?


Ёёёёёёёёёёё, повторяю еще раз.

Циклы бывают всего трех типов:

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

WHILE a DO ... END
post condition a = FALSE

2) Проверка условия завершения в середине выполнения итерации

LOOP
...
IF a THEN ...; EXIT END;
...
END

3) Проверка условия завершения в конце итерации

REPEAT ... UNTIL a
post condition a = TRUE

В WHILE и в REPEAT нету никакого EXIT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! EXIT есть только внутри LOOP ... END. Теперь понятно?

P>Простейший пример: найти в массиве первый отрицательный элемент.


На, пожалуй начинать надо с элементарных примеров:
i := 0;
WHILE (i < LEN(a)) & (a[i] >= 0) DO INC(i) END
Re[5]: Необходимые пояснения
От: Mamut Швеция http://dmitriid.com
Дата: 21.06.05 14:57
Оценка: +4
Во-первых я голодный, а потому и злой.

Но это не главное. Я привык, чтобы на мои ответы реагировали адекватно. И сам, по мере сил, пытаюсь адекватно реагировать на ответы других.

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

Ключевое слово в последнем предложении — аргументы.

Против аргументов, да еще поддержаных фактами, не попрешь. Вернее, попрешь, но с еще более убедительными аргументами.

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

Причины, по которой я продолжаю участвовать в этой дискуссии, следующие:

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

2. Я тестирую себя. Хоть поле и неблагодарное, я смотрю, насколько мои собственные аргументы правильны. И, если они неправильны, я отойду в сторону, согласившись со своей неправотой.

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

Известно, что даже самый главный фанатик RSDNa, Vlad2, имеет право быть таким фанатиком. За его плечами опыт, в его руках очень немаленький проект (я о R#). Он стоит на своем, но стоит с аргументами в руках.

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

Это все было мое могучее ИМХО и все обо мне, любимом Злой я и голодный


dmitriid.comGitHubLinkedIn
Re[8]: Синтаксический оверхед
От: Privalov  
Дата: 21.06.05 15:00
Оценка:
Здравствуйте, Socrat, Вы писали:

P>>
P>>   for (i=0; a[i]>=0 && i < N; i++);
P>>


S>Хм... Лучше сначала i сравнить с N...


А почему? Если a[i]<0, то i с N сравниваться уже не будет. Сэкономим пару тактов. Хотя может я не вижу чего. Устал...
Re[6]: Синтаксический оверхед
От: Пацак Россия  
Дата: 21.06.05 15:02
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

П>>... то я получу syntax error?

СГ>Ну да. Вы получите ошибку времени компиляции. Такая программа не будет скомпилирована. EXIT бывает только внутри LOOP ... END, а внутри WHILE или REPEAT его быть не может.

Угу, ясно. Допустим (совершенно условно):

while (queue.has_elements()) {
    Elem elem = queue.get_first();
    if (elem.get_state() == ST_FREE) {
        elem.start_processing(...);
        break;
    } else { 
        queue.make_last(elem);
    }
}


И чо делать?
Ку...
Re[6]: А эхо в ответ: мать...мать...мать...
От: Mamut Швеция http://dmitriid.com
Дата: 21.06.05 15:03
Оценка:
M>Что, и сборку мустора будем на Оберонах писать? Успехов... покажите только потом исходники, посмеемся вместе.

GC в Оберонах присутствует по умолчанию


dmitriid.comGitHubLinkedIn
Re[8]: Синтаксический оверхед
От: Privalov  
Дата: 21.06.05 15:09
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Циклы бывают всего трех типов:


На самом деле все три типа можно свести к одному — WHILE. Обоснование есть, IMHO, и у Вирта.

[.....]

СГ>В WHILE и в REPEAT нету никакого EXIT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! EXIT есть только внутри LOOP ... END. Теперь понятно?


На фиг мне такой EXIT, чтобы я еще думал, в каком цикле его можно использовать, а в каком — нет.

P>>Простейший пример: найти в массиве первый отрицательный элемент.


СГ>На, пожалуй начинать надо с элементарных примеров:

СГ>i := 0;
СГ>WHILE (i < LEN(a)) & (a[i] >= 0) DO INC(i) END

Я не просил переписать этот код на Обероне. Вопрос был: в каком из примеров assert сработает, а в каком — нет. Сами примеры еще раз не привожу.
Re[8]: Синтаксический оверхед
От: Oleg A. Bachin Украина  
Дата: 21.06.05 15:10
Оценка: -1
Здравствуйте, Privalov, Вы писали:

P>Здравствуйте, Sergey J. A., Вы писали:


SJA>>Та что там не тривиальный ! Вот тут автором треда был запощен простейший код на 20 строк:


SJA>>код
Автор: Сергей Губанов
Дата: 11.11.04


SJA>>(второй листинг)

SJA>>В котором он как ни странно допустил ошибку. Математический аппарат дал сбой ?

P>Меня за такие лестницы еще на первом курсе по рукам били. И очень правильно били.

P>А вообще-то там и первый листинг чтобы разобрать — серьезно попотеть надо. А после пары-тройки написанных процедур по весьма запутанному алгоритму у меня, боюсь, здоровья не хватит прочесть оба листинга сразу, а тем более найти в них ошибки.

да что там запутанного! там же бред полный! лол! я как посмотрел — мне смешно стало...
тут наверное в основном сишники сидят, потому и не поняли всю кривизну.
в двух словах, в делфях нет автоконструкторов и автодеструкторов, потому объекты не освобождаются сами в конце блока, а их нужно освобождать ручками. в случае ИС мы можем пролетель точку освобождения, потому существует следующая конструкция:
obj := TObj.Create;
try
  // working
finally
  obj.Free;
end;

т.е, заходя в блок try finally мы гарантированно в любом случае освободим объект.
соответственно конструкция try try не имеет права на жизнь
вот вам и математически доказанная глупая избыточность кода, и проявилась она не из-за Си, а из-за непонимания синтаксиса языка вообще.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[8]: Синтаксический оверхед
От: MShura  
Дата: 21.06.05 15:11
Оценка:
P>>Простейший пример: найти в массиве первый отрицательный элемент.

СГ>На, пожалуй начинать надо с элементарных примеров:

СГ>i := 0;
СГ>WHILE (i < LEN(a)) & (a[i] >= 0) DO INC(i) END

Предлагаю сравнить количество "лексемм":

for (i=0; i < N && a[i] >= 0; i++);
Re[5]: Ошибка
От: achp  
Дата: 21.06.05 15:14
Оценка:
Здравствуйте, Oleg Volkov, Вы писали:

OV>Вы хотите сказать, что на С/С++ невозможно обеспечить p == false после выхода из цикла while(p)?


Формально говоря, это так.
Re[9]: Синтаксический оверхед
От: xBlackCat Россия  
Дата: 21.06.05 15:15
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Здравствуйте, Socrat, Вы писали:


P>>>
P>>>   for (i=0; a[i]>=0 && i < N; i++);
P>>>


S>>Хм... Лучше сначала i сравнить с N...


P>А почему? Если a[i]<0, то i с N сравниваться уже не будет. Сэкономим пару тактов. Хотя может я не вижу чего. Устал...


Если N — это длина массива, то при i = N вначале вылетит ошибка и до проверки i < N не дойдёт. Вот и всё
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Rojac &mdash; Rsdn Offline JAva Client
Анонсы и обсуждение здесь
Автор: xBlackCat
Дата: 08.02.10
Re[16]: Синтаксический оверхед
От: xBlackCat Россия  
Дата: 21.06.05 15:15
Оценка: :)
Здравствуйте, CrystaX, Вы писали:

CX>Здравствуйте, Сергей Губанов, Вы писали:


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


СГ>>Потому что меньше одной "звездочки" нельзя, а больше одной — уже не надо.


CX>Почему Вы решили, что минимальное количество лексем является признаком правильности синтаксиса? Это откровение свыше или этому есть какие-то реальные обоснования?


Оберон есть ЕДИНСТВЕННЫЙ ЯЗЫК! И Сергей Губанов — пророк его!
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Rojac &mdash; Rsdn Offline JAva Client
Анонсы и обсуждение здесь
Автор: xBlackCat
Дата: 08.02.10
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.