OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 22 Июнь, 2025 16:37

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 321 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 17  След.
Автор Сообщение
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Понедельник, 04 Август, 2008 19:38 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Vlad писал(а):
Офигенное достижение Обработать SEH может только оберон Однако DEP, который используется во вредоносных целях, к SEH никакого отношениея не имеет. В случае классического DEP будет выполнен "корректный" код из массива, и оберон от этого никак не защитит.
Послушайте, я привёл в пример возможность DEP. А вы вызвалсь показать, что это такое(сам я только теоретически представляю себе сабж). А теперь вы показали оказывается не то, но по прежнему оберон виноват. Странно это.
Vlad писал(а):
Ну вот, опять метафоры... А без метафор и аналогий никак? Чтобы было очевидно как 2 * 2?
Про базовые типы я тут уже наговорил столько всякого, что трудно описать. Разве наличие хотя бы минимального предсказания поведения системы - это минус? Я знаю, что вот под этим указателем точно вот этот тип данных. Это плохо? Я знаю, что есть минимальный описательный базис, который останется строго таким, каким он описан в документации. Это плохо? Я знаю, что таким макаром можно описать всё что угодно, если над этим подумать. Это плохо?
Vlad писал(а):
Дык, в массиве может быть любая фигня, вот и имеем undefined behavior как в старом добром C/C++
Не понял, извините.
Vlad писал(а):
Да, это возможность очень дорога. Потому что она повышает читабельность и может защитить от неправильного использования. Пока вы будете смотреть интерфейс модуля (пусть даже в идеале у вас есть подсказка в виде тултипа), я еще 10 таких вызовов просмотрю и пойму что отуда и куда.
Метод тыка против вдумчивого(ну, более-менее) анализа. Кстати в ББ можно легко передавать указатели как результат функции, причём безопасно(насколько я знаю). Это тоже решение для устранения вашего бага(в ББ).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Понедельник, 04 Август, 2008 20:11 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Vlad писал(а):
Иван Кузьмицкий писал(а):
Так это же нарушение условия частичной инициализации, если я правильно понял задачу.


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

Могу на эту тему привести другой классический пример. Функция возвращает контейнер через параметр. Должна ли она его чистить перед заполнением? Если не должна, то имеем баги с мусором в контейнере, потому что вызывающий код забыл почистить его. Если должна, то функция начинает делать лишнюю работу, не имеющую к ней отношения. Но а любом случе в месте вызова все равно нифига непонятно, что будет сделано - здесь уже интерфейсом не обойдешься, придется лезть в код (или еще хуже - документацию) и смотреть. Уйма времени.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Понедельник, 04 Август, 2008 20:51 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Пётр Кушнир писал(а):
Послушайте, я привёл в пример возможность DEP. А вы вызвалсь показать, что это такое(сам я только теоретически представляю себе сабж). А теперь вы показали оказывается не то, но по прежнему оберон виноват. Странно это.


Я показал, что DEP возможен и на обероне, и следовательно "фокусы" C++ отношения к DEP не имеют.

Пётр Кушнир писал(а):
Про базовые типы я тут уже наговорил столько всякого, что трудно описать.


Ага. Наговорили много чего. Все теми же аналогиями и метафорами. Покажите технически и практически - чем плох i.ToString(). Теория мне интересна только если она находит отражение в практике.

Цитата:
Пётр Кушнир писал(а):
Да, это возможность очень дорога. Потому что она повышает читабельность и может защитить от неправильного использования. Пока вы будете смотреть интерфейс модуля (пусть даже в идеале у вас есть подсказка в виде тултипа), я еще 10 таких вызовов просмотрю и пойму что отуда и куда.
Метод тыка против вдумчивого(ну, более-менее) анализа.


Не подменяйте понятия. Я сказал именно то, что сказал. Необходимость скакать по модулями без необходимости никак не признак "вдумчивости", а признак хренового кода.

Пётр Кушнир писал(а):
Кстати в ББ можно легко передавать указатели как результат функции, причём безопасно(насколько я знаю). Это тоже решение для устранения вашего бага(в ББ).


Это ставит крест на использовании стэковых объектов (предмет гордости оберонщиков перед всякими жабами). А ошибки куда возвращать? Эксепшинов-то нету...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Понедельник, 04 Август, 2008 21:02 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Иван Кузьмицкий писал(а):
Ну так ведь вызов функции, возвращающей структуру, не говорит о том, что поля этой структуры будут правильно инициализированы. Те же яйца, только сбоку.


