Re[11]: Народ упорно не врубается
От: Mamut Швеция http://dmitriid.com
Дата: 28.06.05 10:52
Оценка:
M>>А в Обероне единственный плюс от LOOP'a — это возможность выйти из нескольких вложенный циклов сразу.

P>...который обернется нехилым минусом, если промахнуться с количеством циклов, из которых нужно выйти сразу.


Для этого уже достаточно двух вложенных LOOP'ов с вложенными циклами. Мне это сразу напомнило разбор XML DOM На Обероне можно будет повеситься его разбирать.


dmitriid.comGitHubLinkedIn
Re[10]: Идеологически правильный мегарулез
От: Кодт Россия  
Дата: 28.06.05 10:55
Оценка:
Здравствуйте, Mr. None, Вы писали:

MN>Человек, как истинный физик теоретик, просто попытался разделить все способы выхода из цикла на две разные группы по признаку удалённости точки завершения перехода от точки завершения цикла. Вот только названия этим группам дал не совсем удачное: в его понимании завершается — это когда переход из цикла осуществляется в точку, следующую сразу за телом цикла, прерывается — это когда переход из цикла осуществляется в точку, находящуюся в любой позиции за точкой, следующей сразу за телом цикла (прошу не принимать эту классификацию как серьёздный научный тезис).




MN>Вот только смысла в таком разделении я не вижу, потому что:

MN>1) циклу глубоко фиолетово, "завершился" он или "прервался" (по сути — это одно и то же) — главное, что был покинут локальный контекст и вызваны деструкторы;
MN>2) необходимо тогда как минимум ввести ещё один термин обозначающий ситуации, когда цикл снова начался с начала или был совершён переход на точку находящуюся далеко перед циклом;
MN>3) во вторую группу попали такие методы как goto далеко за пределы и выброс исключения, хотя эти 2 метода "прерывания" цикла не идентичны — goto нарушает естественный поток управления за счёт того, что может выполнить переход в середину включающего цикл контекста, перескочив, например, вызов конструкторов (например, для динамически создаваемых объектов), что в этом случае приключиться, предсказать не берусь, в отличие от него throw ведёт себя вполне естественно и такой проблемы решена; поэтому объединение этих методов в один класс как минимум не допустимо..

Здоровый компилятор не позволит выполнить такой манёвр, как goto в середину кода, которое игнорирует обязательные действия.
В Си нельзя делать goto в другую функцию (блюдётся кадр стека). В С++ — нельзя перепрыгнуть через конструирование.

MN>4) а как классифицировать завершения цикла в таком случае, как прерывание или как завершение:


Один преподаватель русского языка объяснял разницу между дополнением и определением.
Если "аттачмент" является неотъемлимым атрибутом предмета — это определение. Иначе — дополнение.
— "Блин с икрой": икра — дополнение (её намазали на уже готовый блин)
— "Пирог с капустой": "с капустой" — определение (внутрь положена)
Естественно, нашёлся студент, который спросил: "А если блин икрой намазать и в трубочку свернуть?"

(кажется, Лев Успенский, "Слово о словах")
Перекуём баги на фичи!
Re[12]: Идеологически правильный мегарулез
От: Cyberax Марс  
Дата: 28.06.05 11:11
Оценка: :))
Кодт wrote:

> Д>взялся бы ты лучше за функциональные языки, честное слово

> Ужасужасужас. Как сейчас представляю:
> "Эрланг супротив Оберона — сынок, в нём нет статической типизации.

Есть еще MLные языки

> Лисп — ваще сынок, там по скобкам оверхед.


Смеялся 5 минут Как представлю подсчет скобочек в Лиспе и Обероне по
"звездному" принципу...

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[11]: Народ упорно не врубается
От: Privalov  
Дата: 28.06.05 11:15
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Что нельзя узнать?


Причину завершения цикла.
Здесь
Автор: Сергей Губанов
Дата: 28.06.05
в самом конце.
Re[9]: Синтаксический оверхед
От: ZayatsZ Россия  
Дата: 28.06.05 11:20
Оценка:
Здравствуйте, Дарней, Вы писали:


Д>А это идея! Надо просто выпустить клавиатуры а-ля Спектрум, на которых будут нанесены все ключевые слова оберона — IF, THEN, END и т.д. И клавишу Enter спрятать подальше, чтобы поощрить написание кода в "однострочном" стиле.

История развивается по спирали
... << RSDN@Home 1.1.4 beta 7 rev. 501>>
Re[10]: Народ упорно не врубается
От: Privalov  
Дата: 28.06.05 11:20
Оценка:
Здравствуйте, Mr. None, Вы писали:


MN>Пример (поиск символа в строке):

MN>
MN>int i = 0;
MN>while(str[i] != ch || str[i] != 0) i++;
MN>if(str[i] == 0)
MN>    // символ не найден
MN>else
MN>    // символ найден
MN>

