Страница: 1 | 2 |
Вопрос: Давайте помечтаем
Добавлено: 07.08.04 22:47
Автор вопроса: Sharp | Web-сайт:
Ответы
Всего ответов: 28
Номер ответа: 16
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #16
Добавлено: 09.08.04 12:04
Хм... а вот мне бы очень хотелось той же гибкости оператора For, что и в Си... Местами бывает очень удобно
Номер ответа: 17
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #17
Добавлено: 10.08.04 06:19
Как насчет "перегрузки" оператора For, можно использовать более читабельный оператор
For i=0 To n
Next
а можно более мощный
For(i=0;i<=n;i=i+1)
Next
Не помешали бы, имхо, операторы инкремента и декремента, операторы сокращеных действий типа +=, *=, возможность использования вместо Or, Not и Mod ||, ! и % соответственно также придала бы Бейсику солидности (хотя и убрала читабельности). Sne, пожалуй, наиболее правильно понял мою мысль: какие нововведения в самом языке вы ждали, с сохранением обратной совместимости.
Номер ответа: 18
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #18
Добавлено: 10.08.04 12:28
Забыл еще и &&, хотя, честно говоря, мне это не очень нравится... Словами прикольней
Номер ответа: 19
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #19
Добавлено: 10.08.04 12:49
Мне тоже не нравится, но пример этого типа я упомянул. Но побитные логические операции ни в коем случае нельзя оставлять операторами - тупее ничего нельзя придумать. Только функциями, пусть даже инлайн.
Номер ответа: 20
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #20
Добавлено: 10.08.04 13:39
Неплохо было бы еще сделать нормальной работу с указателями... Хотя при этом чтобы обратиться к массиву, прийдется предварительно посмотреть описание структуры SAFEARRAY... Но для байтовых массивов, указатели, самое милое дело...
А так же не помешали бы встроеные функции прямого копирования памяти, так заботливо убраные в VB, микрософтами...
Номер ответа: 21
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #21
Добавлено: 11.08.04 04:59
Мне кажется, что сишный вариант типа &t и *p несколько нечитабелен. Не сразу можно понять, что обозначает *n*=*n**n**n; Наверно, если бы операторы выглядели примерно так: ptr(x) и var(p), было бы попонятнее. Тогда можно было бы убрать ByVal и ByRef и передавать, например, так:
MessageBox 0,ptr(strText),ptr(strCaption),MB_OK
Хотя, пожалуй, для строк следует все-таки сделать автоматическую передачу... Над этим еще можно подумать. Однако MemCopy, действительно, было бы очень полезной функцией. В случае с SAFEARRAY меня беспокоит пара вещей: с точки зрения безопасности (а все мы знаем, что Си этой точки зрения совсем не блещет) SAFEARRAY все-таки предпочтительнее, недаром ошибки переполнения буфера в VB - почти нонсенс, но оперирование с массивами с помощью укаазателей в случае SAFEARRAY приводит к некоторым трудностям. Поэтому, наверно, должны сочетаться низко- и высокоуровневые конструкции. Например, введение двух типов массивов: SafeArray Long a(N) и просто Long a(N), причем в первом случае N может быть и переменной, но во втором - только константой. Таким образом, первое объявление более гибкое и безопасное, зато второе более быстрое. И конкретный выбор ляжет на плечи разработчика. Так же, видимо, следует поступать и со строками - представлять их как тот же массив, только с некоторыми дополнительными перегруженными операторами. Еще мне очень понравилась в C-- возможность возврата нескольких значений. Синтаксически это могло бы выглядеть так:
Func Fn1(x) As Long,Long
End Func
и вызов
s,p=Fn1(x)
Стоило бы ввести и самые низкоуровневые инструкции на уровне языка, например, вычисляемый вызов типа Call ptr(MyProc),x,y что равносильно MyProc(x,y), но без проверки (или с минимальной проверкой) типов данных.
Номер ответа: 22
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #22
Добавлено: 12.08.04 10:48
Еще чтобы были такие фичи (как в VB.NET сейчас):
0. Для возврата значения функции использовался оператор Return.
1. Синтаксис свойств был таким:
Public Property [ReadOnly|WriteOnly] MyProperty()
Get
...
End Get
Set (value)
...
End Set
End Property
2. Поддержка многопоточности на уровне языка (впрочем, и субклассинга
и хуков всяких тоже).
3. И, конечно же, структурированная обработка ошибок.
Так а чего мечтать, давайте напишем такой
Номер ответа: 23
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #23
Добавлено: 12.08.04 16:34
В первую голову нормально типы данных надо назвать.. А-то в VB6
несуразица с целочисленными типами имеется...
2Alex: я что-то не могу себе представить многопоточность на уровне
языка
Вообще в плане синтаксисиа меня полностью устраивает VB 2005.
2Sharp: переполнение буфера это серьезно... Я рад, что в VB этой
проблемы не бывает...
Номер ответа: 24
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #24
Добавлено: 12.08.04 17:00
>2Alex: я что-то не могу себе представить многопоточность на уровне
>языка
Так ведь точно также, как это реализовано в .NET.
Номер ответа: 25
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #25
Добавлено: 12.08.04 19:22
Язык - он и есть язык... Это набор ключевых слов, правил синтаксиса и
т.д.
А многопоточность реализована на уровне CLR.
Номер ответа: 26
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #26
Добавлено: 12.08.04 22:01
> Для возврата значения функции использовался оператор Return.
Не стоит забывать, что return (по крайней мере в Си) не только устанавливает возвращаемое значение, но и выходит из функции. Так что я оставил бы оба варианта.
Public Property [ReadOnly|WriteOnly] MyProperty()
Get
...
End Get
Set (value)
...
End Set
End Property
Объединить установку/получение значения свойства в одной процедуре мысль, конечно, неплохая, но зачем тогда ReadOnly|WriteOnly? Просто не писать соответственно Set или Get...
> Поддержка многопоточности на уровне языка (впрочем, и субклассинга и хуков всяких тоже).
На уровне языка - сказано довольно сильно. Поддержка параллельного исполнения на уровне языка - это я еще понимаю, но VB едва ли когда-нибудь будет позиционироваться, как язык для разработки программ для многопроцессорных систем...
> И, конечно же, структурированная обработка ошибок
Да, try-except-finally это все-таки несколько лучше, чем On error goto eh1. Также интересно было бы добавить прямое управление SEH.
> В первую голову нормально типы данных надо назвать.. А-то в VB6 несуразица с целочисленными типами имеется...
Нельзя ли поподробнее?
> Я рад, что в VB этой проблемы не бывает...
Не, ну в принципе и кролика можно научить курить...
Могу добавить концепцию подключаемых препроцессоров Т.е. программа состоит не только из своего кода, но еще и из препроцессоров, которые этот код обрабатывают. В результате может получиться нечто, что может иметь любой синтаксис и подходить для любого программиста, вплоть до того, что можно будет использовать классы и модули на любом алгоритмическом языке.
Номер ответа: 27
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #27
Добавлено: 12.08.04 22:16
>> В первую голову нормально типы данных надо назвать.. А-то в VB6 несуразица с целочисленными типами имеется...
> Нельзя ли поподробнее?
Везде Int32 - Integer, в VB6 - Long
Везде Int16 - Short, в VB6 - Integer
Номер ответа: 28
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #28
Добавлено: 12.08.04 22:34
В Си long - Int32, int (по ANSI) - Int16. Поэтому я склонен считать, что названия традиционные. Хотя неплохо было бы добавить псевдонимы word и dword, почти не допускающие двояких толкований. А чрезмерно длинное unsigned сократить до изящного U
Типа UDWORD, UWORD, DWORD, WORD.
Где действительно путаница, так это с числами с плавающей запятой. Малоизвестно, как реализуются сишный float, вбшный single и double, паскакалевские real и extended.