Да, он не гарантирует правильность. Но он гарантирует большую наглядность, потому что написать откровенную лажу уже труднее:
Код:
info.filed = 1;
info = f();


А если еще совместить инициализацию и объявление (что опять таки невозможно в обероне):
Код:
info_t info = f();


то даже лажу написать не получится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Понедельник, 04 Август, 2008 21:24 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Vlad писал(а):
Я показал, что DEP возможен и на обероне, и следовательно "фокусы" C++ отношения к DEP не имеют.
Дак вы же не DEP показали, сами же сказали.
Vlad писал(а):
Все теми же аналогиями и метафорами
Не перегибайте, я объяснил и абстракции и примеры. Не один раз.
Vlad писал(а):
Покажите технически и практически - чем плох i.ToString()
Проведите исследовательскую работу. Определите статистические показатели. Только вот показатели чего? Я не знаю. Вы - тоже. Никто пока не сказал. Мерялки нет, как тут уже выяснили. Я вам сейчас могу сказать только то, что метод целого числа - это неверное отражение реальности, и неверная реализация математического понятия числа. конечно, объект i похож на целое число, его можно складывать, умножать и прочее. Но это лишь результат перегрузки операторов. Итог: вы мыслите не реальным понятием "число", а мнимым "uint". Хотя может вам всё равно.
Vlad писал(а):
Не подменяйте понятия. Я сказал именно то, что сказал. Необходимость скакать по модулями без необходимости никак не признак "вдумчивости", а признак хренового кода.
Я и не подменяю. Вы ищете аналогии, пытаетесь найти похожие вызовы. Надеюсь, вам не надо рассказывать про опасность аналогий. Хреновость кода не измерить, это выяснено было ранее. Если я увидел процедуру первый раз, то без подглядываний в интерфейс или документацию я не могу даже предугадать, что эта процедура из себя представляет(если вы можете, то вы - бог). Поэтому я так не делаю. Я вдумчиво гляжу в интерфейс и доку.
Vlad писал(а):
Это ставит крест на использовании стэковых объектов (предмет гордости оберонщиков перед всякими жабами). А ошибки куда возвращать? Эксепшинов-то нету...
Предмет гордости? Ммм. А где такое написано? А как же ASSERT и HALT? Чем не эксепшены? Суть одна. А что мешает сделать функцию с параметрами? Типа:
Код:
y:=f(x,res);
где в res будет записан код ошибки.
Vlad писал(а):
Но он гарантирует большую наглядность, потому что написать откровенную лажу уже труднее
Это субъективно.
Vlad писал(а):
А если еще совместить инициализацию и объявление (что опять таки невозможно в обероне)
А ещё можно в гамаке стоя. Это синтаксический сахар. Без него можно обойтись.
Vlad писал(а):
то даже лажу написать не получится.
Вопрос квалификации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Понедельник, 04 Август, 2008 21:49 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Пётр Кушнир писал(а):
Дак вы же не DEP показали, сами же сказали.


Я показал возможность DEP. Чтобы получить рабочий пример (исполнение вредоносного кода) вам придется заполнить массив "правильными" значениями. Если вы этого не сделаете, то получите банальный SEH (и в C/C++ тоже). Правильные значения можно поискать по хакерским форумам (я никогда неинтересовался).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Понедельник, 04 Август, 2008 22:57 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Пётр Кушнир писал(а):
Не перегибайте, я объяснил и абстракции и примеры. Не один раз.


Какие примеры? Примеры кода? Абстрактные примеры, основанные на аналогиях - ничего не показывают, кроме ораторских способностей автора.

Vlad писал(а):
Я вам сейчас могу сказать только то, что метод целого числа - это неверное отражение реальности, и неверная реализация математического понятия числа.


Почему??? В реальности вообще нет "методов". И что?

Пётр Кушнир писал(а):
Если я увидел процедуру первый раз, то без подглядываний в интерфейс или документацию я не могу даже предугадать, что эта процедура из себя представляет(если вы можете, то вы - бог).


Все предугадать - не могу. Но хочу иметь возможность предугадывать по максимуму. Об чем и речь. Для приведенных мной примеров оберон такой возможности не предоставляет. В отличие от других языков. Можете оправдывать его как угодно (простота языка, простота компилятора и т.д.), но это объективный недостаток.

