Почему Майкрософт отказывается возродить VB6 ?

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Почему Майкрософт отказывается возродить VB6 ?

Сообщение jangle » 16.10.2014 (Чт) 17:23

Совершенно не реагируют на стоны общественности:

http://visualstudio.uservoice.com/forum ... oved-versi

http://blogs.msdn.com/b/vbteam/archive/ ... lable.aspx

Зачем упорно развивать непопулярный VB.NET? Ведь есть мегапопулярный C# который делает существование VB.NET бессмысленным.
Для меня это загадка...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 16.10.2014 (Чт) 17:27

Всех надо пересадить на мобильные устройства, всё надо перенести в облака, скоро ничего не останется кроме тач-панелей и устройств виртуальной/дополненной реальности, надо обогнать Apple — вот что у них в голове и на уме.

А ты им про какой-то VB6 пишешь :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.10.2014 (Чт) 17:50

jangle писал(а):Почему Майкрософт отказывается возродить VB6 ?

А смысл его возрождать? Что в нём реально такого, из-за чего стоило бы использовать именно его? Жалко, конечно, но его время прошло...
Даже не буду про устаревание самого VB6 (типа проблем с юникодом, сомнительной средой и т. д.) - предположим, что это пофиксят в случае возрождения (даже несмотря на то, что в VBA среда такая же до сих пор).
У него очень мало возможностей из коробки: потоков нет, указателей нет, наследования нет (только реализация интерфейса), стандартная библиотека весьма маленькая.

jangle писал(а):Зачем упорно развивать непопулярный VB.NET?

И кто сказал, что он непопулярный? Вот специалисты из Майкросовта так не считают. Уже было обсуждение в блоге одного из создателей .NET'а (причём по сути оффтопное, в теме про именованные параметры в C#), где он утверждает, что он обладает данными о достаточной пупулярности VB.NET.

jangle писал(а):Ведь есть мегапопулярный C# который делает существование VB.NET бессмысленным.

Это скорее в тему к Dephi.NET, Python.NET и им подобным...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.10.2014 (Чт) 17:54

Хакер писал(а):Всех надо пересадить на мобильные устройства, всё надо перенести в облака, скоро ничего не останется кроме тач-панелей и устройств виртуальной/дополненной реальности

А вот этого мне бы точно хотелось избежать :)
И кстати, если всё будет мобильным, то останентся только джаваскрипт, а всё остальное, в том числе и VB6, и весь .NET, просто исчезнут...

Хакер писал(а):надо обогнать Apple

Это в каком смысле?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 16.10.2014 (Чт) 18:03

Qwertiy писал(а):Что в нём реально такого, из-за чего стоило бы использовать именно его?

COM-основанность. Много ли языков, в которых COM-класс — гражданин первого типа? И большая RAD-ность. Реально, прототип чего-то на нём написать быстрее, чем на чём-то другом. Пока среда для дотнета откроется и соизволит что-то скомпилировать, VB6 скомпилирует дважды. И уникальная фишка всей системы: компиляция кода во время написания кода, а не во время нажатии кнопки «компилировать». Засчёт чего: уникальная широта возможности переписывать код во время отладки.

Qwertiy писал(а):потоков нет

Есть. В ActiveX EXE. Да и сделать её поддержку в Standard EXE при наличии исходников — вообще ерундовое дело.
Только вот её специально не сделали, я полагаю, чтобы исключить возможность выстрелить себе в ногу.

Qwertiy писал(а):указателей нет

Есть. На сущности, для которых работает автоматическое управление памяти (объекты, массивы, строки, указатели на что-угодно в чужом стековом фрейме). А остальное не нужно — специально не сделали, чтобы исключить возможность выстрелить себе в ногу.

Qwertiy писал(а):наследования нет (только реализация интерфейса)

И не надо. На полном серьёзе. Почему это зло, тут уже неоднократно писали (нужно искать посты tyomitch-а). Просто сами подумайте, какового это — иметь диаграмму наследования (а по сути — диаграмму зависимостей одних реализаций от других реализаций) в условиях распределённой среды из множества разных версий серверов.

