Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2009, 13:41   #21
mustaf0id
 
Регистрация: 05.05.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Допустим имеется 2 потока.
Первый считает: a + b
Второй: c + d
Переменная x внутри объекта "сумматора" одна на всех и потому записать в неё значение может первый поток, а считать - второй. Или наоборот. В итоге вместо 2 + 2 посчитается какое-нибудь 2 + 15.
Придется на каждый поток заводить свой "сумматор" и очень много со всем этим возиться в итоге
Зачем это одна переменная на всех?
mustaf0id вне форума Ответить с цитированием
Старый 06.05.2009, 14:20   #22
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Вопрос

Цитата:
Сообщение от mustaf0id Посмотреть сообщение
Кстати, насчет абстракций, а какие можно выделить критерии "хорошей" абстракции? Я думаю один из таких критериев - простота. Например, for можно выразить через while, (или не дай бог goto ) но тогда появляется излишняя "свобода действий" и код становить трудно читать.
Вот помоему интересное мнение по этому поводу http://blog.intentsoft.com/intention...ons_and_p.html там правда про языки программирования но суть та же.
Раньше я читал, для того чтобы делать хорошие абстракции, надо иметь вкус и тому подобное. Но судя по моему вкусу, все системы необходимо переписывать, иначе я просто не могу их использовать естественным для меня образом, а он строится на классических абстрактных механизмах C++.

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

Если код кажется медленным, надо объявить его встроенным. Есть ещё такое мнение, что объектно-ориентированный код медленнее, хотя другие говорят, что современные компиляторы строят равные по скорости приложения.

Пожалуй надо ввести ещё пару тысяч понятий, а то арифметика это почти что ничто, на фоне стандартных библиотек и потому мало что понятно.
atomicxp вне форума Ответить с цитированием
Старый 06.05.2009, 14:47   #23
mustaf0id
 
Регистрация: 05.05.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от atomicxp Посмотреть сообщение
Те же операции с последовательности нужно проходить итератором. Причём поток данных тоже должен быть на него завязан. Такие алгоритмы как вычисления хешей должны уметь их вычислять в любом куске формируемых данных. Хоть задом наперёд, хоть особо извращённым способом прохождения.
Т.е. если обобщать - разные аспекты кода должны находится отдельно (способ обхода данных отдельно от вычисления хеша).

Цитата:
Сообщение от atomicxp Посмотреть сообщение
Если код кажется медленным, надо объявить его встроенным. Есть ещё такое мнение, что объектно-ориентированный код медленнее, хотя другие говорят, что современные компиляторы строят равные по скорости приложения.
Последнее время скорость выполнения становится всё менее важной, по сравнению со скоростью разработки. К тому обычно 90% времени выполняется около 10% кода, его оптимизацию можно и отложить в долгий ящик
mustaf0id вне форума Ответить с цитированием
Старый 06.05.2009, 23:09   #24
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Зачем это одна переменная на всех?
Для экономии памяти. А то представьте у вас в массиве количество чисел переваливает за 10^1024 (да-да, есть и такие массивы). Это что ж прийдется выделять память под сумму каждых двух элементов массива? Мало что массив сам по себе много места занимает (это мы еще с типами не разбирались), так + еще 10^512 дополнительных переменных. Это ж просто писец будет а не суммирование, не смотря на стопицот ядер, которые все это параллельно считают.
MaTBeu вне форума Ответить с цитированием
Старый 07.05.2009, 11:47   #25
mustaf0id
 
Регистрация: 05.05.2009
Сообщений: 9
Печаль

Ну, зачем же по 2, разбивать по 2 есть смысл только когда сложение 2 "чисел" занимает очччень большое количество времени. К тому же количество ядер в существующих компутерах к сожалению ограничено, и разбивать проще всего поровну между ними, а не по 2.
Иногда можно и не выделять память под сумму частей а "портить" исходный массив.

Цитата:
А то представьте у вас в массиве количество чисел переваливает за 10^1024 (да-да, есть и такие массивы).
Каким образом хранятся такие массивы. По некоторым оценкам количество атомов во Вселенной порядка 10^70 - 10^80
mustaf0id вне форума Ответить с цитированием
Старый 09.05.2009, 17:44   #26
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Сообщение Размышляем дальше - STL

atomicxp вне форума Ответить с цитированием
Старый 09.05.2009, 20:30   #27
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Вопрос Введение в файловые системы

Предположим есть понятие файл File, но что такое файл? Для начала определим чему же он принадлежит. А принадлежит он файловой системе. Но что же такое файловая система?