Пётр Кушнир писал(а):
Цитата:
Это ставит крест на использовании стэковых объектов (предмет гордости оберонщиков перед всякими жабами). А ошибки куда возвращать? Эксепшинов-то нету...
Предмет гордости? Ммм. А где такое написано?


Ну почитайте критику жабы оберонщиками...

Пётр Кушнир писал(а):
А как же ASSERT и HALT? Чем не эксепшены? Суть одна.


Суть одна. Только обработать их язык не позволяет. Поэтому для обработки ошибок их использовать нельзя.

Пётр Кушнир писал(а):
А что мешает сделать функцию с параметрами? Типа:
Код:
y:=f(x,res);
где в res будет записан код ошибки.


А что будет в y? Мусор?

Пётр Кушнир писал(а):
Vlad писал(а):
Но он гарантирует большую наглядность, потому что написать откровенную лажу уже труднее
Это субъективно.


Вы лукавите. Или не хотите видеть очевидного в силу своей веры в оберон.

Пётр Кушнир писал(а):
Vlad писал(а):
А если еще совместить инициализацию и объявление (что опять таки невозможно в обероне)
А ещё можно в гамаке стоя.


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

Пётр Кушнир писал(а):
Это синтаксический сахар. Без него можно обойтись.


Можно. Но ради чего?

Пётр Кушнир писал(а):
Vlad писал(а):
то даже лажу написать не получится.
Вопрос квалификации.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 04:16 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Vlad писал(а):
Высокая квалификация - это понятный код.


Особой понятливостью выделяется код устоявшихся библиотек на С++.
80% препроцессора, помноженное на шаблонное представление -
просто верх понятного кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 06:42 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Штирлиц писал(а):
Особой понятливостью выделяется код устоявшихся библиотек на С++.


1. Плюсовый код не самый приятный для восприятия. Чисто синтаксически. Особенно в части шаблонов. Тут трудно поспорить. Хотя по мне - обероновский еще хуже :) Но это все не так принципиально. Я говорил не про синтаксис сам по себе, а про выразительность (ну нельзя на обероне выразить то, что можно на шаблонах в C++).
2. Стандартные библиотеки - это отдельная песня. Они должны работать на всем и везде. И при этом работать максимально эффективно. Покажите мне подобную библиотеку для оберона, тогда сравним :) Вот тут товарищ XML-парсер портировал с одного оберона на другой. У него получилась отдельная реализация. Я считаю, что лучше с препроцессором, но одна.
3. К счастью стандартные библиотеки хорошо документированы и их интерфейс очень редко меняется. Так что реально смотреть в код приходится очень редко.

Штирлиц писал(а):
80% препроцессора, помноженное на шаблонное представление -
просто верх понятного кода.


У нас всего две платформы и три компилятора. Препроцессор для разделения кода по платформам/компиляторам используется крайне редко (ну может одна директива на сотню файлов). Разделение кода по платформам идет по всем правилом ООП - через интерфейсы. Так что препроцессор - удел библиотек. Шаблонный код тоже тяготеет к библиотечному использованию (далеко не 80%).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 07:24 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Vlad писал(а):
Пётр Кушнир писал(а):
Ну, это получается процедура с OUT-параметром, разве нет? НЕ функция.


Объясняю На пальцах. Вот я читаю:
DoSomething(x1, x2, x3);

Где у этой процедуры OUT-параметр?

Теперь сравните с:
x2 = DoSomething(x1, x3);

Какой код будет легче понять?