Каким-то образом драйверы Windows успешно работают, не используя то наследование, в том виде, в каком его вам не хватает в VB6. А разгадка проста: есть вещь, которая похитрее тупого наследования. Это паттерн «декоратор». Его использует модель драйверов (и вполне успешно). Его и нужно использовать тут, если вам не хватает наследования.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение jangle » 16.10.2014 (Чт) 19:28

А смысл его возрождать?


За нативный код и высокую скорость работы я готов простить ему все. C# неуклюжий тормоз по сравнению с VB.
Но отсутствие 64-битного компилятора окончательно сводит VB6 со сцены.
Просто потому, что надо вызывать 64-библиотеки и писать COM DLL для вызова 64-битными процессами

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Debugger » 16.10.2014 (Чт) 20:55

У общественности сложилось достаточно негативное отношение к Бейсику. Почему - не знаю.

Считаю, что у Бейсика нет равных, если требуется написать мелкую утилиту/программу, на 99% состояющую из GUI/разовые программы.

Хакер писал(а):Это паттерн «декоратор».

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

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.10.2014 (Чт) 23:19

Хакер писал(а):COM-основанность. Много ли языков, в которых COM-класс — гражданин первого типа?

На .NET тоже можно создавать COM-классы. На Си++ можно. Кажется Qt имеет какую-то систему взаимодействия с COM - точно не знаю.
А так, чтобы COM был прям основой языка - не знаю. Возможно, делфи. Но оно точно не замена VB6 :)

Хакер писал(а):И большая RAD-ность. Реально, прототип чего-то на нём написать быстрее, чем на чём-то другом.

Что подразумевается под прототипом? Написать что-то большее, чем просто интерфейс совсем не быстрее. По крайней мере мне.

Хакер писал(а):Пока среда для дотнета откроется и соизволит что-то скомпилировать, VB6 скомпилирует дважды.

Только вот скорость разработки зависит не от скорости запуска среды и компиляции.

Хакер писал(а):И уникальная фишка всей системы: компиляция кода во время написания кода, а не во время нажатии кнопки «компилировать».

Помню, ты рассказывал про неё. Но у неё не только плюсы. Например, она даёт уникальную возможность написать такой код, что он будет корректно работать только до закрытия среды. А при последующем открытии проекта и перекомпиляции всё поломается.
И ещё. Она уже не совсем уникальная. Новый компилятор .NET'а - Roslin - тоже строит деревья (2 дерева, насколько я помню) и предоставляет api для их обработки. И кстати, он теперь с открытым исходным кодом.
Да, чуть не забыл. В новом VB.NET в ближайшее время появятся многострочные строковые литералы. Не то чтобы мне они были нужны, но просто вспомнил те твои утверждения про зону изменений.

Хакер писал(а):уникальная широта возможности переписывать код во время отладки.

32-битные программы можно изменять во время отладки на всех языках, достыпных в VS.
64-битные - в VS2012 и более ранних было нельзя, есть подозрение, что в 2013 уже можно, но точно сказать не могу.

Хакер писал(а): Да и сделать ... поддержку ...

Сделать можно всё. Особенно ты можешь сделать всё. Но я говорю именно о стандартных возможностях, а не о варианте, когда надо сначала ооочень постараться, чтобы что-то получить, а потом этим пользоваться.
Ну и не понятно, как я указатели на функции (ну или делегаты) забыл - их тоже нет. Даже в джаву добавили.

Хакер писал(а):И не надо. На полном серьёзе. Почему это зло ...

Ну вот просто не могу согласиться. Вовсе не обязательно писать так, чтобы нагородить огромные запутанные иерархии. Но наследование полезно и это должно быть очевидно.
А декоратор - это громоздкая штука, которая не всегда оправдана.

Хакер писал(а):Каким-то образом драйверы Windows успешно работают

Эм.. Что-то я не слышал, чтобы их на VB6 писали. Си и Си++ же, не?

