Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - vlad

Страницы: 1 ... 85 86 [87] 88 89 ... 93
1291
Общий раздел / Re:J теперь GPL
« : Март 16, 2011, 07:17:51 pm »
qsort=: (($:@(<#[) ; (=#[) ,&< $:@(>#[)) ({~ ?@#)) ^: (1<#)

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

1292
Общий раздел / Re:Тезис про Oberon, C, CP и ObjC.
« : Март 15, 2011, 08:26:53 pm »
Насколько я помню, без включённых особо доп. проверок ничего. Приводился пример с переполнением в цикле FOR и байтовым счётчиком.

Это "ничего" сильно зависит от железки. Т.е., все тот же undefined behavior. А где пример приводился?

1293
А на мониторах это нифига не работает и реализация не может "правильно учесть растр" - она не может знать в какую сторону ей сместить линию с координатой 0.5 (вверх или вниз), поэтому она рисует две полупрозрачные линии с координатами 0 и 1.
А должна была бы округлить координату 0.5 до целого и нарисовать одну плотную линию в нужном месте с точностью до межпиксельного расстояния. А вот с наклонными линиями тактика всё-же должна быть наверно другой.

Не может она сама округлить. Потому что ожидается, что линии 0.5000001 и 0.4999999 должны быть визуально неотличимы. Так же как 0.9999999 и 1.0000001.

P.S. Да, с наклонными вообще песня...

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

Не, реализация там не причем. Там просто приняты другие "правила" рисования. Они по-своему хороши и с математической точки зрения намного естественнее и правильнее классических "пиксельных" правил. Причем это все хорошо работает, например, для принтеров, потому что масштабы не те. А на мониторах это нифига не работает и реализация не может "правильно учесть растр" - она не может знать в какую сторону ей сместить линию с координатой 0.5 (вверх или вниз), поэтому она рисует две полупрозрачные линии с координатами 0 и 1.

1295
Примерно из той же оперы. Есть такой фрэймворк на маке (вроде и не только) - quartz. Грубо говоря, чтоб рисовать где только можно и как только можно. Там все круто - забудьте о пикселах, вот вам вещественные координаты, антиалиасинг и т.д. Классно. Только при ближайшем рассмотрении оказывается, что для того, чтобы нарисованное выглядело прилично на мониторе - нужно знать, что такое пиксел и формировать координаты соответственно. Например, горизонтальна линия с координатами (0,0) - (100,0) и толщиной 1 - выглядит неприемлимо. А вот с координатами (0,0.5) - (100,0.5) - нормально. А вот линия с толщиной 2 - наоборот. Приличное рисование геометрических примитивов в таком фрэймворке - страшный гемор и требует "особенного" подхода к округлению и преобразованиям между целыми и вещественными. В компилятор такую фигню не засунуть в принципе.

1296
А что Вы скажете по поводу идеи, которую я изложил здесь: http://forum.oberoncore.ru/viewtopic.php?f=29&t=3327&p=61464#p61464 (см. также предыдущий пост)

ИМХО, нельзя просто брать и чего-то отсекать. Вещественные числа - это сложно. Можно принять какие-то "умолчания" и попытаться сделать просто. Но не в языке, с претензией на максимальную прозрачность и отсутствие скрытых граблей. По моему опыту, стыковок между вещественными/целыми бывает не так уж и много и их хочется видеть в явном виде. И либо эти стыковки совсем не парят (показать на экране график функции, так что +/- пиксел не принципиален) и тогда нужно какое-нибудь дубовое (максимально быстрое) округление. Либо это принципиальная штука (разница в пиксел принципиальна, потому что она заметна в случае позиционирования фигур с "почти одинаковыми" координатами) и никакие встроенные в компилятор штуки не спасут - нужен индивидуальный подход.

1297
Кроме того, что я просто не хочу запрещать сравнение вещ. чисел на равенство, я ещё и не представляю как это сделать безболезненно. Ведь вместо банальных x и y  в общем случае могут быть сложные выражения (либо x и y вычисляются перед использованием в логическом выражении), тип результата которых станет известен только на этапе выполнения программы. И что должна делать программа, если этот тип окажется вещественным? Аварийное завершение?

Гхм. Если речь идет о статически-типизированном языке (а-ля оберон), то тип всех выражений известен на этапе компиляции. Независимо от сложности. Так что "оказаться вещественным" он может только на этапе компиляции.

1298
Ну в смысле как? Как обычно: (x + погрешность) > y > (x - погрешность). Причем погрешность выбирается "из самой задачи".
Да, я сейчас так и поступаю (кстати, сравнение как таковое в этом варианте никуда не делось).

Дык. Конечно речь о сравнении на равенство. Больше/меньше проблем не создает.

Но свои "хотелки" я уже озвучил: перенести решение с уровня задачи на уровень языка (чем и рассмешил Info21  :)).

Общего решения пока нет, переносить нечего :) А проблема есть. Для начала неплохо бы ее явно обозначить - например, запретив сравнение на равенство :) А чтоб не так жестко, предоставить какую-нибудь стандартную функцию: eq(x, y, eps).