Кстати, в том же C# такая процедура будет определена примерно так:
Код:
void DoSomething(sometype x, out sometype y, sometype z)
{
...
}
А вызываться будет соответственно так:
Код:
DoSomething(x1, out x2, x3);
Сразу видно, что эта процедура что-то пишет в параметр x2.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 08:28 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Vlad писал(а):
Примеры кода? Абстрактные примеры, основанные на аналогиях - ничего не показывают, кроме ораторских способностей автора.
Не, что вы, какой код. Код тут вообще не причём. Я пытался наглядно показать схему использования базовых типов и преобразователей(тип в тип). Это ваше замечание можно списать на поверхностное прочтение...
Vlad писал(а):
Почему??? В реальности вообще нет "методов". И что?
Я ведь не про ООП говорил. Я говорил про целое число. У которого есть довольно устоявшаяся математическая модель, которую вбивают в ваш мозг 16 лет к ряду.
Vlad писал(а):
Все предугадать - не могу. Но хочу иметь возможность предугадывать по максимуму.
Я вообще не хочу гадать. Поэтому юзаю доку и браузер интерфейсов. И это не только в Обероне, во всех других ЯП(fpc, c++) я делал точно так же.
Vlad писал(а):
Суть одна. Только обработать их язык не позволяет. Поэтому для обработки ошибок их использовать нельзя.
Их можно использовать для выявления, на самой ранней стадии разработки. Что лучше, самому наткнуться на ассерт, или сотню клиентов заставить "Отправить отчёт какой-то там матери"? Оборонительный стиль, кажется так.
Vlad писал(а):
А что будет в y? Мусор?
Значение. Значение будет. Типа Y. Если у функции f() корявая реализация и не все поля инитятся - это программист дурак, а не язык плохой.
Vlad писал(а):
Вы лукавите. Или не хотите видеть очевидного в силу своей веры в оберон.
Да субъективно это. Субъективно. Ваш уровень профессионализма позволит вам "предугадать" только за счёт тех шишек которые вы набили ранее, за счёт везения, и удачных аналогий, не более.
Vlad писал(а):
Можно. Но ради чего?
Решайте сами. Я плохо вижу ОГРОМНЫЕ преимущества совмещения объявления и инициализации. Ну да, типа удобно, типа
Geniepro писал(а):
Сразу видно, что эта процедура что-то пишет в параметр x2.
Как и в Оберонах. СРАЗУ видно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 08:38 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
1. Индусы (условные) пишут индусский код.
2. IBM выпускает автоматический "баго-фиксер".
3. Здесь приведён пример индусского кода, использующего "тонкости" языка для ухудшения понятливости программы и повышения багливости.
4. Высказывается мысль, что при отсутствии "тонкостей" в ЯП, код станет менее багливым (понятно, при прочих равных условиях).
5. На это выдаётся возражение, что при наличии замечательной квалификации, "тонкости" не страшны, а даже нужны, т.к. повышают читабельность.

Корпорация IBM путём выпуска RSA не ищет способы поднять квалификацию, что нужно Vlad'у, а борется с конкретными багами. Парсеров XML в природе далеко не один штук, как хочется Vlad'у. Реальные программы глючные и непонятные, несмотря на наличие высококвалифицированных кадров где-то поблизости.

Как обычно, реальность немного не такая, как её представляет себе Vlad :)


Последний раз редактировалось Иван Кузьмицкий Вторник, 05 Август, 2008 08:53, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 08:38 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Vlad писал(а):
Хотя по мне - обероновский еще хуже :)



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

По мне критерий хорошего кода - это когда почти сразу можно понять как оно все работает. (Практически) Без комментариев и документации.


P.S. Аллергию на С-подобный синтаксис я в в свое время получил от MFC. Вот где "индусы" прошлись.
OWL от Borland была гораздо лучше устроена. А на работе на java приходится писать. :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 09:42 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Пётр Кушнир писал(а):
Geniepro писал(а):
Сразу видно, что эта процедура что-то пишет в параметр x2.
Как и в Оберонах. СРАЗУ видно.

А не могли бы Вы продемонстрировать? На Оберонах... Желательно разных... :о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 09:53 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Берём самый близкий, БлэкБокс(КП соответсвтвенно).
Цитата:
Здесь были примры описания процедур с VAR параметрами
А просьба была написать пример вызова. Не углядел. Да, решение.
В Обероне и Active Oberon - есть только VAR параметры. Суть та же. Доку смотрите сами.


Последний раз редактировалось Пётр Кушнир Вторник, 05 Август, 2008 10:58, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 10:11 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Это не то, о чём говорил Geniepro. При объявлении процедуры всё понятно, но при использовании нужно посмотреть интерфейс, потому что можно не догадаться, в какую из трёх переменных ведётся запись, и вообще непонятно, там в одну переменную пишется, в две или вообще в три. Дублирование out в объявлении и использовании процедуры, кончечно улучшает читаемость, но это, всё же, дублирование, что само по себе утомительно. Но приверженцы Си-подобного синтаксиса вообще должны впадать от этого в кому: почти каждая конструкция этого языка - пример сверхминимализма. А здесь не просто расточительство - здесь дублирование.

