|
"Засорять стек переменными"
|
|||
---|---|---|---|
#18+
мой коллега очень противиться введению новых переменных, аргументируя это тем что "засоряется стек". У меня вопрос, что, в таком случае сильно затормозиться работа программы из-за "засоренного стека"? Я не заметил, правда я пишу на с шарпе а коллега на ПХП. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 19:49 |
|
"Засорять стек переменными"
|
|||
---|---|---|---|
#18+
tercat2мой коллега очень противиться введению новых переменных, аргументируя это тем что "засоряется стек". У меня вопрос, что, в таком случае сильно затормозиться работа программы из-за "засоренного стека"? Я не заметил, правда я пишу на с шарпе а коллега на ПХП. А сборщик мусора на что?Ах, да ПыХыПыСты о таком не слышали:), не слушай своего друга, он глупые вещи говорит ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 19:56 |
|
"Засорять стек переменными"
|
|||
---|---|---|---|
#18+
DezaА сборщик мусора на что?он работает с кучей, а не со стеком DezaАх, да ПыХыПыСты о таком не слышалиможет, и не слышали, но пользуются. сборка мусора щас много где есть.. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 20:00 |
|
"Засорять стек переменными"
|
|||
---|---|---|---|
#18+
Яростный МечDezaА сборщик мусора на что?он работает с кучей, а не со стеком Ну большинство переменных в проекте, обычно ссылочные, а они хранятся в куче:) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 20:02 |
|
"Засорять стек переменными"
|
|||
---|---|---|---|
#18+
tercat2, чего только люди не придумают. "Засорение" стека локальными переменными может стать проблемой при использовании рекурсии ну или если счет этих переменных идет на сотни или не дай бог на тысячи. Ради интереса, коллега против локальных переменных вообще или в какой-то конкретной фукнции/ситуации? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 20:07 |
|
"Засорять стек переменными"
|
|||
---|---|---|---|
#18+
tercat2У меня вопрос, что, в таком случае сильно затормозиться работа программы из-за "засоренного стека"? Я не заметил, правда я пишу на с шарпе а коллега на ПХП.возможно, есть разное понимание ситуации. В компилируемых языках вроде C# никаких тормозов быть не должно, т.к. каждая переменная во время выполнения представлена как "кусок стека с началом по такому-то адресу". Единственное, что может произойти - переполнение стека, если большая рекурсия. В динамических языках - зависит от реализации, возможно, набор локальные переменных - это некий dictionary (по крайней мере, в спецификации js это определено именно так, про пхп не знаю). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 20:11 |
|
"Засорять стек переменными"
|
|||
---|---|---|---|
#18+
tercat2, решайте конкретную задачу, например если у вас стековерфлоу или оутофмемори, и то в этом случае скорее всего проблема не большом количестве локальных переменных ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 09:24 |
|
"Засорять стек переменными"
|
|||
---|---|---|---|
#18+
Бедный дядечка, что ж его засорять, сдвиг, и стек чистый.. статья навеяла вот этим Письмо программиста Для начала немного о себе: я работал в этой отрасли несколько лет и занимался непосредственно созданием бортового ПО и наземного обслуживающего ПО. В круг моих задач входили системы из контура управления и контроля аппарата, системной частью я не занимался, но взаимодействовать приходилось с ней достаточно плотно, т.к. реализуемые задачи были наиболее ответственными и ресурсоёмкими. Мой код уже летает в составе двух модулей МКС, а так же в составе нескольких спутников. Ещё один готовится улететь. Я не являюсь профессиональным инженером космических систем, но являюсь профессиональным программистом, поэтому и оценивать могу только часть касающуюся разработки ПО. Все мои наблюдения оформлю в виде небольших тезисов. 1. Большая часть ПО написана не профессиональными программистами. В основном функциональные системы написаны либо людьми имеющими инженерное образование связанное с летательными и космическими аппаратами, либо физиками и математиками, которым в силу необходимости пришлось научиться перекладывать свои знания на абстракции низкоуровневых языков программирования (типа C). На результаты такого написания кода без слёз смотреть сложно. 2. При написании бортовой части ПО используются технологии двадцати- тридцатилетней давности. Это и устаревшие морально операционные системы, и подходы к проектированию, реализации и тестированию программных продуктов. До сих пор можно найти документацию в виде подготовленных для печати на матричном принтере страниц, которая в цифровом виде хранится у какого-нибудь дядечки на персональном компьютере под управлением MS-DOS, в одному ему известном месте. 3. Для управления версионностью ПО не используются соответствующие программные продукты (Subversion, Git и т.п.). Даже если они и используются, то находится один (а чаще несколько) уникумов, которые не в состоянии их освоить, но в то же время являющиеся незаменимыми людьми, поэтому половина проекта находится под контролем системы управления версиями, а половина нет, что в итоге приводит к тому, что система начинает больше мешать, чем помогать в разработке. 4. “Незаменимые” люди существуют. Существуют люди без которых разработка встает на месте. Чаще всего это связано с тем, что такой “незаменимый” держит в голове некие тайные знания на протяжении десятков лет и активно сопротивляется их формализации и оформлению в виде документации. Это может доходить до такого состояния, что с уходом “незаменимого” человека пропадают исходные тексты программ и целые пласты знаний, из-за чего приходится переписывать объемные системы с нуля. 5. Отсутствие систем документооборота. Иногда таких систем просто нет, но чаще их просто не используют или использовать их крайне проблематично. В некоторых случаях система документооборота используется только для внешних по отношению к организации документов, для внутренней же документации используется переписка по e-mail, совещания и т.п. 6. Бесконечные как по времени, так и по количеству совещания. Любое, даже самое мелкое действие для своей реализации может потребовать сбора совещания из 10-20 человек на срок 1,5-2 часа. Таких совещаний проводится 1-2 в день. На каждом таком совещании обсуждается сразу все вопросы, причем обсуждаются они по группам, т.к. эти вопросы редко касаются всех присутствующих. В это время все остальные разговаривают между собой, играют или даже спят. 7. Отсутствуют методология и системы модульного тестирования. Чаще всего разработчик должен сам подумать и реализовать собственную систему модульного тестирования своего компонента, т.к. кроме него этим просто некому заняться. 8. Слабо развиты методология и системы интеграционного тестирования. Чаще всего процесс слабо формализован и не поддается изменению. То есть, существуют формальные методики и люди занимающиеся тестированием, но получить что-то вменяемое от них практически невозможно. Из-за в отсутствие системы учета багов ошибки могут заноситься в бумажные журналы, которые сам разработчик должен отслеживать и после этого бежать к тестировщику для выяснения обстоятельств возникновения ошибки. 9. Единственное, что спасает (далеко не всегда) ПО от багов это длительная многостадийная отработка. Зачастую при поступлении ПО на заключительную стадию тестирования в первые же несколько дней находят сотни ошибок. Иными словами, удивительно не то, что некоторые космические аппараты у нас не летают, удивительно то, что другие летают. 10. Бессбойность работы не является приоритетом при проектировании и реализации. Многие предложения по повышению надежности ПО требующие лишь некоторого времени на реализацию отклоняются на том основании, что менеджер не видит или не понимает проблемы. Даже простейшие системы контроля параметров попадающих на борт внедрялись с большим трудом под предлогами “оптимизации” или недопустимости изменения интерфейса существующих функций используемых десятком разработчиков. 11. Преждевременные псевдооптимизации при явной пессимизации. В программах почти всех инженеров ставших программистами по необходимости можно увидеть псевдомикрооптимизации, которые делают код нечитаемым (например: использование операций сдвига вместо умножения, использование битовых операций для ускорения исполнения программы, отказ от выделения функций для экономии на вызовах и т.д. и т.п.). Программы приобретают поистине кошмарный вид с десятком уровней вложенности и переиспользованием одной переменной для разных задач в пределах одной функции, с затейливой битовой арифметикой и шаманскими макросами имеющими глобальную область видимости. Вместе с тем при компилировании релизной бортовой версии могут быть сознательно выключены все оптимизации компилятора и линковщика для обеспечения какой-нибудь редкоиспользуемой низкоуровневой функции (например: реализации бинарных патчей). Что в конечном счете приводит к тому, что бортовой код становится медленным как черепаха и выходит за такт жесткого реалтайма, и в свою очередь вызывает новую волну дебильных микрооптимизаций по включению тела функций в места их вызова и замены нормальных вычислений сдвигами и т.п. 12. Системная текучка кадров. Текучка кадров встроена в систему — такого слоя специалистов как грамотные опытные разработчики непредпенсионноговозраста практически нет. Есть два лагеря: профессионалы старой школы сопротивляющиеся всему новому и держащиеся за свои рабочие места (про них говорят: “Эти люди не читают книг — они их пишут”), и бывшие студенты ещё ничему не научившиеся и зачастую просто “отсиживающиеся” от призыва в армию. Большинство адекватных людей через 2-3 года работы понимают, что никаких перспектив и возможностей не предвидится и уходят на большие зарплаты. На их место уже готов новый набор из студентов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 12:18 |
|
|
start [/forum/topic.php?fid=20&fpage=191&tid=1405798]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 151ms |
0 / 0 |