jangle писал(а):За нативный код и высокую скорость работы я готов простить ему все. C# неуклюжий тормоз по сравнению с VB.

Кажется, где-то были замеры, которые это отпровергают... Если ему не вычислительную задачу скармливать.
Вот нативный код - действительно плюс :)

jangle писал(а):Но отсутствие 64-битного компилятора окончательно сводит VB6 со сцены.

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

Debugger писал(а):У общественности сложилось достаточно негативное отношение к Бейсику. Почему - не знаю.

Согласен.

Debugger писал(а):Считаю, что у Бейсика нет равных, если требуется написать мелкую утилиту/программу, на 99% состояющую из GUI/разовые программы.

И почему для этого же не подходит VB.NET?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 17.10.2014 (Пт) 5:33

Qwertiy писал(а):На .NET тоже можно создавать COM-классы. На Си++ можно. Кажется Qt имеет какую-то систему взаимодействия с COM - точно не знаю.


Ты не поверишь, но и на ассемблере можно. А особо упоротые (намекаю на себя) могут меняя циферки в хекс-редакторе тоже сделать COM-класс. Только речь не о том, что что-то осуществимо. Да, на Си++ осуществимо. И на си без плюсов осуществимо. И на .net.

Но это не граждане первого класса в этих языках. И реализация на С++ заставить тебя плакать кровавыми слезами.

Вот, знаешь же, что такое «языковая панель»? Или «панель быстрого запуска»? Или вот в проводнике бывают панели (там где меню, адресная строка). Написать на VB6 такой extension для проводника/IE — дело пять минут. Подключил TLB-шку, реализовал несколько методов, скомпилировал, зарегистрировал — готово.

А теперь попробуй реализовать панельку на С++. У тебя полтыщи строк уйдёт только на супплементарные вещи, без какой-либо логики.

Qwertiy писал(а):32-битные программы можно изменять во время отладки на всех языках, достыпных в VS.

В таких широких пределах, в каких это позволяет VB6 — ничего нового из новых VS не предоставляет. Это же надо круто перекомпилировать программу на ходу, что является нетривиальной задачей.

Хороший показатель — immediate pane. Где-нибудь в новых C#/VB.NET есть? Нет, и быть не может. Это-ж надо компилировать программу. А в VB/VBA это возможно, потому что весь код уже практически предскомпилирован, а при попытке вызвать что-то, нужная часть будет скомпилирована (и потом остальной код будет дальше компилироваться on-demand). Можно вызвать отдельно взятую процедуру и проверить её работу. Единожды скомпилировавшись до конца, эта процедура даже будет жить внутри IDE в полностью скомпилированном виде, пока её модифицируют. Можно всю IDE использовать даже не для создания программ, а как некую командную строку для каких-то своих работ с командами-процедурами. Я так часто делаю.

Можно запускать программу, часть кода которой не дописано или содержит ошибки. Если выполнение не дойдёт до этих мест, остальная часть успешно отработает. Кто ещё так умеет?

Qwertiy писал(а):Сделать можно всё. Особенно ты можешь сделать всё. Но я говорю именно о стандартных возможностях, а не о варианте, когда надо сначала ооочень постараться, чтобы что-то получить, а потом этим пользоваться.

