1.1, Аноним (-), 19:29, 09/08/2012 [ответить] [﹢﹢﹢] [ · · · ]
| +3 +/– |
>Под утечками памяти подразумевается наличие объектов, которые не освобождаются сборщиком мусора из-за привязки к структурам данных JavaScript-библиотек, но уже не используются в пользовательском приложении.
Ничего не понял. Разве не этим и должен заниматься сборщик мусора?
| |
|
2.6, Xasd (ok), 22:20, 09/08/2012 [^] [^^] [^^^] [ответить]
| +4 +/– |
может сборщик мусора ещё и патчи в ядро linux должен отправлять сам? :-D
| |
2.21, Аноним (-), 13:36, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
А чего ему собирать? Это же не классическая утечка, а скорее неоптимальное использование, сборщик это не искусственный интеллект, приложение держит данные (библиотеки используемые в приложении) ну а раз держит то подразумевается что они нужны, вот память и не освобождается, как только станет понятно что эти данные не нужны (программист очистит список и т.п.) память автоматически освободится.
| |
|
3.42, Аноним (-), 19:59, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> А чего ему собирать? Это же не классическая утечка, а скорее неоптимальное
> использование, сборщик это не искусственный интеллект, приложение держит данные
Так в случае любой утечки примерно такая же ситуация, вид в профиль. В чем состоят 10 отличий? В том что утечки "теперь банановые"? Память то жрется одинаково :)
| |
|
4.53, Аноним (-), 20:52, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
Жрется то одинаково, но причины разные, чуть ниже подробно описано.
| |
|
5.68, Аноним (-), 22:29, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Жрется то одинаково, но причины разные, чуть ниже подробно описано.
Причины тоже примерно одинаковые, с точностью до сильно некоторых деталей.
| |
|
|
|
|
1.2, Аноним (-), 20:05, 09/08/2012 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
Сейчас 95% яваскриптеров поделит на ноль: они думали что утечек памяти в JS не бывает. А тут вдруг как гром среди ясного неба утилита для борьбы с ними :)
| |
|
2.4, Аноним (-), 21:43, 09/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
Нужно просто сделать еще 1 язык поверх яваскрипта! Со своим сборщиком мусора, тогда точно не будет утечек!
| |
|
3.22, Аноним (-), 14:04, 10/08/2012 [^] [^^] [^^^] [ответить]
| +1 +/– |
Не надо ничего делать, классических утечек итак нет, а то что конкретный программист вообще перестает следить за тем что делает, никаким языком не лечится.
| |
|
4.40, Аноним (-), 19:56, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Не надо ничего делать, классических утечек
А что такое классическая утечка памяти? И чем отличается от НеКлассической (tm)?
> итак нет, а то что конкретный программист вообще перестает следить за тем что
> делает, никаким языком не лечится.
Внезапно. Оказывается, если вы где-то продолбали некую сущность - она будет висеть в памяти и жрать ее. При том не так уж важен ЯП и конкретная модель управления памятью. Надо же, сюрприз! :)
p.s.: жила была приблуда. Юзала extJS. Ну так вот, за ночь клала любой браузер. Забыли вкладку? Чпокс - браузер жрет под 2Гб памяти через 8 часиков :)
| |
|
5.51, Аноним (-), 20:39, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | Вон там ниже по этому поводу уже было Утечка утечке рознь, сишных утечек т е ... большой текст свёрнут, показать | |
|
6.52, Аноним (-), 20:50, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
Ну т.е. разница грубо говоря в том что в первом случае человек ошибся с реализацией, а во втором даже и не собирался. Если в первом случае еще както можно ссылаться на сложность языка, то во втором уж чисто вина программиста. Когда у вас кролики с голоду подохли одно дело если у вас на покосе коса сломалась, может в нее вдруг молния ударила, не знаю, но совсем другое если вы даже и не выходили) Ну вот короче както так, надеюсь разница понятна. А результат к сожалению конечно один.
| |
|
5.59, www2 (??), 21:25, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
>А что такое классическая утечка памяти? И чем отличается от НеКлассической (tm)?
Классическая - забыли освободить явным образом, а указатель уже нигде не хранится.
Не классическая - указатель доступен программе и указывает на область памяти, к которой программа больше никогда не обратится.
Ваш КО.
| |
|
4.41, Аноним (-), 19:58, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> итак
Итак ... итак что? Поставьте ему двояк в четверти по русскому языку.
| |
|
|
2.9, Аноним (-), 22:46, 09/08/2012 [^] [^^] [^^^] [ответить] | +/– | Вообще ваш сарказм от незнания Нужно читать историю В реальности, JavaScript я... большой текст свёрнут, показать | |
|
3.12, Xasd (ok), 23:06, 09/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
>>Сейчас 95% яваскриптеров поделит на ноль
> Вообще ваш сарказм от незнания. Нужно читать историю. В реальности, JavaScript является
> более совершенным языком, чем даже джава. ...
верно-то оно верно (javascript более програссивный и сложный (гибкий) чем java) -- но вот только много-ли современных школо-программистов об этом знает? :-)
чать людей кто пишет на javascript -- даже не понимают суть прототипов.
| |
3.13, VoDA (ok), 00:13, 10/08/2012 [^] [^^] [^^^] [ответить]
| +2 +/– |
> Архитектура JavaScript позволяет перееопределять
> объекты в реальном времени, а не втискиваться в узкие рамки типизации.
Для больших приложений это минус. Как сделать контракт между подсистемами, развиваемыми в разных командах или даже компаниях? Как проверить, что вызывающий код прислал объект правильного типа?
А никак - только рантайм проверки, что требуемые переменные заданы в рамках пришедшего объекта. Только эта проверка очень прожорлива. Можно, конечно, положиться на авось, но обычно это выстреливает багами в самый не подходящий момент.
PS java не идеал, но динамические языки имеют еще больше минусов.
| |
|
4.14, Школоло (?), 00:26, 10/08/2012 [^] [^^] [^^^] [ответить]
| –2 +/– |
>> Как проверить, что вызывающий код прислал объект правильного типа?
type of
Ваш, КО.
| |
|
5.19, dmrzh (?), 12:24, 10/08/2012 [^] [^^] [^^^] [ответить]
| –2 +/– |
>>> Как проверить, что вызывающий код прислал объект правильного типа?
> type of
> Ваш, КО.
Тогда код будет пестрить проверками type of, особенно если ты пишешь библиотеку и кто угодно может вызывать твой код.
Когда это же делает компилятор, и ешё сразу в среде разработки подсвечивается ошибки в случае неправильного кода - намного приятнее и удобнее. И естественно код более надёжный.
| |
|
6.23, Аноним (-), 14:13, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Тогда код будет пестрить проверками type of
Будто в статическом коде этого нет, а с учетом описаний явной типизации так и того возможно больше.
| |
|
7.29, VoDA (ok), 15:24, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
>> Тогда код будет пестрить проверками type of
> Будто в статическом коде этого нет
при статической типизации type of в 95% не нужен - тип описывается типом переменной или парметра. оставшиеся 5% это универсальный код, которых работает с AST или делает downcast.
в отличии от этого в динамических языках придется или верить в то, что код работает с правильными типами (возможно для малых приложений или небольших скриптов) или фаршировать код пачками type of.
| |
|
8.31, Аноним (-), 15:41, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | Верить в то, что код работает с правильными типами можно не только в малых прило... текст свёрнут, показать | |
|
9.35, VoDA (ok), 16:53, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– |  Собственно размер этого входа в больших приложениях - огромен Покажи плиз прим... текст свёрнут, показать | |
|
|
11.38, VoDA (ok), 18:35, 10/08/2012 [^] [^^] [^^^] [ответить] | –1 +/– |  Собственно как я и предполагал Собственно вместо того, чтобы компилятор проверя... текст свёрнут, показать | |
|
12.39, Аноним (-), 19:22, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | А то у вас так частенько не делается, да еще плюс своих косяков с метатипами и ш... большой текст свёрнут, показать | |
|
|
|
|
|
7.43, Аноним (-), 20:01, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Будто в статическом коде этого нет,
Нет, потому что компилятор мозг вынесет. И форсить преобразвания типов надо явно. Четко понимая что делаешь. А вот JS вообще довольно раздолбайский по синтаксису язык. И на типы пофиг, и переменные без декларации может объявлять.
...по поводу чего в самом интересном месте вылезает подлый баг. Который к тому же хрен поймаешь. Что очень доставляет крупным проектам.
| |
|
8.46, Аноним (-), 20:12, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | В вашем может и нет, а мне приходилось ковырять статику в которой такого хватает... текст свёрнут, показать | |
|
9.54, Аноним (-), 20:57, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | В случае статики надо как минимум возжелать прострелить себе пятку То что это с... большой текст свёрнут, показать | |
|
|
11.67, Аноним (-), 22:25, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | Так чтобы были вообще одни минусы - это надо сильно постараться Даже у brainfuc... большой текст свёрнут, показать | |
|
|
|
|
|
|
5.25, VoDA (ok), 14:58, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
и вы предлагаете на каждый параметр в каждой функции вешать
псевдокод:
if(! obj type of SomeType) throw exception;
?
и это удобство динамической типизации?
| |
|
6.30, Школоло (?), 15:25, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
Только в том случае, если вы не умеете писать код, использующий динамическую типизацию..
| |
|
7.36, VoDA (ok), 16:55, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Только в том случае, если вы не умеете писать код, использующий динамическую
> типизацию..
Ок. Покажи пример как правильно писать интерфейсный код используя динамическую типизацию.
Пусть будет простая функция с одним параметром-объектом, который содержит ФИО + тип документа + идентификатор документа (номер паспорта для паспорта).
И как будет поймана ошибка в вызывающем коде, если название поля фамилия было отрефакторено на другое (lastname -> soname).
| |
|
|
|
4.20, Xasd (ok), 12:58, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Для больших приложений это минус. Как сделать контракт между подсистемами, развиваемыми в разных командах или даже компаниях? Как проверить, что вызывающий код прислал объект правильного типа?
как раз приложения и становятся большими -- потомучто эти интерпрайзные программы на интэрпрайзных языкы программирования (со статической типизацией) -- содержат хренову тучу кода всяких интерфейсов для типовго согласования... если всё это дерьмищще поудалять то сразу оказывается что программа-то маленькая.
и главное возникает вопрос -- а почему вдруг в какуюту функцию передастся объект неправильного типа? потомучто кто-то забудет сделать parseFloat() после document.querySelector() ??? тыг вот такая говноошибка будет сразу замечена при первом тестировании :) !! а другую более серьъёзную ошибку допустить очень трудно при утиной типизации.
| |
|
5.26, VoDA (ok), 15:00, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> как раз приложения и становятся большими -- потомучто эти интерпрайзные программы на
> интэрпрайзных языкы программирования (со статической типизацией) -- содержат хренову
> тучу кода всяких интерфейсов для типовго согласования... если всё это дерьмищще
> поудалять то сразу оказывается что программа-то маленькая.
Да, объем кода реализации контрактов уменьшится. Зато увеличится трудоемкость проверки правильности входящих параметров. Т.е. интерфейсы без кода заменятся на код в КАЖДОЙ функции доступной из вне. Удобно - фигли )))
| |
|
6.32, Аноним (-), 15:52, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
Вполне удобно, то время которое тратиться на написание проверок компенсируется временем на их выражение в чисто декларативном интерфейсе, плавали, знаем, то там не срастается, то сям, и приходится сидеть и чесать репу, время также уходит.
| |
|
7.55, Аноним (-), 20:58, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> не срастается, то сям, и приходится сидеть и чесать репу, время также уходит.
Лучше получить очевидный отлуп компилера с тычком в проблемное место чем отхватывать через полдня работы программы какой-то нифига не очевидный баг который вообще фиг знает в каком месте вон той простыни порылся.
| |
|
|
9.66, Аноним (-), 22:19, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | Си вообще не то чтобы строго типизированный ЯП Его типы - по сути просто compil... большой текст свёрнут, показать | |
|
|
|
|
5.27, VoDA (ok), 15:07, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> и главное возникает вопрос -- а почему вдруг в какуюту функцию передастся
> объект неправильного типа? потомучто кто-то забудет сделать parseFloat() после document.querySelector()
> ??? тыг вот такая говноошибка будет сразу замечена при первом тестировании
> :) !! а другую более серьъёзную ошибку допустить очень трудно при
> утиной типизации.
Потому что контракт изменился. Функция принимает на вход объект с полями firstname, secondname, soname (так обозвали ФИО) + passportNumber. Библиотека была доработана и поле фамилии было переименовано из soname в lastname. В java эта ошибка будет выявлена в момент компиляции зависимых проектов - compilation error поскольку старого поля просто нет.
В JS код пройдет валидацию и будет запущен (что ошибка дошла до рантайма уже плохо), но баг может и не проявиться, а ошибка может выскочить внутри библиотеки или, что еще хуже, будет использоваться пустое значение вместо Фамилии.
Статическая типизация тоже не идеал, но проблему согласования типов и полей она решает просто. Плюс рефакторинг поверх статически типизируемых языков работают намного лучше.
| |
|
6.34, Аноним (-), 15:57, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Статическая типизация тоже не идеал, но проблему согласования типов и полей она
> решает просто. Плюс рефакторинг поверх статически типизируемых языков работают намного
> лучше.
Ни чем не проще, пишу и на статических и на динамических языках, в общем разницы нет, просто применяются разные подходы, зато динамические при некоторых условиях позволяют лишний раз не напрягаться.
| |
|
7.44, Аноним (-), 20:03, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> некоторых условиях позволяют лишний раз не напрягаться.
А в некоторых - могут заставить изрядно пое...ся с поимкой нифига не очевидного бага, который бы иначе пристрелил на корню компилер, чекавший типы при сборке.
| |
|
8.49, Аноним (-), 20:17, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | Могут, да но на практике мне например на том же перле писать да и поддерживать ... текст свёрнут, показать | |
|
9.57, Аноним (-), 21:00, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | Дельфя как и паскаль может быть излишне занудны Но к порядку приучают хорошо В... текст свёрнут, показать | |
|
|
|
|
|
|
|
|
1.3, добрый дядя (?), 21:32, 09/08/2012 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
О яваскрипте лишь крайне мало знаю, но был уверен что слова утечка и яваскрипт не могут быть в одном предложении...
| |
|
2.5, Andrey Mitrofanov (?), 22:20, 09/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
Джавваскриптерам мешают джавваскрипт библиотеки! Ну, то есть не са-а-ами библиотеки, а привязка объектов к структурам данных библиотек. Понимаете?!! Вот так всё непросто.:'(
| |
|
3.28, Аноним (-), 15:12, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
Утечка утечке рознь, сишных утечек (т.е. когда программист сказал что объект ему не нужен - убрал/обнулил ссылку, но память при этом не освободил) в JS нет, а вот когда он совсем не чешется (никак не сообщает о том что данные ему больше не нужны и это невозможно выяснить логически - не очищает уже не нужные списки, не закрывает файлы и т.п.) тогда да, всеравно получается утечка, другого рода как понимаете, но результат тот же.
| |
|
4.47, Аноним (-), 20:15, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Утечка утечке рознь, сишных утечек
Да, ежу понятно что в яваскрипте не может быть сишных утечек. Хотя-бы потому что JS != C :)
| |
|
|
2.7, Xasd (ok), 22:24, 09/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> О яваскрипте лишь крайне мало знаю, но был уверен что слова утечка
> и яваскрипт не могут быть в одном предложении...
function xxx() {
// ...
obj.addEventListener(a, b)
// ...
}
теперь при каждом вызове xxx() -- будет утечка ресурсов...
ну а вообще можно и такое сделать:
var my_list = []
function yyy(a) {
// ...
my_list.push(a)
// ...
}
вот вам и типичная утечка памяти, при каждом вызове yyy(), если my_list не чистится
вобщем -- даже самый крутой сборщик мусора -- не сможет быть исскуственным интеллектом, исправляющим ошибки
а новомодная функция ''objectURL = window.URL.createObjectURL(file);'' -- это вообще рай для мусора :-)
| |
|
3.8, Аноним (-), 22:44, 09/08/2012 [^] [^^] [^^^] [ответить]
| +1 +/– |
>теперь при каждом вызове xxx() -- будет утечка ресурсов...
Извините, но это утечка мозга.
| |
|
4.10, Аноним (-), 22:47, 09/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
>>теперь при каждом вызове xxx() -- будет утечка ресурсов...
> Извините, но это утечка мозга.
Возможно стоило дальше расписать пример, что представляют из себя a и b?
| |
|
5.11, Xasd (ok), 22:59, 09/08/2012 [^] [^^] [^^^] [ответить]
| +1 +/– |
> Возможно стоило дальше расписать пример, что представляют из себя a и b?
я и сам не знаю :-D
..просто предположил что если очень быстро печатать код -- то можно случайно такое написать :-D :-D
| |
|
4.48, Аноним (-), 20:16, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Извините, но это утечка мозга.
То же самое можно сказать и про иные утечки памяти :)
| |
|
5.56, Аноним (-), 20:59, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
Да не скажите, одно дело если человек ошибся из за сложности структуры и особенностей языка, и совсем другое если он откровенно положил.
| |
|
6.58, Аноним (-), 21:03, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
> Да не скажите, одно дело если человек ошибся из за сложности структуры
> и особенностей языка, и совсем другое если он откровенно положил.
Знаете, в простых случаях на си тоже сложно откровенно положить :)
Более того - явная аллокация памяти например позволяет ловить ошибки выделения этой самой памяти. В си если мы хотим блок на 100500 мегов который быть в принципе и не обязан - можно посмотреть: реально такое получить или облом. И сбой выделения можно поймать. А что в JS будет? Ну в общем по этому поводу он и пригоден для написания всякой развлекательной фигни. А например для системных дел где надежность нужна - не подойдет никогда.
| |
|
7.62, Аноним (-), 21:50, 10/08/2012 [^] [^^] [^^^] [ответить]
| +/– |
Вы таки не поверите, юзается у меня для сбора инфы с контроллеров контроля доступа на режимном предприятии, и ниче, всех устраивает, а на сях писать некому.
| |
|
8.63, Аноним (-), 22:12, 10/08/2012 [^] [^^] [^^^] [ответить] | +/– | Я и не сомневался что совковые предприятия не готовы платить нормальным спецам ... текст свёрнут, показать | |
|
|
|
|
|
|
2.15, XoRe (ok), 01:37, 10/08/2012 [^] [^^] [^^^] [ответить]
| –1 +/– |
> крайне мало знаю
> но был уверен
Как мило)
Вот, спорим, в разговор двух преподов вы с такими словами не вклинитесь?
| |
|
1.16, Анонимусс (?), 08:21, 10/08/2012 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– |
Ничего вы не понимаете - это не утечки, это особенность такая! Надо просто чаще нажимать F5 и все будет хорошо. И компьютер после рабочего дня выключать (из розетки)
| |
|