MN>Или вы утверждаете, что в обероне вы обойдётесь без последней проверки? Извините, в силу своего не очень маленького опыта в программировании не поверю в это!

Здесь
Автор: Privalov
Дата: 28.06.05
я привожу аналогичный пример. Думаете, помогло?
Re[11]: Идеологически правильный мегарулез
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 28.06.05 11:26
Оценка:
Здравствуйте, Кодт, Вы писали:

К>В Си нельзя делать goto в другую функцию (блюдётся кадр стека).

Ну это ясно божий пень!

К>Здоровый компилятор не позволит выполнить такой манёвр, как goto в середину кода, которое игнорирует обязательные действия.

К>В С++ — нельзя перепрыгнуть через конструирование.
Возможно, что VC 7.1 (VS.NET 2003) не самый здоровый компилятор, но такой код он пропускает не икнув:
class TestClass
{
public:
    TestClass(){}
};

int _tmain(int argc, _TCHAR* argv[])
{
    goto label;
    TestClass *ptr = new TestClass();
label:
    return 0;
}

При этом в точке, на которую выполняется переход ptr содержит всякий мусор, по которому не возможно определить корректный указатель или нет.
Он реагирует только на случай (и то предупреждением, а не ошибкой), когда класс содержит конструктор (любой), а goto перепрыгивает через локальное (не динамическое) объявление переменной.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[11]: Народ упорно не врубается
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 28.06.05 11:27
Оценка: :))
Здравствуйте, Privalov, Вы писали:

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



MN>>Пример (поиск символа в строке):

MN>>
MN>>int i = 0;
MN>>while(str[i] != ch || str[i] != 0) i++;
MN>>if(str[i] == 0)
MN>>    // символ не найден
MN>>else
MN>>    // символ найден
MN>>

MN>>Или вы утверждаете, что в обероне вы обойдётесь без последней проверки? Извините, в силу своего не очень маленького опыта в программировании не поверю в это!

P>Здесь
Автор: Privalov
Дата: 28.06.05
я привожу аналогичный пример. Думаете, помогло?


Даже смотреть не буду (трафик не резиновый) — уверен, что не помогло !
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[13]: Идеологически правильный мегарулез
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 28.06.05 11:32
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> Лисп — ваще сынок, там по скобкам оверхед.


C>Смеялся 5 минут Как представлю подсчет скобочек в Лиспе и Обероне по

C>"звездному" принципу...

Скорее "звезданутому"...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[12]: Идеологически правильный мегарулез
От: Трурль  
Дата: 28.06.05 11:49
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Джей и Кей — пара братьев-уродцев, совершенно нечитаемый код.


Зато оверхед минимальный.
a:10#0

int a[10];for(int i=0;i<10;i++)a[i]=0;

По символам и лексемам у C оверхед> 500%

Применяем звездный метод
a*10*0

* a *10* * * * * * * * * * * 10* * * * a* * * *0*
Re[12]: Народ упорно не врубается
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.06.05 12:29
Оценка:
Здравствуйте, Privalov, Вы писали:

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


СГ>>Что нельзя узнать?


P>Причину завершения цикла.

P>Здесь
Автор: Сергей Губанов
Дата: 28.06.05
в самом конце.


Там два разных условия завершения. Какое из них сработает можно узнать лишь динамически во время исполнения программы. На момент написания можно лишь утверждать, что будет истинным
выражение "(i >= LEN(a)) OR (a[i] < 0)". Кстати, тот цикл как раз и превращается тождественным преобразованием в цикл WHILE:

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

после завершения которого как раз является истинным указанное выше выражение.
Re[10]: Народ упорно не врубается
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.06.05 12:36
Оценка:
Здравствуйте, Mr. None, Вы писали:

MN>Пример (поиск символа в строке):

MN>
MN>int i = 0;
MN>while(str[i] != ch || str[i] != 0) i++;
MN>if(str[i] == 0)
MN>    // символ не найден
MN>else
MN>    // символ найден
MN>

MN>Или вы утверждаете, что в обероне вы обойдётесь без последней проверки? Извините, в силу своего не очень маленького опыта в программировании не поверю в это!

Вы путаете. Цикл WHILE гарантирует лишь то, что выражение "str[i] != ch || str[i] != 0" будет ложным после его завершения (если он завершиться конечно когда-нибудь). Больше он ничего не гарантирует. То что это выражение само в свою очередь состоит из нескольких — совершенно другой вопрос.
Re[13]: Идеологически правильный мегарулез
От: Amidlokos Россия  
Дата: 28.06.05 12:44
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Зато оверхед минимальный.

Т>
a:10#0

Т>
int a[10];for(int i=0;i<10;i++)a[i]=0;