1299
Но как можно запретить сравнивать вещественные числа? Ведь необходимость в этом обычно исходит из самой задачи.

Ну в смысле как? Как обычно: (x + погрешность) > y > (x - погрешность). Причем погрешность выбирается "из самой задачи".

1300
оригинальная ветка: http://forum.oberoncore.ru/viewtopic.php?p=61461#p61461

Цитата: igor
Суть проблемы, вроде как, состоит в том, что три дискретных числовых оси не совпадают. Эти дискретные числовые оси соответствуют десятичному представлению и двум двоичным (SHORTREAL и REAL).

Суть проблемы не только в различии представления, но и вообще в потере точности при вычислениях. Те же самые грабли вы получите с одним и тем же вещественным типом, сравнив на равенство результаты 2/3 и 4/6. Так что идея запретить в языке сравнение вещественных типов не такая уж и плохая, учитывая что многие руководства по граблям так и пишут "не сравнивайте на равенство вещественные типы".

1301
Общий раздел / Re:Тезис про Oberon, C, CP и ObjC.
« : Март 13, 2011, 08:48:54 pm »
Что должно произойти при выходе индекса за пределы массива  - можно посмотреть в исходном коде модуля обеспечения времени исполнения, Kernel (для КП):

Вы там увидите только то, в чем именно заключается неописанный в языке undefuned behavior. Все описанные проблемы (vendor lock, переносимость) - остаются в силе. Да, эти проблемы могут быть неактуальными для вас (или казаться неактуальными).

1302
Общий раздел / Re:Идеальный ЯП
« : Март 11, 2011, 03:16:15 pm »
Ключевые слова в верхнем регистре (убежден, что это следствие возрастной дальнозоркости Вирта) народу не нравятся. А кто как видит синтаксис идеального ЯП? На что он должен быть похож, уж наверно не на С. На Аду?

На питон. Однозначно :) Ну допилить, может, немного... Тут еще про хаскель говорили, но по мне - он ближе к птичьему :) Хотя привычка, конечно, сильно влияет. А вот питоновский синтаксис - и без привычки нормально смотрится :)

P.S. Кстати, по поводу капса в обероне. Тут вот от Алексея пробегала интересная ссылка: http://www.ethistory.ethz.ch/rueckblicke/departemente/dinfk/bilder/1981_lilith-windows_EN.jpg?hires

1303
[quote author=vlad link=topic=26
В экосистеме КП/ББ не принято иметь несколько версий одного модуля. Т.е. традиционная для модульных языков вариантивность на уровне "1 спецификация модуля - несколько реализаций" (вполне неплохая по-своему) ушла в прошлое, уступив место объектно-ориентированным разъёмам, когда  функцию интерфейса выполняет один модуль, и в нём же объявлен тип разъёма, а функцию реализации выполняют другие модули, с различными именами, динамически загружаемые и втыкающие свои разъёмы. Это более сильный и общий подход - динамическое подключение реализаций, много реализаций одновременно, не нужна перекомпиляция и т.п. Т.е. как бы мета-подход, который снимает с уровня самих модулей некоторую старую смысловую нагрузку. Отсюда же утрата прежнего значения отдельной спецификации модуля.

Не, не улавливаю. Чем это принципиально отличается от классических ООП интерфейсов? Сколько угодно модулей могут реализовать заданный интерфейс и т.д. по списку.

1304
4. явное наличие в языке интерфейсов (спецификаций) модулей. чтобы можно было явно сказать, что вот этот модуль удовлетворяет вот такой-то спецификации. Сейчас по сути типизация модулей утиная.

А зачем?

1305
6. Модуль = процесс, процедура модуля - тред.

Это как?

Страницы: 1 ... 85 86 [87] 88 89 ... 93