Re[20]: Нужна ли Оберон-ОС защита памяти?
От: Костя Ещенко Россия  
Дата: 16.02.05 11:42
Оценка:
Сергей Губанов wrote:

> С другой стороны в оберонах есть элементарный тип "множество", которого нет в Си/Си++/Java/C#, а в языке Си даже нет булевского типа. А выразительность значит меньше. Опять странно...

>
> Кстати про множества, а почему элементарный тип bool в языки C++/Java/C# все-таки ввели, а элементарный тип "множество" проигнорировали?

Не такой уж он элементарный. В С++ есть куча шаблонов множеств для разных сценариев использования: std::bitset, boost::dynamic_bitset, std::vector<bool>, std::set и до кучи std::multiset — множество с повторениями.

> Как интересно в Си/Си++/Java/C# работают с битами? Наверное там битовые операции применяют прямо к числам?


По всякому. Иногда действительно битовыми операциями с числами, иногда с bitset, иногда с bit fields.

> Вот несчастные программисты, как они там мучаются — ведь в Си/Си++/Java/C# множество битов и числа — это одно и тоже, хотя спроси любого математика так он ответит, что число — это одна математическая абстракция (теория чисел), а множество — совсем другая (теория множеств).

>
>
> VAR s1, s2, s3: SET;

Эээ, а что, в Обероне множества не типизированы?

>     n, m: INTEGER;
> BEGIN
>   s1 := {0,1,2,3}; (* Первые четыре бита = 1, остальные 32-4 = 28 битов равны 0 *)
>   s2 := s1;
>   n := 13;
>   m := 2;
>   INCL(s2, n); (* n-тый бит теперь равен 1 *)

Эээ, а если написать INCL(s2, 4000000000), то будет поднят бит № четыре миллиарда?

>   EXCL(s2, m); (* m-тый бит теперь равен 0 *)
>   s3 := s1 + s2 + {25, 26}; (* Объединение трех множеств. В объединеном множестве присутсвуют все элементы присутсвующие во всех объединяемых множествах *)
>   s3 := s1 * s2; (* Пересечение множеств - остаются только элементы присутсвующие и в первом и во втором множестве *)
>   s3 := s1 - s2; (* Разность множеств. Из вычистаемого множества удаляются элементы присутсвующие в вычитаемом множестве *)
>   s3 := s1 / s2; (* Симметричная разность множеств. Объединение разностей множеств s1 / s2 = (s1 - s2) + (s2 - s1) *)
>   m := ORD(s3);  (* Sum i IN s3: 2^i *)
>   s1 := BITS(n); (* {i | ODD(n DIV 2^i)} *)
>
Posted via RSDN NNTP Server 1.9
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.