Но с out читается, всё же, лучше, чем без out.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 10:44 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Valery Solovey писал(а):
при использовании нужно посмотреть интерфейс, потому что можно не догадаться, в какую из трёх переменных ведётся запись, и вообще непонятно, там в одну переменную пишется, в две или вообще в три.
Предположения. Это стиль программирования такой?
Valery Solovey писал(а):
Но с out читается, всё же, лучше, чем без out.
Это не для "лучше читается". Это для определения логики поведения процедуры.
Пётр Кушнир писал(а):
Берём самый близкий, БлэкБокс(КП соответсвтвенно)<...> В Обероне и Active Oberon - есть только VAR параметры. Суть та же. Доку смотрите сами.
Идеальный программист использовав VAR(OUT)-определённый параметр предполагает его использование в качестве переменной. Поэтому другой программист, должен преполагать то же. Частичная инициализация, или полная, или ещё что-то, неважно. VAR определяет возможность изменения, это надо учитывать. А использование функций, вместо замены процедур с VAR-параметрами, мягко говоря не даёт тех же возможностей. Неравнозначная замена, ущербное решение проблемы человеческого фактора на уровне языка.


Последний раз редактировалось Пётр Кушнир Вторник, 05 Август, 2008 10:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 10:47 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Пётр Кушнир писал(а):
Берём самый близкий, БлэкБокс(КП соответсвтвенно).
Вот.
...
В Обероне и Active Oberon - есть только VAR параметры. Суть та же. Доку смотрите сами.

Ну и что такое Вы тут процитировали? :lol: Где вызов процедуры в стиле Modify (VAR n); или ReadInt (OUT x); ? Ась? :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 10:55 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
О, сорри.
P.S. Хотя мне кажется, что это ещё одно решение человеческой ошибки на уровне языка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обратная сторона мейнстрима...
СообщениеДобавлено: Вторник, 05 Август, 2008 11:13 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Geniepro писал(а):
Ну и что такое Вы тут процитировали? :lol: Где вызов процедуры в стиле Modify (VAR n); или ReadInt (OUT x); ? Ась? :lol:
Да напишите-ж им quicksort алгоритм на Хаскелле и шоб работал, а то выглядит не иначе как обфускация :D
http://www.haskell.org/haskellwiki/Intr ... ranslation
Цитата:
Unfortunately none of the above "real" quicksorts seems to compile as given, when copy/pasted into ghci. Can someone fix? The "parallel" quicksort gave error "unknown package concurrent" when I ran make in quicksort/gransim.

Has anyone got a functioning "real" quicksort that works on copy/paste?

The program below is working very very slowly. It's probably slowsort... :o)
Код:
import Control.Monad (when)
import Control.Monad.ST
import Data.Array.ST
import Data.Array.IArray
import Data.Array.MArray
 
qsort :: (IArray a e, Ix i, Enum i, Ord e) => a i e -> a i e
qsort arr = processArray quickSort arr
 
processArray :: (IArray a e, IArray b e, Ix i)
             => (forall s. (STArray s) i e -> ST s ()) -> a i e -> b i e
processArray f (arr :: a i e) = runST $ do
    arr' <- thaw arr :: ST s (STArray s i e)
    f arr'
    unsafeFreeze arr'
 
quickSort :: (MArray a e m, Ix i, Enum i, Ord e) => a i e -> m ()
quickSort arr = qsort' =<< getBounds arr
  where
    qsort' (lo, hi) | lo >= hi  = return ()
                    | otherwise = do
        p <- readArray arr hi
        l <- mainLoop p lo hi
        swap l hi
        qsort' (lo, pred l)
        qsort' (succ l, hi)
 
    mainLoop p l h  | l >= h    = return l
                    | otherwise = do
        l' <- doTil (\l' b -> l' < h  && b <= p) succ l
        h' <- doTil (\h' b -> h' > l' && b >= p) pred h
        when (l' < h') $ do
            swap l' h'
        mainLoop p l' h'
 
    doTil p op ix = do
        b <- readArray arr ix
        if p ix b then doTil p op (op ix) else return ix
 
    swap xi yi = do
        x <- readArray arr xi
        readArray arr yi >>= writeArray arr xi
        writeArray arr yi x
На Обероне так точно написать нельзя!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 321 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 17  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB