Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А с каких это пор все массивы стали статическими и все индексы и размеры - тоже?
Так как практически всегда массивы динамические, индексы - переменные, то никаких серьезных статических проверок в момент вызова сделать нельзя. Остается делать только проверки на основе метаинформации/rtti и именно поэтому так важно иметь доступ ко всему объекту/описанию, а не работать на авось с куском памяти.
Тэкс. Давайте по порядку. Для статических массивов всё легко проверяемо при компиляции, так?
Для динамических (которые есть скрытые объекты!), есть метаинформация в рантайме, так? Есть! Безусловно есть.
Осталось только прописать ран-тайм проверки в исполнимом коде компилируемой функции. И всё!
И я не говорю что это плёвое дело. Ну так и Слава (Stringo) тоже ведь не лыком шит. И вообще, кому сейчас легко?.. :)
// В конце концов: в четвёрке это всё сделано.
// Если уже сделали динамические массивы, так используйте метаинформацию которую они всюду с собой таскают!
// Имея её можно вообще делать чудесные вещи (типа позволения юзеру передавать массивы неизвестной размерности).
// А у вас в mql5(!) нельзя даже двумерный массив с обоими неизвестными сайздименшнз передать в функцию.
// Даже в антикварной жабе и то можно.. :))
Не беспокойтесь, все давно продумано.
Последствия нарушения принципов защиты мы отлично знаем - это путь "в апреле исправили еще 12 критических ошибок, позволяющих вырваться за пределы виртуалки и получить контроль над системой".
1. Так я и предложил ввести поименование и следовательно жёсткую типизацию. Тем более, что это единственное место не охваченное именной типизацией, следовательно хорошо вписывается в идеологию универсализации сущностей языка.
2. Тоже делаю. Всё равно: во первых криво, во вторых неуниверсально ни разу. Вот предложите способ (1) копирования двумерного mql-массива в буфер ОпенЦЛ без лишнего переписывания и заворачивания в структуры. Или (2) использования (в целях скорострельности) вашей же функции ArrayCopy(..) для неодномерных массивов.
// Извините зе резкость предыдущего поста. Действительно излишне. Возбудился на "не будем усложнять". Поскольку как раз ведёт к сложностям.
2а. Я думаю, что во многих случаях ваше "ограничение на одномерность" для функций подобных ArrayCopy() можно безболезненно ослабить при помощи одной элементарной оговорки в комментах: "Функция работает и с многомерными массивами, при условии, что многомерный массив копируется целиком."
Много проблем бы отпало. // Но не все, конечно.
Тут два пути, один копировать отдельно одномерные массивы, но это не есть гуд, тк OCL интерфейс будет завален массивами,
и второй путь представлять одномерный массив как двумерный, он ведь в OCL всё равно лентой передаётся. Тогда как то так. Кстати сами перемещения данных при изменении размерности можно сделать в OCL через копирование части массива, всё зависит от размеров, насколько это рентабельно.
Тут два пути, один копировать отдельно одномерные массивы, но это не есть гуд, тк OCL интерфейс будет завален массивами,
и второй путь представлять одномерный массив как двумерный, он ведь в OCL всё равно лентой передаётся. Тогда как то так. Кстати сами перемещения данных при изменении размерности можно сделать в OCL через копирование части массива, всё зависит от размеров, насколько это рентабельно.
Вот всего этого я как раз и наелся досыта. :) Оккам бьётся в истерике..
;)
Вот есть у меня двумерный массив. Есть его sizeof(My2DArray). Ну чего ещё надо для копирования в буфер??? Все равно мне никто там даже смещение в моём массиве не предусмотрел переменным сделать. Так нет. Нужно сначала его переписать (что приводит к тормозам), либо написать собственный двумерный массив. (!!) Ну зашибись. И зачем это? А чтоб мне безопасно было. (!) Всё, ржунимагу. :)))
Вот всего этого я как раз и наелся досыта. :) Оккам бьётся в истерике..
;)
:))
Да честно говоря накладные расходы по изменению размера огроменные, но применяя OCL для этих дел можно их урезать.
Зато прямое копирование двумерного массива в OCL буффер.
И я бы не советовал переразбивать массив на каждом чихе.
А так вполне применибельно.
Вот всего этого я как раз и наелся досыта. :) Оккам бьётся в истерике..
;)
Да ладно тебе многа букаф, три функции set get и Resize
ЗЫ специально для тебя накропал, на коленках, пока ты тут хилосохствувал.
Да ладно тебе многа букаф, три функции set get и Resize
Ну клёво, кто спорит. Вот ещё когда нам перегрузку операторов сделают (и не забудут при этом оператор "[ ]" сделать презгужаемым, тады ваше лафа. Будем в маркете торговать своими динамическими массивами. И будут брать! А кто не возьмёт - отключим газ передачу многомерных массивов в функции. :)
Не забудем ;)
Вот есть у меня двумерный массив. Есть его sizeof(My2DArray). Ну чего ещё надо для копирования в буфер??? Все равно мне никто там даже смещение в моём массиве не предусмотрел переменным сделать. Так нет. Нужно сначала его переписать (что приводит к тормозам), либо написать собственный двумерный массив. (!!) Ну зашибись. И зачем это? А чтоб мне безопасно было. (!) Всё, ржунимагу. :)))
Уважаемый, следите за контекстом.
1) Когда Вы из одной контролируемой и безопасной среды прыгаете в абсолютно неконтролируемый сырой буфер, то именно Вы отвечаете за совместимость с той бинарной средой.
2) Когда Вы пишите код, то именно Вы отвечаете за архитектуру этого кода. И не надо плакаться, что "трудно впрячь коня и трепетную лань в одну телегу" при использовании разных структур.
3) Рекомендую прочитать описание CLBufferRead и CLBufferWrite - за счет универсальной void* ссылки есть возможность передачи в OpenCL ссылки любого типа. Причем есть и смещения и размеры.
Я вижу, что тема просто высосана из пальца.