Т>По символам и лексемам у C оверхед> 500%

Т>Применяем звездный метод

Т>
a*10*0

Т>
* a *10* * * * * * * * * * * 10* * * * a* * * *0*


Ещё один занят подтасовкой фактов, но уже не так талантливо. Что, i, 0 и 10 посчитать забыли? И каждую скобку вынесли лексемой? Даже если так, звёздочек всё равно многовато.

В общем, > /dev/null
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[17]: Определение структурного программирования
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.06.05 12:44
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Потому как не читатель, а писатель...


Да. Вы меня раскусили.
Re[14]: Идеологически правильный мегарулез
От: Amidlokos Россия  
Дата: 28.06.05 12:48
Оценка:
Здравствуйте, Amidlokos, Вы писали:

Т>>
int a[10];for(int i=0;i<10;i++)a[i]=0;


Т>>Применяем звездный метод

Т>>
a*10*0

Т>>
* a *10* * * * * * * * * * * 10* * * * a* * * *0*


A>Ещё один занят подтасовкой фактов, но уже не так талантливо. Что, i, 0 и 10 посчитать забыли? И каждую скобку вынесли лексемой? Даже если так, звёздочек всё равно многовато.


Насчёт 10 поправка — всё же есть, а в целом:

* a * 10 * * * i * 0 * i * 10 * i * * a * i * * 0 *
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[15]: Синтаксический оверхед - Новая порция
От: jazzer Россия Skype: enerjazzer
Дата: 28.06.05 12:50
Оценка: :))
Здравствуйте, faulx, Вы писали:

F>Какие есть _внутренние_ доказательства того, что green/explode объективно хуже new/delete?


Никаких.
Более того, green/explode мне уже начинает нравиться ;)

P.S. Отсюда мораль: хоть горшком назови :)))
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: Идеологически правильный мегарулез
От: Socrat Россия  
Дата: 28.06.05 12:54
Оценка:
Здравствуйте, Пацак, Вы писали:

П>Не-е-е-е-е-е-е, стоп!!! ИМХО нас морочат.

П>Я чот не пойму. Не так давно СГ убеждал всех, что EXIT из while вывести не может и что компилитор не даст соорудить такую инструкцию и вот — на тебе! Этак я тогда из любого while могу то же самое сделать:

П>
П>LOOP
П>    WHILE (1=1) DO 
П>         IF ... THEN EXIT END;
П>    END
П>    EXIT;
П>END
П>


П>2СГ: так пропустит компилятор такую конструкцию или не пропустит? Позволяет писать EXIT из WHILE или не позволяет?


"КРЯК!" — сказала пила.
"То-то же!!!" — сказали суровые сибирские лесорубы!

Re[12]: Идеологически правильный мегарулез
От: Amidlokos Россия  
Дата: 28.06.05 13:02
Оценка:
Здравствуйте, Mr. None, Вы писали:

[Поскипано]

MN>При этом в точке, на которую выполняется переход ptr содержит всякий мусор, по которому не возможно определить корректный указатель или нет.

MN>Он реагирует только на случай (и то предупреждением, а не ошибкой), когда класс содержит конструктор (любой), а goto перепрыгивает через локальное (не динамическое) объявление переменной.

Такое впечатление, что никто не понимает основных принципов C/C++, но всем надо покритиковать.

ptr — это именно указатель. На что он там указывает — твои личные дела. Компилятор не должен отслеживать ничего в этом случае. От конструктора это никак не зависит.

И "warning на стековый объект с непустым конструктором" — тоже предельно ясно и понятно. Потому что:

1. Раз объект стековый (а не указатель на какую-то память где-то в куче), то всё же компилятор заботится о его создании. Вот он и ругается.
2. В случае с пустым конструктором достаточно (а может быть, слишком) умный компилятор определяет, что разницы между вызовом конструктора и отсутствием такого вызова не будет никакой. Вот и не ругается.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[14]: Идеологически правильный мегарулез
От: Трурль  
Дата: 28.06.05 13:05
Оценка:
Здравствуйте, Amidlokos, Вы писали:

A>Ещё один занят подтасовкой фактов, но уже не так талантливо. Что, i, 0 и 10 посчитать забыли?

i,0 и т.п.- чистый оверхед.
A>И каждую скобку вынесли лексемой?
А скобки разве не лексемы?
A>Даже если так, звёздочек всё равно многовато.
Нам уже разъяснили что пробела тоже надо учитывать.
Re[13]: Идеологически правильный мегарулез
От: Amidlokos Россия  
Дата: 28.06.05 13:08
Оценка:
P.S. Mr. None, только на мою фразу про "никто не понимает" обижаться не нужно Сгоряча сказалось.

Ведь правда же — пример, в котором указатель не отличают от стекового объекта... Нехорошо это даже для флейма
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.