Оцифрованные разумы как главные герои были в последней книге про хичи Фредерика Пола.
Там у этих разумов основной проблемой была невероятное количество субьективного времени, которое уходило на полеты.
Даже с учетом FTL, цифровые носители для разумов были слишком быстрыми. А выключать себя мало кому нравилось. Вот они там и тусовались в виртуальных пространствах столетиями, пока корабль за месяц куда-то там долетал.
Не помню название книги и автора, давно очень читал. Что-то достаточно трешовое, чуть ли не с торсионными полями.
Там излагалась мысль, что скорость света предельная, потому что вакуум «трется» о материю. И вот если это «трение» убрать (смазать корабль что ли?) можно летать быстрее света. В той книге таким образом поступали какие-то эпизодические пришельцы.
В «Клетке для орхидей» Франке вместо путешествий люди транслировали свое сознание в создаваемые на расстоянии тела.
В «Мост к разуму» (мосте? мосту?) Холдемана было ПЛМ (перемещение Леванта-Мейера) — когда на кристалл бромида кальция подается очень высокое напряжение, область над кристаллом, повторяющая его форму, моментально телепортируется.
Изюминка в том, что телепортация происходит на конечное время (зависящее от поданной энергии и расстояния). Когда время выходит — перемещенная тела либо выдергивает обратно, если вместе с ними перемещался некий «черный ящик», набитый аппаратурой, либо они просто пропадают неизвестно куда.
У того же Холдемана в «Бесконечной войне» черные дыры работали как звездные врата (но до самих дыр нужно было ползти на релятивистских скоростях).
У Булычева в «Надо помочь» инопланетяне перемещались во времени, но оставались в той же точке пространства, поэтому можно было подгадать момент (пока галактика повернется) и попасть на другую планету. Не очень твердая НФ, да.
У Хайнлайна (вот это я уже плоховато помню) в «Астронавте Джонсе» в определенных точках пространства (конгруэнтностях) можно было превысить скорость света и оказаться в другой такой же точке.
P.S: В Arduino «IDE» — есть свой смысл и своя аудитория. Это как есть любители Notepad… Здесь важен момент «вхождения»: если все просто — значит «новички» не потеряются, и наоборот. Но это другая тема :)
Желательно все же, чтобы значение быстрого вхождения новичков не превалировало над удобством всех остальных. А то вон уже Galileo начинает Arduino симулировать, лишь бы аудиторию приманить…
Сам-то я без mbed eclipse к армам уже привязывал, да. Но отладка через gdb работает поразительно медленно и периферию видно не удобно.
ARM по какой-то странной причине предпочитает пилить свою среду, отставая от того же eclipse лет на 10. В версии 4 наконец-то появилось go to definition, например. Косое и кривое.
Я к тому, что может быть у вас есть возможность им как-то намекнуть, что это не лучший путь?
Про Arduino IDE, извините, я вообще лучше промолчу.
Именно тем, что он у процессоров есть — но разный.
Не некоторые, а «вполне определённые» — те, которые на разных процессорах ведут себя одинаково!
Деления у некоторых процессоров нет вообще! Почему оно в Си ведет себя одинаково?
Плавающей арифметики иногда нет вообще.
Циклический сдвиг у процессоров есть очень часто, но в Си его нет.
Если пытаться делать язык, который во всем угождает конкретному процессору — получится ассемблер. Проблема Си (для меня) в том, что он где-то посередине между ассемблером и высоким уровнем; причем граница раздела извилистая и иногда не очень логичная.
Я не понимаю, чем деление принципиально отличается от сдвига; почему деление обязано всегда выполнятся одинаково, а сдвиг — нет.
Особенно когда разработчики компиляторов делают следующий шаг и решают, что «раз мы программисту что-то делать запретили, то теперь можем опираться на то, что он этого никогда не делает в компиляторе».
Проблема, скорее, в том, что запрещено очень много разных, малосвязанных вещей. И решили, что программист всегда про них помнит — а значит ошибку (или хотя бы предупреждение) выдавать не обязательно, программист ведь и сам помнит! Хотя тут ситуация постепенно улучшается.
Веселья добавляют и просто исторически-сложившиеся вещи, вроде того, что sizeof('a') == sizeof(int). Я очень сильно сомневаюсь, что у этого есть какая-то причина, помимо «так сложилось».
Я бы хотел, чтобы одинаковые языковые конструкции вели себя одинаково. Потому что некоторые из них уже ведут себя одинаково! Процессоры разные, но выполнять они могут любые вычисления. Да, где-то сдвиг будет дороже чем умножение, где-то байт будет дороже чем четыре байта.
Но почему-то оператор % всегда возвращает остаток от деления, даже если команды деления у процессора нет вообще и оно будет подпрограммой выполняться. И float c double всегда одинаковые, даже если плавающей арифметики у процессора нет.
Чем сдвиг хуже?
Тут я судить не берусь. Но мое мнение — лучше бы гарантировался какой-нибудь сдвиг. Самый простой (без учета знака, вероятно), чем отдавать это на откуп компилятору. И я подозреваю, что для большого количества вещей, которые сейчас implementation-defined можно было бы дать четкое описание.
Может быть не самое удобное для программиста, но однозначное.
Проблема в том, что С для одних вещей гарантирует платформонезависимость (например, минимальные диапазоны, которые должны помещаться в стандартные целые типы), а для других — не гарантирует (сдвиги отрицательных чисел).
Не совсем понятно, чем первое лучше/легче/нужнее второго?
С другой стороны, в языке С есть конструкции словно специально предназначенные для генерирования ошибок, над которыми хочется волосы рвать.
Например, директива #line. Я честно старался, но никакого полезного применения для нее так и не придумал. Только что-то вроде
#line 76 "main.c"
}
Вообще же, я упустил, что вы понимаете под «переносимым» языком?
Мое глубокое имхо: не уверен, что в мире встраиваемых систем нужен язык, в котором поведение интереснее, чем в С/С++.
Там у этих разумов основной проблемой была невероятное количество субьективного времени, которое уходило на полеты.
Даже с учетом FTL, цифровые носители для разумов были слишком быстрыми. А выключать себя мало кому нравилось. Вот они там и тусовались в виртуальных пространствах столетиями, пока корабль за месяц куда-то там долетал.
Там излагалась мысль, что скорость света предельная, потому что вакуум «трется» о материю. И вот если это «трение» убрать (смазать корабль что ли?) можно летать быстрее света. В той книге таким образом поступали какие-то эпизодические пришельцы.
В «Мост к разуму» (мосте? мосту?) Холдемана было ПЛМ (перемещение Леванта-Мейера) — когда на кристалл бромида кальция подается очень высокое напряжение, область над кристаллом, повторяющая его форму, моментально телепортируется.
Изюминка в том, что телепортация происходит на конечное время (зависящее от поданной энергии и расстояния). Когда время выходит — перемещенная тела либо выдергивает обратно, если вместе с ними перемещался некий «черный ящик», набитый аппаратурой, либо они просто пропадают неизвестно куда.
У того же Холдемана в «Бесконечной войне» черные дыры работали как звездные врата (но до самих дыр нужно было ползти на релятивистских скоростях).
У Булычева в «Надо помочь» инопланетяне перемещались во времени, но оставались в той же точке пространства, поэтому можно было подгадать момент (пока галактика повернется) и попасть на другую планету. Не очень твердая НФ, да.
У Хайнлайна (вот это я уже плоховато помню) в «Астронавте Джонсе» в определенных точках пространства (конгруэнтностях) можно было превысить скорость света и оказаться в другой такой же точке.
Желательно все же, чтобы значение быстрого вхождения новичков не превалировало над удобством всех остальных. А то вон уже Galileo начинает Arduino симулировать, лишь бы аудиторию приманить…
Сам-то я без mbed eclipse к армам уже привязывал, да. Но отладка через gdb работает поразительно медленно и периферию видно не удобно.
ARM по какой-то странной причине предпочитает пилить свою среду, отставая от того же eclipse лет на 10. В версии 4 наконец-то появилось go to definition, например. Косое и кривое.
Я к тому, что может быть у вас есть возможность им как-то намекнуть, что это не лучший путь?
Про Arduino IDE, извините, я вообще лучше промолчу.
Деления у некоторых процессоров нет вообще! Почему оно в Си ведет себя одинаково?
Плавающей арифметики иногда нет вообще.
Циклический сдвиг у процессоров есть очень часто, но в Си его нет.
Если пытаться делать язык, который во всем угождает конкретному процессору — получится ассемблер. Проблема Си (для меня) в том, что он где-то посередине между ассемблером и высоким уровнем; причем граница раздела извилистая и иногда не очень логичная.
Я не понимаю, чем деление принципиально отличается от сдвига; почему деление обязано всегда выполнятся одинаково, а сдвиг — нет.
Проблема, скорее, в том, что запрещено очень много разных, малосвязанных вещей. И решили, что программист всегда про них помнит — а значит ошибку (или хотя бы предупреждение) выдавать не обязательно, программист ведь и сам помнит! Хотя тут ситуация постепенно улучшается.
Веселья добавляют и просто исторически-сложившиеся вещи, вроде того, что sizeof('a') == sizeof(int). Я очень сильно сомневаюсь, что у этого есть какая-то причина, помимо «так сложилось».
Я бы хотел, чтобы одинаковые языковые конструкции вели себя одинаково. Потому что некоторые из них уже ведут себя одинаково! Процессоры разные, но выполнять они могут любые вычисления. Да, где-то сдвиг будет дороже чем умножение, где-то байт будет дороже чем четыре байта.
Но почему-то оператор % всегда возвращает остаток от деления, даже если команды деления у процессора нет вообще и оно будет подпрограммой выполняться. И float c double всегда одинаковые, даже если плавающей арифметики у процессора нет.
Чем сдвиг хуже?
Может быть не самое удобное для программиста, но однозначное.
Но я могу и ошибаться, конечно.
Не совсем понятно, чем первое лучше/легче/нужнее второго?
Например, директива #line. Я честно старался, но никакого полезного применения для нее так и не придумал. Только что-то вроде
Вообще же, я упустил, что вы понимаете под «переносимым» языком?
например.
Про strict aliasing я вообще молчу.