Здравствуйте, Шахтер, Вы писали:
Ш>Законы механики могут быть сформулированы в разных формах. Как уравнения движения, как уравнения Лагранжа, в форме Гамильтона...
Все три формулировки механики — Ньютонова, Лагранжева и Гамильтонова — по своему важны, и каждая из них может быть предпочтительнее других в разных задачах. Вряд ли, пойди человечество по альтернативному пути, оно не дошло бы до осознания необходимости этих трёх формулировок.
Ш>есть ещё вариационнный принцип.
Зачем его выделять отдельно? Как раз на его основе строится Лагранжева механика.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>А что в сухом остатке ? Предлагаю обсудить.
Знаешь что мне не нравится что в упомянутой тобой дисскуссии, что в твоем сообщении — ты пытаешься делать выводы на основании аналогии. Ценность этого — нулевая. И развернуть аналогию можно как угодно. К примеру, без Вирта да, не было бы Паскаля, но императивный язык был бы.
Все аналогии ложны.
... << RSDN@Home 1.2.0 alpha 4 rev. 1138 on Windows Vista 6.1.7000.0>>
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Я не математик, давать точные определения не буду. Но ИМХО дифференциальное и интегральное исчисление и все то, что есть в учебнике матанализа — это 99..9%, а запись dy/dx или загогулины интеграла — это 0.0..1%. Это можно поменять, основное содержание неизменно.
Хм. И из чего у нас состоит учебник матанализа? Мне просто интересно.
PD>Еще раз — предлагаю обсуждение животного мира прекратить. Не относится это к делу ибо не есть рукотворное явление.
Если хочется, то можно перейти к обсуждению рукотворной части животного мира Результат будет примерно тот же.
PD>Ты от меня слишком много хочешь, я не инженер. Насчет 4 колес мог бы высказать некоторые соображения (почему не 3 и почему не 5), но, боюсь, они инженерам могут показаться смешными. А во-вторых, я не говорил о повторениях. Я говорил, что в итоге у всех получится одно и то же — некое результирующее, независимо от личности.
Именно об этом я и говорю — "повторение" в том смысле, что если мы отмотаем время назад и пустим всё заново, но без Дизеля.
PD>Аргумент прост — представь себе, что автомобилей нет, начнем с начала. Что изменится в его конструкции ?
Это ты меня спрашиваешь? Это ты делаешь смелое предположение — что изменения будут несущественными.
Я в этом вовсе не уверен.
PD>В то время как если представить себе, что Пентиума нет и начать с начала, то будет, возможно, совсем другой процессор.
Что значит "совсем другой"?
Не связано ли твое восприятие с тем, что ты лучше разбираешься в процессорах, чем в двигателях?
Тебе не приходило в голову, что специалист автопрома наоборот скажет "ну чего там изменится в компьютере? Один хрен будет экран, мышь и клавиатура". И ему будет до лампочки то, что он там внутри двадцатисемиразрядный и на троичной логике. И точно так же он сможет рассудить "да, начали-то они с германия, но быстро поняли его бесперспективность и переключились на кремний". "Зато вот современный инжекторный мотор — плод случайных, по большому счету, решений, и он бы получился совершенно другим, если начать сначала".
PD>Ну это схоластика чистой воды. Из того, что есть минимальное число, пригодное для этих целей, никак не следаует, что именно оно должно употребляться.Да и вообще, помню, везде когда-то писали : ЭВМ были сделаны на двоичной системе, потому что ее технически проще реализовать. Я не вижу теоретических причин невозможности создания ЭВМ на десятичной, к примеру , системе. И недвоичная логика тоже существует. Кстати, ее Зиновьев (Зияющие высоты читал ?) развивал. "Истинно, ложно и противоречиво".
Я в курсе про неклассические логики (их, кстати, много).
PD>Кстати, если бы сейчас была на машине троичная система,
Ты какую имеешь в виду — классическую троичную или троичную сбалансированную? Мне вот вторая больше нравится — в ней очень легко делать умножение на -1, а, значит, и вычитание. PD> то все ваши проблемы и решения с nullable решались бы без всякого труда и без каких=то хитростей.
Во как, а мужики-то не знают!
У нас, в общем-то, нет "проблем и решений с nullable", которые бы требовали каких-то особых хитростей.
И с троичностью системы "в машине" это совершенно никак не связано. В том же SQL трёхзначная логика прекрасно работает испокон веку.
Так что непонятно, что именно ты имеешь в виду. Рекомендую почитать второй том Кнута на тему нетрадиционных систем счисления. Их изобилие как-то снимает романтический ореол с троичной системы.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Паскаль описан в БНФ изначально, так что синтаксис математически строг. А как семантику формулировать на уровне математической строгости — я не знаю.
Так компилятор, как и любая реальная программа, абсолютно формален.
... << RSDN@Home 1.2.0 alpha 4 rev. 1138 on Windows Vista 6.1.7000.0>>
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
S>Хм. И из чего у нас состоит учебник матанализа? Мне просто интересно.
Интересно, так возьми его и почитай.
PD>>Еще раз — предлагаю обсуждение животного мира прекратить. Не относится это к делу ибо не есть рукотворное явление. S> Если хочется, то можно перейти к обсуждению рукотворной части животного мира Результат будет примерно тот же.
Не хочется.
PD>>Ты от меня слишком много хочешь, я не инженер. Насчет 4 колес мог бы высказать некоторые соображения (почему не 3 и почему не 5), но, боюсь, они инженерам могут показаться смешными. А во-вторых, я не говорил о повторениях. Я говорил, что в итоге у всех получится одно и то же — некое результирующее, независимо от личности. S>Именно об этом я и говорю — "повторение" в том смысле, что если мы отмотаем время назад и пустим всё заново, но без Дизеля.
И что ?
PD>>Аргумент прост — представь себе, что автомобилей нет, начнем с начала. Что изменится в его конструкции ? S>Это ты меня спрашиваешь? Это ты делаешь смелое предположение — что изменения будут несущественными. S>Я в этом вовсе не уверен.
А я уверен. В конце концов современные автомобили делали и делают самые разные фирмы, а получается примерно одно и то же.
PD>>В то время как если представить себе, что Пентиума нет и начать с начала, то будет, возможно, совсем другой процессор. S>Что значит "совсем другой"?
Не Пентиум 4.
S>Не связано ли твое восприятие с тем, что ты лучше разбираешься в процессорах, чем в двигателях? S>Тебе не приходило в голову, что специалист автопрома наоборот скажет "ну чего там изменится в компьютере? Один хрен будет экран, мышь и клавиатура".
И ему будет до лампочки то, что он там внутри двадцатисемиразрядный и на троичной логике. И точно так же он сможет рассудить "да, начали-то они с германия, но быстро поняли его бесперспективность и переключились на кремний". "Зато вот современный инжекторный мотор — плод случайных, по большому счету, решений, и он бы получился совершенно другим, если начать сначала".
Сомнительно. Я, конечно, не специалист по двигателям, но достаточно все же знаю химию и механику их. Там реально в этом плане ничего не изменилось со времен Форда.
PD>>Кстати, если бы сейчас была на машине троичная система, S>Ты какую имеешь в виду — классическую троичную или троичную сбалансированную? Мне вот вторая больше нравится — в ней очень легко делать умножение на -1, а, значит, и вычитание. PD>> то все ваши проблемы и решения с nullable решались бы без всякого труда и без каких=то хитростей. S>Во как, а мужики-то не знают!
Так знай теперь, а мужики могут сами сказать
S>У нас, в общем-то, нет "проблем и решений с nullable", которые бы требовали каких-то особых хитростей.
Ну-ну. Дело не в хитростях, а в том, что вы моделируете троичную логику на двоичных элементах, из-за этого приходится выкручиваться.
S>И с троичностью системы "в машине" это совершенно никак не связано. В том же SQL трёхзначная логика прекрасно работает испокон веку.
??? Работает, конечно, но это лишь значит, что внутри SQL сервера она так же моделируется.
S>Так что непонятно, что именно ты имеешь в виду. Рекомендую почитать второй том Кнута на тему нетрадиционных систем счисления. Их изобилие как-то снимает романтический ореол с троичной системы.
Кнута я читал еще так лет 20 назад. Ореола никакого нет. Просто я отметил, что двоичная система счисления не относится к числу нетленных ценностей, вот и все, что я хотел сказать.
Здравствуйте, Шахтер, Вы писали:
Ш>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>В дискуссии, которая развернулась вокруг моего взгляда как химика на положение в ИТ, меня заинтересовала одна мысль. Попробую ее сформулировать.
PD>>Если бы Ньютон и Лейбниц не родились на свет — матанализ сейчас имел бы тот же вид, какой он имеет.
Ш>Неверно. Тот матан, который придумали Ньютон и Лейбниц, давно вошел в историю науки. Современный матан ведет историю от Коши, Вейерштрасса и Дедекинда. Ш>И интегрируем мы давно уже не по Риману, а по Лебегу. И меры определяем не по Жордану, а по Лебегу.
Я что, должен разжевать все и в рот положить ? Я привел их как родоначальников матанализа. То, что он в дальнейшем изменился , я прекрасно знаю, и о том, кто потом в нем работал и оставил свой след, тоже. Мне их всех надо было перечислить ?
PD>>Закон всемирного тяготения несомненнно, был бы открыт и имел тот же вид.
Ш>Тоже неверно. Законы физики имеют вид, зависящий от выбранного представления физической реальности.
Может, я чего-то не понимаю, но ИМХО формула закона всемирного тяготения ни от чего не зависит.
PD>>Законы механики — тоже.
Ш>Законы механики могут быть сформулированы в разных формах. Как уравнения движения, как уравнения Лагранжа, в форме Гамильтона, есть ещё вариационнный принцип.
На здоровье. От этого физические законы не зависят, а излагать их можешь даже с помощью иероглифов.
Ш>Короче -- учите матчасть.
PD>>Если бы Менделеев и Мейер померли в младенчестве — трудно предположить, что мы бы до сих пор не знали бы периодической таблицы. Имя она носила бы другое, а вид — тот же.
Ш>Тоже не факт. В конце концов, траспонируй -- уже альтернативный вариант получится.
Ну не смеши хоть. Что изменится от транспонирования ? Периодический закон — это отнюдь не внешний вид той таблицы, которая в каждом школьном кабинете висит. Ее внешний вид вообще малосущественен. Периодический закон — это правила заполнения орбиталей в соответствии с принципом Паули. Его не транспонируешь
Ш>В науке происходит эволюция знаний. При этом теории не только рождаются, но и умирают.
Приведи пример умерших теорий. Только научных, а не ошибочных. Флогистон, теплород и жизненная сила не пойдут.
Теории не умирают, если они верные. Просто со временем обнаруживается их ограниченность и неприменимость в определенных условиях. Ньютонова механика не померла от того, что не смогла работать при субсветовых скоростях. И электродинамика Максвелла тоже, от того, что не смогла объяснить квантовые эффекты.
>Та форма, которую научные теории имеют на данный момент есть результат исторического развития. При другом историческом развитии всё выглядело бы по-другому.
Нет. Теория относительности или классическая механика есть отражение физической реальности и иными быть не могли. Могло быть иное описание, изоморфное существующему, но формально иное. иными же они могли бы быть только если физические законы были бы иными.
PD>>Возьмем технологии. Если бы Дизель не родился, дизели все равно бы появились.
Ш>Ниоткуда не следует.
Так без них бы и жили, не придумали бы ?
PD>>Ракеты в СССР построили бы и без Королева, и они были бы такими же.
Ш>Неверно. Ракеты в СССР, в США и во Франции разные. НЕкоролев тоже скорее всего придумал бы свою конструкцию.
Конструкцию — да. А принципы остались бы. Реактивная тяга. Жидкие или твердые топлива. Аэродинамические характеристики. И т.д.
PD>>Ядерное оружие было бы создано без Курчатова и Сахарова, и оно выглядело бы так же и работало так же.
Ш>Тоже неверно. Уже в момент рождения было предложено два варианта кострукции ядерного боеприпаса.
Опять ты сбиваешься на мелочи.
PD>>Иными словами, в науке и в технологии от личности немногое зависит.
Ш>Бред. И наука и техника несут на себе яркий отпечаток тех личностей, которые их творили.
Тебе не кажется , что использование таких аргументов не есть корректный спосбо дискутирования ? Отпечаток несут, но потом все неизбежно сглаживается при участии других ярких и не очень личностей, а в итоге получается то, что называется вектором развития.
PD>>Да, возможно, без Эйнштейна ОТО была бы создана лет на 20 позже. Но все равно была бы создана.
Ш>То же самое. Только вариативность больше. Просто потому, что больший простор для творчества.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Сомнительно. Я, конечно, не специалист по двигателям, но достаточно все же знаю химию и механику их. Там реально в этом плане ничего не изменилось со времен Форда.
А в интелах что-то изменилось со времен 4004?
PD>Ну-ну. Дело не в хитростях, а в том, что вы моделируете троичную логику на двоичных элементах, из-за этого приходится выкручиваться.
Не понимаю, каким образом nullable (имеется в виду, наверное, структурка Nullable<T>?) относится к троичной логике. И где бы пришлось меньше выкручиваться.
Можно пример кода, иллюстрирующего "выкручивание", в студию?
PD>??? Работает, конечно, но это лишь значит, что внутри SQL сервера она так же моделируется.
Что значит "моделируется"? Я не понимаю PD>Кнута я читал еще так лет 20 назад. Ореола никакого нет. Просто я отметил, что двоичная система счисления не относится к числу нетленных ценностей, вот и все, что я хотел сказать.
А вот мне всё же кажется, что компьютеры после "переизобретения" один хрен стали бы двоичными. Уж очень это упрощает реализацию элементов.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Сомнительно. Я, конечно, не специалист по двигателям, но достаточно все же знаю химию и механику их. Там реально в этом плане ничего не изменилось со времен Форда. S>А в интелах что-то изменилось со времен 4004?
Нет, ничего
S>Не понимаю, каким образом nullable (имеется в виду, наверное, структурка Nullable<T>?) относится к троичной логике. И где бы пришлось меньше выкручиваться.
Если бы была троичная логика, то можно было бы создавать не экземпляры классов, а value.
int t = null;
то есть обычные числа представляются в двоичной системе нулями и единицами. а двойка — null. Это было бы еще понятнее, если бы был битовый тип
bit3 b1 = true;
bit3 b2 = false;
bit3 b3 = null;
или (на С++) NULL можно было бы иметь в качестве специального адреса, а 0 был бы просто адресом.
S>Можно пример кода, иллюстрирующего "выкручивание", в студию?
Необходимость иметь специальный класс и невозможность занесения в value.
PD>>??? Работает, конечно, но это лишь значит, что внутри SQL сервера она так же моделируется. S>Что значит "моделируется"? Я не понимаю
Сочувствую
S>А вот мне всё же кажется, что компьютеры после "переизобретения" один хрен стали бы двоичными. Уж очень это упрощает реализацию элементов.
Хм. Скорее всего да, но 100% не уверен. Иногда упрощение реализации не есть самое важное. иногда другие факторы перевешивают.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Если бы была троичная логика, то можно было бы создавать не экземпляры классов, а value. PD>int t = null;
PD>то есть обычные числа представляются в двоичной системе нулями и единицами. а двойка — null.
Павел, ты извини, но это бред. Вот у тебя система счисления по основанию 3, в ней цифры, допустим, 0,1,2.
Пусть, для простоты, слово (инт) состоит из трёх трит.
Сколько различных целых чисел ты сможешь в ней представить? Нарисуй табличку и посмотри, что получится.
PD>или (на С++) NULL можно было бы иметь в качестве специального адреса, а 0 был бы просто адресом.
То есть ради одного дополнительного значения к миллиардам уже и так представимых чисел ты решил в полтора раза увеличить расход площади кристалла?
И эти люди рассуждают об эффективности...
PD>Необходимость иметь специальный класс и невозможность занесения в value.
По-прежнему непонятно, какой именно "специальный класс" тут нужен. Наличие специального класса обусловлено исключительно языком. Никакого отношения к элементной базе это не имеет. Просто поражает, как люди могут браться рассуждать о профессионализме разработчиков, не имея представлений об элементарных основах.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Если бы была троичная логика, то можно было бы создавать не экземпляры классов, а value. PD>>int t = null;
PD>>то есть обычные числа представляются в двоичной системе нулями и единицами. а двойка — null. S>Павел, ты извини, но это бред.
Опять те же аргументы
S>Вот у тебя система счисления по основанию 3, в ней цифры, допустим, 0,1,2.
Пусть, для простоты, слово (инт) состоит из трёх трит. S>Сколько различных целых чисел ты сможешь в ней представить? Нарисуй табличку и посмотри, что получится.
Смотря как представлять. Еще раз — для обычных целых чисел используются только значения 0 и 1. Значение 2 — для null. Тебя что, избыточность смущает ? А она тебя не смущает, когда в тип bool у тебя 8 бит используется ? Сколько можно было бы чисел представить 8 битами ? Аж 256. А используется только 2
Это раз. А теперь второе. Смотрим класс Nullable
public T Value { get; }
Итак, для int 32 бита сидит внутри. Да еще собственно переменная этого типа, ссылка. Итого потратили 64 бита (двоичных). А для
int t = null;
имеем 32 трита, что есть примерно 51 бит.
А если byte t = null, то всего-то 8 тритов. А у тебя 40 бит.
А если упакованный массив битов сделать (в стиле раннего Паскаля), то вообще не будет избыточности.
Другое дело, насколько это нужно, и будет ли суммарный эффект. Если любая переменная простого типа реально может быть null — имеет. Если же чистая арифметика, где null совсе не нужен (так ли — еще тоже вопрос, например, для вещественных переменных им можно бесконечность обозначить)) — то нет.
PD>>или (на С++) NULL можно было бы иметь в качестве специального адреса, а 0 был бы просто адресом. S>То есть ради одного дополнительного значения к миллиардам уже и так представимых чисел ты решил в полтора раза увеличить расход площади кристалла?
См. выше.
S>И эти люди рассуждают об эффективности...
Эти люди рассуждают об эффективнсти в рамках существующей технологии. А в этом топике я лишь рассматриваю возможные варианты, отнюдь не предлагая их реализовать.
PD>>Необходимость иметь специальный класс и невозможность занесения в value. S>По-прежнему непонятно, какой именно "специальный класс" тут нужен.
Nullable твой.
>Наличие специального класса обусловлено исключительно языком.
Да ну ? Реализуй мне занесение null в любую не-классовую переменную на любом из языков С, Паскаль, С#... Присвой специальное значение, так чтобы его можно было отличить от корректного числа.
>Никакого отношения к элементной базе это не имеет. Просто поражает, как люди могут браться рассуждать о профессионализме разработчиков, не имея представлений об элементарных основах.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>В дискуссии, которая развернулась вокруг моего взгляда как химика на положение в ИТ, меня заинтересовала одна мысль. Попробую ее сформулировать.
PD>Ладно, это наука. Возьмем технологии. Если бы Дизель не родился, дизели все равно бы появились. Ракеты в СССР построили бы и без Королева, и они были бы такими же. Ядерное оружие было бы создано без Курчатова и Сахарова, и оно выглядело бы так же и работало так же.
Кха-кха...
Ты чаво?
Утверждаешь, что если бы Королев не родился, то мы все равно имели бы тот же самый "Восток-Союз"?!!!
А ты "Шаттл" видел? Ну ладно, не Шаттл, хотя бы "Сатурн-5" (подсказка — на топливо посмотри)?
Ага, ага Сахаровская многослойкка была бы такая же. Что-ж ее у американцев до сих пор нет?
Если сию аналогию притягивать к языкам программирования, то все языки состоят из одного и того-же — циклов и условий.
Кстати, можно бы еще проще. Оставить действительно троичную систему для всех тритов, кроме старшего. Его одного вполне хватит для обозначения null. Логика, правда, усложнится.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Кстати, можно бы еще проще. Оставить действительно троичную систему для всех тритов, кроме старшего. Его одного вполне хватит для обозначения null. Логика, правда, усложнится.
Здравствуйте, Pavel Dvorkin, Вы писали: PD>Смотря как представлять.
Ну вот как ты предполагаешь — так и представляй. Это же типа будет "меньше приседаний".
PD> Еще раз — для обычных целых чисел используются только значения 0 и 1. Значение 2 — для null. Тебя что, избыточность смущает ?
Конечно. PD>А она тебя не смущает, когда в тип bool у тебя 8 бит используется ? Сколько можно было бы чисел представить 8 битами ? Аж 256. А используется только 2
Нет, здесь это оправдано быстродействием.
PD>Итак, для int 32 бита сидит внутри. Да еще собственно переменная этого типа, ссылка. Итого потратили 64 бита (двоичных).
Никаких ссылок там нет. Nullable — это не класс.
PD>А для PD>int t = null; PD>имеем 32 трита, что есть примерно 51 бит.
Да, у меня — 64. PD>А если byte t = null, то всего-то 8 тритов. А у тебя 40 бит.
У тебя примерно 13, у меня — 16 бит. Чудеса выравнивания.
На твой DateTime уйдет 102 бита, на Nullable<DateTime>- 96.
На твой DateTimeOffset уйдет 152 бита, на Nullable<DateTimeOffset> — 96. Прогрессия понятна?
А теперь вернемся к мелким типам. Уникодовый Char у тебя занимает 25.3 бита; таким образом, "диэтиламид лизергиновой кислоты" сожрет 888бит, а в обычном дотнете — 560.
PD>А если упакованный массив битов сделать (в стиле раннего Паскаля), то вообще не будет избыточности.
Куда же это она денется?
PD>Другое дело, насколько это нужно, и будет ли суммарный эффект.
Суммарный эффект будет строго негативным.
PD>Если любая переменная простого типа реально может быть null — имеет.
На практике это не подтверждается. Nullable<T> встречается гораздо-гораздо реже, чем просто T. PD>Если же чистая арифметика, где null совсе не нужен (так ли — еще тоже вопрос, например, для вещественных переменных им можно бесконечность обозначить)) — то нет.
Для вещественных переменных всё давно уже обозначили.
PD>Эти люди рассуждают об эффективнсти в рамках существующей технологии. А в этом топике я лишь рассматриваю возможные варианты, отнюдь не предлагая их реализовать.
Но ты считаешь, что человечество могло бы пойти по этому пути, если бы не роль личности в истории. Замечательно.
PD>Nullable твой.
>>Наличие специального класса обусловлено исключительно языком. PD>Да ну ? Реализуй мне занесение null в любую не-классовую переменную на любом из языков С, Паскаль, С#... Присвой специальное значение, так чтобы его можно было отличить от корректного числа.
Павел, еще раз: возможность занести null в любую переменную связана исключительно с выбором авторов ЯП. Авторы C, паскаля и C# сделали свой выбор. Авторы SQL — свой. Ты, кстати, в курсе, что в типичных СУБД обеспечение признака Null — это ровно 1 бит на поле, независимо от его размера? А не полбита на каждый бит, как ты предлагаешь.
И это ты еще даже не задумался о том, как будет устроена арифметика этих "специальных чисел". Что куда будет переноситься, как должны себя вести операции типа null + 1 и так далее. Ты ведь схему обычного двоичного сумматора видел? Ну вот, а теперь представь, насколько она "упростится" для твоей логики.
И ты считаешь, что это — "безо всякого труда". Ну-ну.
PD>Господи, ну хоть чепуху-то не городи.
Перестану только после вас
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, WFrag, Вы писали:
WF>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Кстати, можно бы еще проще. Оставить действительно троичную систему для всех тритов, кроме старшего. Его одного вполне хватит для обозначения null. Логика, правда, усложнится.
WF>А не проще ли один лишний бит использовать?
Было. В М-220 старший бит слова (45 бит) назывался "признак числа". На арифметику не влиял, но не очищался арифметическими операциями, только явно. Так что использование числа с установленным признаком вело к его распространению, а потом это было для меня предупреждением, что я забыл инициализировать переменную.
А сейчас — как ты это представляешь ? 32-й бит добавить или же 31-й под это использовать ? Первое приведет бог знает к чему в плане адреса (не забывай, что сейчас указатель есть целое, по крайней мере в Win32). Второй подход возможен, но в троичной схеме проще, не надо дополнительного трита.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>А сейчас — как ты это представляешь ? 32-й бит добавить или же 31-й под это использовать ? Первое приведет бог знает к чему в плане адреса (не забывай, что сейчас указатель есть целое, по крайней мере в Win32). Второй подход возможен, но в троичной схеме проще, не надо дополнительного трита.
Скорее, второе.
Ты уверен, что в троичной схеме не найдутся жеающие использовать «лишние» состояния для представления большего множества чисел, а не какого-то «бесполезного» (не вообще, а так, в конкретной ситуации) nullable? Такая же ситуация получится, как сейчас с битами.
PD>> Еще раз — для обычных целых чисел используются только значения 0 и 1. Значение 2 — для null. Тебя что, избыточность смущает ? S>Конечно. PD>>А она тебя не смущает, когда в тип bool у тебя 8 бит используется ? Сколько можно было бы чисел представить 8 битами ? Аж 256. А используется только 2 S> Нет, здесь это оправдано быстродействием.
Не только.
PD>>Итак, для int 32 бита сидит внутри. Да еще собственно переменная этого типа, ссылка. Итого потратили 64 бита (двоичных). S>Никаких ссылок там нет. Nullable — это не класс.
Сорри.Верно. Но и заплатили вы за это.
Nullable<byte> t = null;
0000001a lea eax,[ebp-4]
0000001d mov word ptr [eax],0
Чудес не бывает .
PD>>А для PD>>int t = null; PD>>имеем 32 трита, что есть примерно 51 бит. S>Да, у меня — 64. PD>>А если byte t = null, то всего-то 8 тритов. А у тебя 40 бит. S>У тебя примерно 13, у меня — 16 бит. Чудеса выравнивания.
S>На твой DateTime уйдет 102 бита, на Nullable<DateTime>- 96. S>На твой DateTimeOffset уйдет 152 бита, на Nullable<DateTimeOffset> — 96. Прогрессия понятна? S>А теперь вернемся к мелким типам. Уникодовый Char у тебя занимает 25.3 бита;
А можно поинтересоваться, откуда это ? Я вроде о том, как хранить при этом символы, вообще не говорил.
PD>>А если упакованный массив битов сделать (в стиле раннего Паскаля), то вообще не будет избыточности. S>Куда же это она денется?
TFNTNF....
триты и все. Массив (не С#, а C++) из tbool значений. Каждый трит есть одно значение
packed tbool t[8] ;// sizeof(t) == 1 tbyte (байт из тритов)
PD>>Другое дело, насколько это нужно, и будет ли суммарный эффект. S>Суммарный эффект будет строго негативным.
Ты же сам согласился, что есть случаи, когда это неверно.
PD>>Если любая переменная простого типа реально может быть null — имеет. S>На практике это не подтверждается. Nullable<T> встречается гораздо-гораздо реже, чем просто T.
С этим соглашусь. Хотя... А не является ли это следствием того, что до Явы мы просто не умели их описывать и шли на всякие трюки. Отсюда наша непривычка к ним. Пример с бесконечностью я приводил. Пример с NULL тоже. Можно и еще найти
PD>>Если же чистая арифметика, где null совсе не нужен (так ли — еще тоже вопрос, например, для вещественных переменных им можно бесконечность обозначить)) — то нет. S>Для вещественных переменных всё давно уже обозначили.
Да, но как ? Исключили некоторые комбинации из числа тех, что могли бы изображать число, из чисел, обозначив ими бесконечность. Подход верный, но искусственный.
PD>>Эти люди рассуждают об эффективнсти в рамках существующей технологии. А в этом топике я лишь рассматриваю возможные варианты, отнюдь не предлагая их реализовать. S>Но ты считаешь, что человечество могло бы пойти по этому пути, если бы не роль личности в истории. Замечательно.
Глупо. О личности здесь вообще речи нет. А пойти оно не могло — оно пробовало реально. Но не приняло.
PD>>Nullable твой.
>>>Наличие специального класса обусловлено исключительно языком.
. Антон, ну неужели ты не понимаешь, что никаким способом нельзя описать специальное значение и специальный адрес, если допустить , что все битовые комбинации могут изображать адрес или число. Странно. В C# пошли на Nullable. В С++ вообще ничего делать не стали, для чисел там нет null, а для адреса махнули рукой и решили, что 0 и есть NULL. В Win32 эта проблема решается на уровне ОС, а в ДОС никак не решалась — тебе не приходилось вешать компьютер из-за записи по NULL и порчи т.о. таблицы векторов прерываний ?
PD>>Да ну ? Реализуй мне занесение null в любую не-классовую переменную на любом из языков С, Паскаль, С#... Присвой специальное значение, так чтобы его можно было отличить от корректного числа. S>Павел, еще раз: возможность занести null в любую переменную связана исключительно с выбором авторов ЯП. Авторы C, паскаля и C# сделали свой выбор.
Ладно. Предложи язык. в котором это возможно. Есть целая переменная, 32 бит (двоичная система). Какую комбинацию битов ты присвоишь, чтобы обозначить null ?
>Авторы SQL — свой. Ты, кстати, в курсе, что в типичных СУБД обеспечение признака Null — это ровно 1 бит на поле, независимо от его размера?
Не в курсе, но я сделал бы так же.
>А не полбита на каждый бит, как ты предлагаешь.
треть трита тогда уж
S>И это ты еще даже не задумался о том, как будет устроена арифметика этих "специальных чисел". Что куда будет переноситься, как должны себя вести операции типа null + 1 и так далее.
Конечно думал. Я же ясно написал (чуть позже, правда, но мог бы и дочитать, прежде чем писать)
PD>Логика, правда, усложнится
>Ты ведь схему обычного двоичного сумматора видел? Ну вот, а теперь представь, насколько она "упростится" для твоей логики.
S>И ты считаешь, что это — "безо всякого труда". Ну-ну.
PD>>Господи, ну хоть чепуху-то не городи. S>Перестану только после вас
Нет, не удастся тебе. Я уже 100 раз тебе говорил — увы, но ты хороший специалист только в том, что реально существует.
Здравствуйте, WFrag, Вы писали:
WF>Ты уверен, что в троичной схеме не найдутся жеающие использовать «лишние» состояния для представления большего множества чисел, а не какого-то «бесполезного» (не вообще, а так, в конкретной ситуации) nullable? Такая же ситуация получится, как сейчас с битами.
Я ни в чем не уверен. Я не апологет троичной системы и не предлагаю на нее переходить. Я вполне понимаю, что тут возможны всякие разные ситуации, которые требуется обдумать, а я это делать не намерен. Я просто одно хотел сказать — она возможна.
И не только она. Вот как, по-твоему, понятие байт есть фундаментальное понятие или нет ? Именно тот байт, который == 8 бит, никакой троичной системы. Я подозреваю, что если бы компьютер изобрели китайтцы, то байт был бы == 16 бит, а то и 32.
Один вопросик
S>Само по себе существование двойки как минимального основания систем счисления, и сведение всех вычислений к конструированию схем из "и-не" никуда не денется.
А ты уверен, что минимальным основанием системы счисления является двойка ? А не 1 ?
1111111 = 1*1^0 + 1*1^1 + 1*1^2...
Чем не позиционная система счисления ? Именуется единичной (унарной). Ее даже в школе изучают. Впрочем, может и в детском саду. называется "счет с помощью палочек". Было такое в детстве твоем ? Если не было, почитай вот это
Унарная система счисления
Унарная система счисления (единичная система счисления) — не-позиционная (не-поместная), положительная суммарная целочисленная система счисления с основанием равным 1.
Может рассматриваться и как вырожденная позиционная (поместная) положительная целочисленная система счисления с основанием равным 1.
P.S. Я ее в качестве основы для компьютеров не предлагаю