Не-не-не-не. Я не говорю тут про сорта моей личной «особой магии», с помощью которой я делаю разные штуки. Я говорю с позиции разработчиков VB6, у которых есть исходный код. Вот там везде LPTSTR, например, в коде, который макрос, который раскрывается либо в LPSTR либо в LPWSTR, в зависимости от другого макроса. Поменяли — и у нас все строки LPWSTR. И API-функции вызываются в W-шных воплощениях. И конвертация отвалилась (нормальные программисты обернули бы её в #ifdef-ы). Точно так же при наличии исходников легко дать возможность создавать новый VB-поток. Это мой кирпич супер-сложен, потому что он ищет в рантайме неэкспортируемые функции и структуруы, и вообще рассчитан на поддержку всех версий рантайма (включая VB5), и даже работу процесса в состоянии, когда в АП подгружено сразу куча разных версий рантаймов (за счёт SxS или трюка с переименованием DLL). А имея исходники — раз плюнуть.

Qwertiy писал(а):Ну и не понятно, как я указатели на функции (ну или делегаты) забыл - их тоже нет.

Да потому что это зло в рамках идеологии, которой придерживались создатели.

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

Иными словами, в рамках ООП вам никогда не нужен указатель на функцию: вы и в этом случае должны оперировать указателя на объекты. Просто оборачиваете вашу функцию в объект, а у вас уже не указатель на функцию, а ссылка на объект, как обычно. Это каноническое идеологически правильное решение в рамках этой идеологии. И оно работает. А для обратной совместимости с идеологически-неверной кодовой базой они сделали AddressOf.

Я делаю здесь выводов или оценок, насколько это хорошо или плохо. Но я говорю, что есть идеология, и они её соблюдали при проектировании, и хотели, чтобы мы соблюдали при написании кода. Идеология работает в рамках своей применимости. Кстати, давно хочу написать топик насчёт функций-объектов.

Qwertiy писал(а):Эм.. Что-то я не слышал, чтобы их на VB6 писали. Си и Си++ же, не?

Да какая разница? В VB есть классы, но нет классического наследования. В Си нет классов вообще и наследования тем более.
Тем не менее, на Си успешно пишут драйверы с использованием упомянутого паттерна проектирования. Что я призываю делать и в VB. Всё ядро Windows написано на Си, и тем не менее, оно объектно-основанное. И в Linux с ядром та же история.

Приведу цитату из одного Линуксовского манифеста:
http://www.tux.org/lkml/#s15-3 писал(а):
  • Should the kernel use object-oriented programming techniques? Actually, it already does. The VFS (Virtual Filesystem Switch) is a prime example of object-oriented programming techniques. There are objects with public and private data, methods and inheritance. This just happens to be written in C. Another example of object-oriented programming is Xt (the X Intrinsics Toolkit), also written in C. What's important about object-oriented programming is the techniques, not the languages used.


Думаю понятно и без перевода.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 17.10.2014 (Пт) 5:38

Debugger писал(а):Если у класса десяток методов, и отдекорировать тебе нужно один, то код будет состоять из большого количества повторяющихся сегментов, проталкивающих вызов вниз по цепочке декорирования. Если понадобится изменить сигнатуру метода, или добавить ещё один, или сделать любое нечто в базовом классе, которое абсолютно не касается декораторов, то всё равно придется перелопачивать декораторы.


А как ты хочешь поменять сигнатуру метода класса-предка, чтобы это было незаметно для классов потомков? Разумеется, с ранним связыванием это не может обойтись без перекомпилирования кода потомков. Поэтому то наследование реализации в COM объявили злом.

Если же речь не о раннем связывании по VTable, а о позднем, то задача проталкивания решается единожды на уровне IDispatch::Invoke.

Ещё раз: драйверы в Windows только и делают, что выполняют какую-нибудь мелкую вещь, а затем проталкивают задачу вниз к более низкоуровневым драйверам. Или разбивают её на подзадачи и отдают уровнем ниже. Они делают это без наследования в стиле class Class1 extends Class2. Но всё уже 20 лет работает, иначе ОС умерла бы в забвении.

Да и громоздкость — далеко не самое больше зло.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.10.2014 (Пт) 10:30

Хакер писал(а):Ты не поверишь, но и на ассемблере можно.

Я не об этом. Да, для .NET'а COM-классы не являются основой. Тем не менее там есть возможность создания COM-классов из коробки:
Add COM-class.png
Add COM-class.png (59.69 Кб) Просмотров: 9489
При этом генерируется вот такой код:
Код: Выделить всё
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1

#Region "Идентификаторы COM GUID"
    ' Данные GUID обеспечивают идентификацию COM для данного класса
    ' и его COM-интерфейсов. При их изменении существующие
    ' клиенты потеряют доступ к классу.
    Public Const ClassId As String = "35b51c35-0aea-4d1d-9cae-ff0fd7c0a13a"
    Public Const InterfaceId As String = "39710936-c3de-439d-a48f-769606f64e1d"
    Public Const EventsId As String = "906993b4-ce88-42bb-9c6f-ef7c99e3041c"
#End Region

    ' В классе COM, для которого разрешено создание, должна присутствовать процедура Public Sub New()
    ' без параметров, иначе класс не будет
    ' зарегистрирован в реестре COM и его будет невозможно создать
    ' посредством CreateObject.
    Public Sub New()
        MyBase.New()
    End Sub

End Class
с предупреждением
Предупреждение 1 Классу "ComClass1" назначен Microsoft.VisualBasic.ComClassAttribute, однако "ComClass1" не имеет открытых членов, которые могут быть использованы через COM, поэтому COM-интерфейсы не созданы. E:\...\VB.NET\Test - VB.NET Console app\ComClass1.vb 2
которое исчезает при добавлении публичного метода.

Хакер писал(а):Хороший показатель — immediate pane. Где-нибудь в новых C#/VB.NET есть? Нет, и быть не может.

Эм.. Есть. И единственное ограничение на неё (как и на watch) - запрет на использование лямбда-функций в выражениях.
Immediate.png
Immediate.png (46.27 Кб) Просмотров: 9489
Правда, я тут немного накосячил, пока скармливал ей некоторые выражения, но это неважно.
А лямбд и анонимных типов в VB6 не было, так что невозможность это вычислить тоже не относится к теме.

Хакер писал(а):Я говорю с позиции разработчиков VB6, у которых есть исходный код.

Исходников чего? Что-то я не понял эту мысль.

Хакер писал(а):Да потому что это зло в рамках идеологии, которой придерживались создатели.

Я не спорю, что это в рамках идеологии. Но какие ещё популярные языки придерживаются такой идеологии? Раньше можно было назвать Джаву, но теперь даже в ней от этого отказались.

Хакер писал(а):Всё ядро Windows написано на Си, и тем не менее, оно объектно-основанное.

Не знаю, что уж там внутри ядра, но в winapi объектноориентированностью как-то даже и не пахнет...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 17.10.2014 (Пт) 10:46

Qwertiy писал(а):Я не об этом. Да, для .NET'а COM-классы не являются основой. Тем не менее там есть возможность создания COM-классов из коробки:

О том, о том. Основаную мысль я подчеркнул. Где ещё язык, где есть просто класс (без уточнений и особых режимах), и он по умолчанию оказывается COM-классом со всеми плюшками (dual-ный, с автогенерацией TLB)?

То, что ты показываешь мне в дотнете, неужели не понятно, что это будет не-COM-класс, для которого инструмент подгонит соответствующую COM-обёртку, чтобы со стороны он выглядел как нормальный COM-класс. А в VB6 — самый настоящий COM-класс.

Qwertiy писал(а):Исходников чего? Что-то я не понял эту мысль.

При наличии исходников VB/VBA.

Qwertiy писал(а):Не знаю, что уж там внутри ядра, но в winapi объектноориентированностью как-то даже и не пахнет...

А что WinAPI? Это «тяжелое детство, деревянные игрушки». Прослойка для совместимости со неNT, и багаж обратной совместимости. Но я не уверен, что у тебя правильное понимание объектно-ориентированности, кроме того. Но речь шла о ядрах. Что Windows, что Linux — ядра написаны на Си без плюсов, и оба позиционируются (и являются) объектно-ориентированными. Но в не том узко-маркетологическом смысле, который обычно ассоциируется в С++, а в более концептуальном и абстрактном. Поэтому иногда применяется термин «object-based», а не «object-oriented».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение jangle » 17.10.2014 (Пт) 11:05

Хакер писал(а):Ты не поверишь, но и на ассемблере можно. А особо упоротые (намекаю на себя) могут меняя циферки в хекс-редакторе тоже сделать COM-класс. Только речь не о том, что что-то осуществимо. Да, на Си++ осуществимо. И на си без плюсов осуществимо.


Круто! А можно пример COM - класса на ANSI C99 ? Чтобы собирался бесплатным сишным компилятором. TCC например.
Мне иногда требуются COM DLL 64-бит, ничего сложного, получить строчку, обработать и вернуть обратно.

При наличии исходников VB/VBA.


не понял, исходников самого языка VB?
Последний раз редактировалось jangle 17.10.2014 (Пт) 11:08, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 17.10.2014 (Пт) 11:07

jangle писал(а):А можно пример COM - класса на ANSI C99 ?

Создай отдельный топик в местном разделе по С/С++, будет время — набросаю.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.10.2014 (Пт) 11:17

Хакер писал(а):неужели не понятно, что это будет не-COM-класс, для которого инструмент подгонит соответствующую COM-обёртку, чтобы со стороны он выглядел как нормальный COM-класс

Это понятно. Непонятно, почему это важно.

Хакер писал(а):При наличии исходников VB/VBA.

о_О
Тут даже ответить нечего.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение jangle » 17.10.2014 (Пт) 11:21

Хакер писал(а):
jangle писал(а):А можно пример COM - класса на ANSI C99 ?

Создай отдельный топик в местном разделе по С/С++, будет время — набросаю.


Вот создал. Хотя для меня честно говоря непонятно, как можно создать COM DLL используя только компилятор Си, ведь TLB он не создаст.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 17.10.2014 (Пт) 11:21

Qwertiy писал(а):о_О
Тут даже ответить нечего.

Что-то ты потерял нить дискуссии, похоже. Или я не понимаю, почему ты сначала упорно не мог понять, о каких исходниках речь, а когда понял, показываешь странные смайлы.


MS просят дать развитие классическому VB. Ты говоришь: а зачем он нужен, ведь в нём нет возможности создать поток. Я говорю: с учётом того, что у MS, которых просят что-то сделать, есть исходники, у людей из MS на добавление возможности создавать потоки из Standard EXE уйдёт «пара минут».

Что за странные смайлы?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 17.10.2014 (Пт) 11:28

jangle писал(а):ведь TLB он не создаст.

А какое отношение TLB имеет к DLL, в которой сидит реализаций COM-класса?

Ты путаешь COM DLL и ActiveX DLL, которая является очень частным случаем COM DLL, которая не просто содержит реализацию COM-классов, но и обязана регистрировать/разрегистрировать эти классы, предоставлять стандартизированный способ порождения объектов, иметь стандартизированный способ узнать, есть можно ли выгружать библиотеку из памяти в произвольный момент времени, и сами COM-классы которой обязуются не просто быть COM-классами, но ещё и поддерживать IDispatch и не иметь методов с не-automation-типами, чтобы объектики можно было невозбранно дёргать из скриптовых языков типа VBScript-а.

ActiveX DLL создать на голосом Си тоже можно, но на порядок сложнее (из-за необходимости реализовать те дополнительные фишки, которые требуются от ActiveX DLL). TLB спокойно генерируется MIDL-ом. Если и на MIDL налагается запрет, сгенерировать TLB можно своим кодом, пользуясь OLE API.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 17.10.2014 (Пт) 11:33

Qwertiy писал(а):Это понятно. Непонятно, почему это важно.

Много ли ещё существует стандартов/соглашений для организации ООП, которые были бы языко- и платформо- независимыми, не зависели бы и от каких-то фреймвороком или библиотек, да ещё к тому же, были бы такими, что им соответствует гигантская кодовая база (офисы, CAD-ы, даже медиакодеки, и DirectX и Outlook Express, и API софта, о котором вы даже не слышали).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение jangle » 17.10.2014 (Пт) 11:34

Ну да, меня интересует создание 64-битных ActiveX DLL для использования в MS Office 64-bit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Mikle » 17.10.2014 (Пт) 11:35

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

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение jangle » 17.10.2014 (Пт) 11:41

А на счет стонов и собирания 15 тыс. подписей за возрождение VB6.
Странно, что американцы не организовали краудфандинговый проект под это дело.
Собирают же десятки тысяч долларов на новые виды картофельных салатов и прочию фигню.
А тут легенда софтверного мира... Собрать допустим пол-миллиона долларов и найти компанию в Силиконовой долине,
которая разрабатывает компиляторы, и отдать им проект на реализацию. Так появится новый нативный VB.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение jangle » 17.10.2014 (Пт) 12:16

Debugger писал(а):Считаю, что у Бейсика нет равных, если требуется написать мелкую утилиту/программу, на 99% состояющую из GUI/разовые программы.


Безымянный.png
Безымянный.png (45.67 Кб) Просмотров: 9471

Нет равных чтобы написать и сложную систему. Вот к примеру дизайнер термоэтикеток для принтеров Zebra, моя новая разработка на VB6, этого года.
Там визуальный дизайнер форм + коннектор к БД + сохранение этикетки и базы в OLE Storage + скриптовый движок для написания расширений.
GUI отображается за 1-2 секунды и готов к работе моментально. Нет никаких намеков на тормоза в работе. И весь дистрибутив весит 7 мегабайт.

А есть конкурент на C# и WinForms под .NET 4, запускается секунд 30! Без шуток... Это у него так JIT работает. Медленно-медленно отрисовываются (уродливые дотнетовские) формочки и кнопочки, буквально порциями пикселей. Через минуту интерфейс наконец прочухается и позволит с собой работать, но опять открытие каждого нового окна - это новый вызов JIT и новые тормоза. Все это ужасно сильно бесит. Весь процесс тормозится в разы.. Это и это что прогресс?
.NET приложения всегда будут проигрывать качественному нативному коду.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.10.2014 (Пт) 12:16

Хакер писал(а):Или я не понимаю, почему ты сначала упорно не мог понять, о каких исходниках речь, а когда понял, показываешь странные смайлы.

Ага, я теперь понял, что ты имел в виду. Я рассматривал наличие исходников в смысле их наличия у программиста, а не в смысле возможности их изменения Майкросовтом.
В плане изменения исходников Майкросовтом есть другая проблема. Да, вполне реально нормально сделать юникод, добавить LongLong (который уже есть в VBA) и даже, возможно, беззнаковые типы.
Но вот про потоки и лямбды - ты же сам говоришь, что это не соответствует идеологии языка, а идеологические изменения весьма маловероятны. И то же с наследованием.

Хакер писал(а):Много ли ещё существует стандартов/соглашений для организации ООП, которые были бы языко- и платформо- независимыми, не зависели бы и от каких-то фреймвороком или библиотек

Ну, во-первых, программы на VB6 зависят от VB'шного рантайма.
Платформонезависимость - это в каком смысле? VB6 - это же только Windows? И COM вроде тоже?
Итак:
  • VB6: vb-runtime, windows only
    Java: JRE, любая ОС, много библиотечных функций
    .NET: .net-framework, windows + linux + ? (хотя linux с оговорками), различные языки программирования, много библиотечных функций
    Qt: фреймвёрк, windows + linux + ?, различные языки программирования, возможно что-то ещё

Хакер писал(а):да ещё к тому же, были бы такими, что им соответствует гигантская кодовая база (офисы, CAD-ы, даже медиакодеки, и DirectX и Outlook Express, и API софта, о котором вы даже не слышали).

Эм.. Не уловил связь с VB6. VBA вполне себе жив.

Mikle писал(а):Мне в VB6 не хватает не столько полноценного наследования, сколько нормальных конструкторов с параметрами.

Кстати да - забыл что их там нет.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.10.2014 (Пт) 12:22

jangle писал(а):А есть конкурент на C# и WinForms под .NET 4, запускается секунд 30! Без шуток... Это у него так JIT работает. Медленно-медленно отрисовываются (уродливые дотнетовские) формочки и кнопочки, буквально порциями пикселей. Через минуту интерфейс наконец прочухается и позволит с собой работать, но опять открытие каждого нового окна - это новый вызов JIT и новые тормоза. Все это ужасно сильно бесит. Весь процесс тормозится в разы.. Это и это что прогресс?

Знаешь, у меня такое чувство, что это просто писал криворукий программист. Сложные формы отображаются достаточно быстро - никак не 30 сек. JIT компилирует только текущий исполняемый кусок, а не всё приложение за раз. Там никак не может быть минут. А вот кривой запрос (или сотня мелких запросов) к базе данных, да ещё и из ui'ного потока может повесить программу надолго.
На основании чего сделан вывод, что тут проблема именно в .NET'е?
Ну либо у тебя 100% памяти занято и там начинается жуткий своп, чтобы это дело запустить.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.10.2014 (Пт) 12:24

Хакер писал(а):
Qwertiy писал(а):Это понятно. Непонятно, почему это важно.

Много ли ещё существует ...

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

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re:

Сообщение jangle » 17.10.2014 (Пт) 12:28

Qwertiy писал(а):Знаешь, у меня такое чувство, что это просто писал криворукий программист. Сложные формы отображаются достаточно быстро - никак не 30 сек. JIT компилирует только текущий исполняемый кусок, а не всё приложение за раз. Там никак не может быть минут. А вот кривой запрос (или сотня мелких запросов) к базе данных, да ещё и из ui'ного потока может повесить программу надолго.
На основании чего сделан вывод, что тут проблема именно в .NET'е?
Ну либо у тебя 100% памяти занято и там начинается жуткий своп, чтобы это дело запустить.


Я думаю все так медленно работает потому что IL-код обфусцирован в целях "защиты от взлома", это мешает нормально работать JIT (хотя и в обычной ситуации он тормозит работу программы). Я не помню ни одной .NET программы со сложным GUI которая бы не тупила. Все они работают медленнее нативных конкурентов.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.10.2014 (Пт) 12:35

jangle писал(а):Я думаю все так медленно работает потому что IL-код обфусцирован в целях "защиты от взлома"

Вот это уже более реальный вариант. Некоторые обфускаторы замедляют код в разы. Но почему за это надо винить сам .NET, а не конкретный обфускатор?
Это как заменить на джаваскрипте
alert(0)
на
([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]])(+[])
Оно будет быстро работать? Вряд ли.