Цитата:
Фа́йловая систе́ма (англ. file system) — регламент, определяющий способ организации, хранения и именования данных на носителях информации. Она определяет формат физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имени файла, максимальный возможный размер файла, набор атрибутов файла. Некоторые файловые системы предоставляют сервисные возможности, например, разграничение доступа или шифрование файлов.
Предположим я буду считать FAT, FAT32, NTFS, EXT2, EXT3 и другие подобные файловыми системами. Так же можно посмотреть категории файловых систем. Однако помимо их есть смысл рассматривать распределённые и кластерный файловые системы. Вероятно атрибуты и прочие свойства файлов зависят от той файловой системы в которой работаешь. Значит есть как общность, так и отличия.

Файл прежде всего понятие. Является ли содержимое файла - файлом? Нет не является, иначе бы оно называлось файлом, а не содержимым файла. Таким образом гибридный подход применяемый в стандартных библиотеках, в том числе и использующихся на C++ неподоходит.

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

Таким образом файл это сущность независящая от его атрибутов, одним из которых можно считать его содержимое. Помимо файла существуют папки (Folders), так же известные как директории (Directory).

Вопрос папки они или директории очень важен, так как директории по смыслу являются направляющими и представляют весь путь к директории или файлу, а вот папка она как сущность хранящая что-то внутри себя.
atomicxp вне форума Ответить с цитированием
Старый 09.05.2009, 20:50   #28
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Вопрос

Атрибуты принадлежащие файловой системе NTFS: Name, Archive, Compressed, Device, Directory, Encrypted, Hidden, Normal, NotContentIndexed, Offline, ReadOnly, ReparsePoint, SparseFile, System, Temporary.

Довольно странное распределение демонстрирует нам майкрософт. Name вероятно наследуется от строкового типа с ограниченным диапазоном символов ввода. А вот максимальная длина скорее всего зависит от полного пути ((Full)Path).

Нужно ли любой строке ограниченный диапазон или не нужно надо ещё решить. А вот ISO 9660 трёх уровней говорит о том, что необходимо соблюдать некие ограничения. Плюс существуют и другие стандарты и расширения, такие как Joliet.

Если отвлечься на содержимое, то оно тоже неоднозначно. Всё что про него можно сказать, так это то, что оно представляется последовательностью байт, то есть тот же Sequence.

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

Таким образом мы имеем битово-байтовый неизменяющийся (unchangeable) блок данных (DataBlock). Хотя пока непонятно, стоит ли считать его противоположностью изменяющегося блока данных.
atomicxp вне форума Ответить с цитированием
Старый 09.05.2009, 21:45   #29
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Вообще-то в "стандартных библиотеках" нет никакого смешивания файлов и содержимого файлов. В общем случае есть набор функций:
- Открыть файл (по имени файла возвращает его дескриптор)
- Закрыть файл ("закрывает" дескриптор файла)
- Прочитать из файла (по указанному дескриптору читает данные файла)
- Записать в файл (по указанному дескриптору записывает данные)
...

Можно считать, что дескриптор - это и есть файл, а работаем мы с содержимым файла.
Что тут не так? Где зависимость от конкретной файловой системы? Где путаница между файлом и его содержимым?
ЗЫ. бит не адресуется, а потому все данные - это набор байт, как ни крути
pu4koff вне форума Ответить с цитированием
Старый 09.05.2009, 22:09   #30
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Радость

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Можно считать, что дескриптор - это и есть файл, а работаем мы с содержимым файла.
Что тут не так? Где зависимость от конкретной файловой системы? Где путаница между файлом и его содержимым?
ЗЫ. бит не адресуется, а потому все данные - это набор байт, как ни крути
Здесь как бы разные варианты есть. Можно считать стандартной библиотекой STL, а можно Qt SDK, или вообще, что-либо другое. Суть не в них, а в собственных понятиях. Если рассматривать файл как набор байт с доступом по индексу, то он таким и будет. Если надо разложить его на биты, то это уже будет битовый файл. Можно получать доступ по итератору, но итератор это не последовательность, а проход по чему-либо что можно так представить.

А может я хочу рассматривать файл как набор символов в кодировке юникода по два байта на один символ или ещё как. Важно не то, как сделать ту или иную операцию на конкретной библиотеке, важно сформировать абстракции позволяющие делать весь спектр операций с минимальной сложностью.
atomicxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в поисках органайзера crazy horse Софт 6 11.02.2008 16:56
Нахождение совершенных чисел. Паскаль NikLik Помощь студентам 3 23.11.2007 22:19