jangle писал(а):Все они работают медленнее нативных конкурентов.

Медленнее, но не сильно. Никак не минуты. И по идее, медленнее только при первом запуске соответствующего куска кода.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Почему Майкрософт отказывается возродить VB6 ?

Сообщение Хакер » 17.10.2014 (Пт) 12:43

Qwertiy писал(а):
Хакер писал(а):Много ли ещё существует стандартов/соглашений для организации ООП, которые были бы языко- и платформо- независимыми, не зависели бы и от каких-то фреймвороком или библиотек
Ну, во-первых, программы на VB6 зависят от VB'шного рантайма.
Платформонезависимость - это в каком смысле?


Qwertiy, у меня такое впечатление, что ты долго не спал. Потому что ты путаешься и вечно цепляешься за что-то не то, как в случае с исходниками.
Когда я спросил «много ли существует стандартов/соглашений», под ними подразумевался не VB6, а COM.

Qwertiy писал(а):Эм.. Не уловил связь с VB6. VBA вполне себе жив.

Опять же, у тебя что-то не то с пониманием. Потому что связь надо ловить не с VB6, а с COM.

Это продолжение вопроса: «много ли ты знаешь стандартов/соглашений». Был перечислен ряд замечательных свойств стандарта, а затем сказано, что с другой стороны, огромная кодовая база соответствует этому стандарту.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re:

Сообщение jangle » 17.10.2014 (Пт) 12:55

Qwertiy писал(а):Медленнее, но не сильно. Никак не минуты. И по идее, медленнее только при первом запуске соответствующего куска кода.


Не только при первом, например классическая всем известная проблема C# и DataGridView:

C# - DataGridView ужасно тормозит. Существует ли альтернатива?
Серьёзная (и известная) проблема с DataGridView в C#. Неприемлимо тормозной
Как ускорить DataGridView?
DataGridView тормозной, это нормально?

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

След.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList  
cron