Простой DNS-сервер

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Imports System.Threading
Public Class DNS
    Private Shared client As UdpClient = New UdpClient(53)
    Private Shared rP As IPEndPoint = New IPEndPoint(New IPAddress(0), 0)
    Private Shared th As Thread = New Thread(New ThreadStart(AddressOf WaitF))
    Public Shared Sub Start()
        th.Start()
    End Sub
    Public Shared Sub [Stop]()
        th.Abort()
    End Sub
    Private Shared Sub WaitF()
        While True
            On Error Resume Next
            Dim d() As Byte = client.Receive(rP)
            Dim data(d.Length - 12 - 6) As Byte
            Dim tmp As Integer = 0
            Dim tmp1 As Integer = 0
            For i As Integer = 12 To d.Length - 6
                tmp = d(i)
                If tmp = 0 Then Exit For
                For j As Integer = 0 To tmp
                    data(j + tmp1) = d(j + i + 1)
                Next
                data(tmp + tmp1) = Asc(".")
                tmp1 = tmp1 + tmp + 1
                i = i + tmp
            Next
            Dim Answer(d.Length - 1) As Byte
            Array.Copy(d, Answer, d.Length)
            Answer(2) = 133
            Answer(3) = 128
            Answer(4) = 0
            Answer(5) = 0 'zero question
            Answer(6) = 0
            Answer(7) = 1 'one answer
            ReDim Preserve Answer(Answer.Length + 4) 'Add 5 Zeroes (some flags)
            ReDim Preserve Answer(Answer.Length + 4) 'Answer: length(1)+ ip(4)
            Answer(d.Length + 5) = 4
            Dim normal As String = Encoding.ASCII.GetString(data).Substring(0, data.Length - 1)
            'Get DNS record
            Dim path() As String = normal.Split(".")
            Dim dir As String = ""
            For i As Integer = path.Length - 1 To 1 Step -1
                dir = dir & path(i) & "\"
            Next
            dir = "db\" & dir & path(0) & ".dns"
            Dim inHost() As Byte = New Byte() {0, 0, 0, 0}
            If File.Exists(dir) Then
                Dim sr As StreamReader = New StreamReader(File.OpenRead(dir), True)
                Dim tIP As String = sr.ReadLine
                sr.Close()
                inHost = New Byte() {Val(tIP.Split(".")(0)), Val(tIP.Split(".")(1)), Val(tIP.Split(".")(2)), Val(tIP.Split(".")(3))}
            Else
                Dim q As String = Resolver.Ping(normal)
                If q <> "" Then
                    Directory.CreateDirectory(dir.Substring(0, dir.IndexOf(path(0) & ".dns") - 1))
                    Dim sw As StreamWriter = New StreamWriter(File.OpenWrite(dir))
                    sw.WriteLine(q)
                    sw.Close()
                End If
            End If
            'end GET DNS record
            For i As Integer = 0 To inHost.Length - 1
                Answer(d.Length + 6 + i) = inHost(i)
            Next
            Dim h As String = rP.ToString.Substring(0, rP.ToString.IndexOf(":"))
            Dim p As Integer = CInt(rP.ToString.Substring(rP.ToString.IndexOf(":") + 1))
            client.Send(Answer, Answer.Length, h, p)
            If inHost(0) = 0 Then Console.ForegroundColor = ConsoleColor.Red Else Console.ForegroundColor = ConsoleColor.Green
            Console.WriteLine(normal & ":" & Val(inHost(0)) & "." & Val(inHost(1)) & "." & Val(inHost(2)) & "." & Val(inHost(3)))
        End While
    End Sub
End Class

Добавлено: 05 Января 2014 05:27:22 Добавил: Андрей Ковальчук

Масс(спамер) рассылка в skype

Масс(спамер) рассылка в skype
Библиотеку брать на сайте скайпа

Imports SKYPE4COMLib 
 
Public Class form1 
 
 Public WithEvents refSkype As New SKYPE4COMLib.Skype 
 
 Private Sub BtnSend_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSend.Click 
 If TextBox1.Text <> "" Then
 
 On Error Resume Next
 
 refSkype.Client.Start() 
 refSkype.Attach() 
 For Each user In refSkype.Friends 
 refSkype.SendMessage(user.Handle, TextBox1.Text) 
 Next
 End If
 End Sub
End Class

Добавлено: 07 Ноября 2013 10:44:46 Добавил: Андрей Ковальчук

Динамическое выполнение кода

В статье рассказывается о возможность динамического выполнения кода непосредственно из приложения на VB.NET.

Введение

Я думаю всем программистам, которые занимаются одновременно и поддержкой пользователей, знакома ситуация когда юзеры подходят и просят добавить к программе такую фичу, чтобы они могли сами дописывать куски к исходной программе. Не хватает иногда им, видите ли, встроенной функциональности. Не знаю как вам, но меня уже достали! Только придешь на работу, сразу стайками подбегают и просят, чтобы что-нибудь такое приделал к программе:

Никогда не предполагал, но оказывается Microsoft сделала такую фичу! И теперь каждый юзер может своими собственными руками писать разные добавки, и они могут выполняться прямо из программы.

Создание приложения

Для создания приложения которое может динамически выполнять код нам потребуется всего ничего:

Textbox - там собственно и будет располагаться текст программы (не забудьте поставить Multiline и Scrollbars)
Button - а это собственно для выполнения кода
Теперь осталось добавить обработчик на нажатие кнопки, чем мы собственно и займемся:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Dim objCodeCompiler As System.CodeDom.Compiler.ICodeCompiler = New _
VBCodeProvider().CreateCompiler ' создали объект нашего компилятора

Dim objCompilerParameters As New System.CodeDom.Compiler.CompilerParameters()
' а это параметры к нему (что-то типа imports, можно конечно и без этого, 
' но тогда это все придется дописывать к программе самому пользователю)
objCompilerParameters.ReferencedAssemblies.Add("System.dll")
objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll")
objCompilerParameters.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
' добавили нужные нам ссылки
objCompilerParameters.GenerateInMemory = True
' а также укажем что это все надо генерировать в памяти

Dim strCode As String = TextBox1.Text
' а это собственно наш код из текст бокса

Dim objCompileResults As System.CodeDom.Compiler.CompilerResults = _
objCodeCompiler.CompileAssemblyFromSource(objCompilerParameters, strCode)
' попытаемся скомпилировать все это дело
If objCompileResults.Errors.HasErrors Then
' если присутствуют какие-либо ошибки выведем пользователю первую
' можно бы было и все загнать в какой-нибудь listbox но было лень...
MsgBox("Error: Line>" & objCompileResults.Errors(0).Line.ToString & ", " & _
objCompileResults.Errors(0).ErrorText)
Exit Sub
End If

Dim objAssembly As System.Reflection.Assembly = objCompileResults.CompiledAssembly
' создаем сборку
' выполнение программы начнется с класса MainClass
Dim objTheClass As Object = objAssembly.CreateInstance("MainClass") If objTheClass _
Is Nothing Then
' если такового класса нет, то увы...
MsgBox("Can't load class...")
Exit Sub
End If
' а вот если он есть то вызываем его метод ExecuteCode и вперед...
Try
objTheClass.GetType.InvokeMember("ExecuteCode",
    System.Reflection.BindingFlags.InvokeMethod, _
Nothing, objTheClass, Nothing)
Catch ex As Exception
MsgBox("Error:" & ex.Message)
End Try
End Sub

Вот собственно и вся наша программа. Функциональность конечно минимальная, но дальше и сами разберетесь:

Написание исполняемого кода

И последняя часть нашей работы, соответственно создание приложения, которое мы потом поместим в Textbox. Сделаем все по минимуму:
Imports System.Windows.Forms

Public Class MainClass 
	Public Function ExecuteCode()
		Dim objTest As New TestClass()
		MessageBox.Show(objTest.Test)
	End Function
End Class

Public Class TestClass
	Public Function Test()
		Return "Работает!!!"
	End Function
End Class

Тут, как говорится, комментарии излишни...

Добавлено: 16 Сентября 2013 03:46:48 Добавил: Андрей Ковальчук

Бейскик и VB.NET

Компьютерная литература еще с тех времен, когда зародилось само понятие "Бейсика" как средства автоматизации "вычислений" (так как назвать Бейсик того времени языком программирования было нельзя) и рассчитанное на непрофессиональных пользователей ПК, пестрила в принципе единогласной идеологической линией: Бейсик ущербен, примитивен, ненадежен, p-код, генерируемый им, далек от норм скорости выполнения, "программист" на Бейсике не может того-то и того-то, да и вообще - "программист" на Бейсике - не программист вовсе...

С корабля - на бал, или быль о гадком утенке

Шло время, корпорация Microsoft с почитателем Бейсика (как уникальнейшего средства) во главе, сотворила первую версию продукта. К тому времени ни один из релизов, - будь то официальный софтверный бренд-продукт, либо же ПО "третьего лица", не участвовал ни в тестах производительности компилируемого кода, ни в оценке средств разработки ведущими компетентными инстанциями. Так, выпустив на рынок MS BASIC, Microsoft была вынуждена пересмотреть его концептуальную сторону, и по прошествии определенного времени на свет стали появляться адаптированные под MS Windows Visual-бейсики. Однако, не смотря на растущую популярность VB прошлых лет, последний все еще был изгоем де-факто в глазах "продвинутых", истинных программистов, чьи пальцы привычно выбивали void MyFunction, но никак не Private Sub. Действительно, "рубашка" Си/Си++ намного ближе и к MS Windows - ОС, написанной на Си, и к MS DOS, рожденному родственным компилятором, чем Бейсик (отбросьте сразу суррогатные явления типа QBasic и "то", что изучали в школах Советского Союза - в данной публикации речь о них не идет и идти, надеюсь, не будет). Этим не сложно объяснить привилегии Си-программистов, когда речь заходит о пакетах для разработчиков - т.н. SDK, Software Developer Kit`s.

Итак, первым переломом в мире "VB-куръеза" стал Visual Basic 4, когда стала ощутимой власть COM, рывком вынесшая Бейсик на очередную ступень эволюции (стало возможным создание динамических библиотек... Не ахти как рационально, но... сам процесс...), вторым - пятая версия. Отныне программисты имели право рассматривать VB 5.0 как инструмент для создания ActiveX-компонентов. Существовала даже "версия-фрагмент": VB CCE - Visual Basic Control Creation Edition. Не прекращались полемические баталии о вреде "мышления в стиле Бейсик" - простите за случайность - и, надо заметить, небезосновательно, а также об участи VB как о "версии VBA - Visual Basic for Applications" (пояснение: если и судить об иерархической природе одного продукта как о производном от другого, то правильнее было было рассматривать VBA как язык "скриптинга" офис-приложений Microsoft, Corel и других носителей, взявший начало из Visual Basic, и никак иначе). Иными словами, "там ему и место". Однако лишь будущее показало, кто есть кто...

Шестая версия, как может показаться, ничего особенного в себе не несла, за исключением дополнительных возможностей при работе с базами данных и Интернет плюс дополнительные встроенные функции, существенно облегчающие (точнее, упрощающие) некоторые задачи из области строковых операций, а также несколько других. Воинственность оппонентов Бейсика не прекращается, и...

Framework - виртуальная машина будущего или эксперимент?

Сегодня, когда анонсирован Visual Studio .NET (v.7) и уже распространяется свободная к загрузке с сайта Microsoft его бета-версия, специализированные СМИ (он- и офф-лайн), как в былые времена, еще раз подчеркивают "скандальность" характера Visual Basic. Однако ранее, как у любого гениального творения, имела место незыблемая противоречивость VB: здесь масса положительных черт уравновешивалась такой же массой слабых мест и явных провалов, порой позорных.

Что же такое .NET Framework? Ответ однозначен: это - виртуальная машина, фундамент, который послужит основой для создаваемых приложений будущего. dotNET Framework можно (теоретически) сравнить с той же Java VM, и, если отбросить отличия (скорее, легче сосчитать сходства), без труда мотивировать новую стратегию. Быть может, одна из целей "ясновидящей" Microsoft - завладение близлежащих вотчин в мире ПО и Операционных Систем через такого рода переносимость кода. Что это - "принудиловка" следования Ц.У. монополиста или все же оправданный, жизнью продиктованный шаг во имя той же автоматизации менеждмента памяти и отказ от привычного стиля жизни ОС? Судите сами, господа.

Как уже, наверное, известно читателю, MS Visual Studio .NET преподнес настоящий сюрприз всем прослойкам "муравейника" программистов: интернетчики как олицетворение сегодняшних достижений Информационных Технологий на фоне "е-веяний" получили ASP+, да и JScripter`ы не остались обделенными. Любители FoxPro и Visual C++ получили (вернее, получат при выходе финального релиза .NET) новые версии своих привычных средств разработки. И вот тут-то и начинается самое интересное: dotNET готовит сразу два лакомых кусочка - на десерт ли, или же в качестве основного продукта - для кого как. MS Visual J++ не получил дальнейшего развития, очевидно, только из стратегических (в рамках маркетинговой политики Microsoft) соображений. Мотивы - Java есть детище Sun...

Одно очевидно: новый Visual Basic .NET - он же VB 7 - является сенсацией нового тысячелетия, так как отбросив все отрицательное (см. ниже) становится одним из ключевых моментов вообще VS 7 благодаря сильным бесспорным сторонам. Как известно, ранее, омраченные тяжестью "другой стороной медали", заслуги Бейсика меркли и вскоре просто игнорировались. Вторым "коньком" седьмой VS стал абсолютно новый, доселе не имевший аналогов язык программирования C# (читается как "Си-Шарп". Рабочее название - как один из вариантов - было "Си-Хэш"). Просматривая зарубежную онлайн-прессу, не раз натыкаешься на статьи с подобными глупейшими заголовками: "Что лучше - C# или VB.NET?".

Как тут не вспомнить о бойкоте Бейсика в нелегкие для него времена? Наверняка здесь играет роль некий комплекс неполноценности Бейсика. Вероятно, годы наложили не лучший отпечаток, клеймо на язык BASIC в целом. Может, следовало бы его переименовать? А может, это - проявление характера авантюрной личности "кое-кого" из Microsoft, решившей сыграть на чувствах?, А может, это один из еще не выжатых до основания источников? Однако суть не совсем в целях - она в конечном результате, а также в цене, которую платят пользователи за чью-то прихоть.

Ларчик просто открывался

Идея .NET Framework заключена, если быть кратким, - в общих компонентах, участвующих в производстве ПО. Так, все языки программирования, входящие в комплект .NET, генерируют общий промежуточный код (Intermediate Language, IL), который компилятор .NET компилирует в практически идентичный код (были проведены исследования двух полноценных IL-результатов от двух разных проектов - VB.NET и C#, причем задача была поставлена отнюдь не тривиальная типа Hello, World!, а, напротив, насыщенная ресурсоемкими циклами и "ветвистостью" кода): вот где секрет переносимости - компании, уже сегодня занявшиеся разработкой .NET-версий своих продуктов - например, Eiffel (т.е. Eiffel#), - а также виртуальные машины для Linux/Unix, MacOS и т.д. продолжат начатое. А поддержка .NET Framework, ясное дело, весьма закономерна. И как тут не вспомнить вовремя выпущенную .NET Framework SDK? Ну что, проясняется ситуация?

А интерес "третьих лиц" можно подогревать бесплатными сервис-паками к совсем неисследованной на предмет багов SDK (для совсем сырой Framework) на www.microsoft.com и списком, например, новых возможностей - точь-в-точь, как для NT.

Золотая середина: IL

У читателя возникнет вопрос: что же дальше ожидает промежуточный код, сгенерированный общей .NET IDE и какова его природа?

При тестовой эксплуатации .NET-приложений было замечено их явное "торможение". Intermediate Language - это только часть истории. Действительно, IL, по идее применения сравнимый с p-кодом Бейсика или пре-компилированным кодом Java, (что более соответствует образу IL, т.к. необходимо учесть, для чего вообще эта переносимость нужна - конечно, это есть World Wide Web), можно рассматривать и как некий эксперимент: как насчет p-кода для Visual C++? А Visual Basic под Линукс? Тут же можно провести параллель с Delphi для Linux. Но ведь MS зрит в корень - отныне любое .NET-приложение может выполняться на куда-угодно-установленной .NET Framework, а сегодняшняя ее "однобокость" - MS Windows 9x, плюс все NT - лишь дело времени.

Если серъезнее, то здесь имеет место технологический прием, называемый Just-In-Time Compile (JIT) - тема не новая, однако в таком контексте пока вызывает только огорчения тестеров. Принцип таков: исходный код проекта пре-компилируется в Intermediate Language (который, кстати, еще называют Assembly), а при выполнении пре-компилированного приложения .NET Framework позаботится об остаточной, завершающей "докомпиляции" ПО. Происходит это... just in time - во время выполнения последнего. И так - каждый раз при запуске программы. Microsoft, однако, обязуется решить проблему, пообещав реализацию сохранения результатов уже откомпилированного однажды IL-кода приложения где-то на жестком диске. То есть ждите "дрожжевого свопа"...

Кроме того, исходный код, написанный, к примеру, на Visual FoxPro или C#, может быть доработан уже на Visual Basic .NET, пройдя пре-компиляцию в Intermediate language - ".NET languages: один за всех и все за одного" (цитата). Этот факт, однако, имеет максимальное количество отрицательных отзывов: существует ли такая ситуация, когда доработку Си-проекта нужно выполнить на VB.NET (и наоборот)? И настолько ли удобочитаем IL, чтобы не рискнуть начать проект на другом языке? Приведенные примеры одного из уважаемых авторов, "ex-волшебников" VB, говорят об обратном (появились переиначивания .NET в .NOT, к слову, а также масса сленг-извращений - из статьи Карла Петерсона "Visual Basic .NOT"). Другая же сторона - лагерь приверженцев идеи Intermediate Language - убеждены (и в чем-то правы, к стати), что сей факт - лишь случайный положительный эффект, и никто не обязывает к реализации возможности портирования VB-кода в код C# или Visual C++.

Но делает ли хоть какие-то шаги случайно Microsoft?...

Поздравляем - сектор "ноль"!

С точки зрения частного лица, не обладающего солидной базой наработок в области программного обеспечения, входящий в состав Visual Stidio .NET "Мастер Миграции из VB6 в VB.NET", который не гарантирует стопроцентного соответствия исходного кода (версии 6) в результирующий - .NET - будет выглядеть лишь как "еще один из способов сократить ручную работу". Однако для специалистов, чьей специализацией есть профессиональное (то есть коммерческое) творение ПО средствами Visual Basic, такой "ломастер" вряд ли внушает сколько-нибудь оптимизма. Причина - далеко ушедшие новшества как структурного характера нового Бейсика, так и его лингвистические нововведения, которые Wizard почему-то не в силах осмыслить... Таким образом, профессионалам придется писать код по новой, накапливая ошибки в силу необъезженности VB.NET, .NET Framework и так далее - при том, что испытанный годами и сотнями пользователей код VB 5 и 6 жестоко отбрасывается в утиль как устаревший механизм, тогда как в различного рода проекты (читай: "мероприятия") были сделаны немалые капиталовложения по всему миру. Отсюда следует (мнение автора - не более того), что "мода" на .NET придет либо: 1) с обеспечением портирования версии 6 в седьмую, 2) новыми специалистами (которые, к стати, уже к концу текущего года поползут как грибы после летнего ливня), не одурманенными вольготными правилами Visual Basic прошлого века, соответствующим опытом разработки в старом стиле и балластом программного обеспечения, сопровождения которого требуют в первую очередь клиенты разработчика. Эффект "разгрома" сложившихся традиций усилен не самыми радужными перспективами на ближайший год даже для опытнейших программистов. По прогнозам многих зарубежных аналитиков, прироста в полку следует ожидать к концу текущего года, однако нет никаких гарантий относительно его состава (читай: кто был "всем", тот стал "никем", and vice versa). Из этого, однако не следует делать выводов об "обреченности" той массы программистов, которые, вопреки всему и вся, избрали т.н. "легкий хлеб" а в свете грядущей перемены имеют шанс разыграть лотерею из серии "место под солнцем" снова: уже появились в продаже книги по C# (и уже многочисленные) - как предвестники новой волны, которая, уверен, вскоре хлынет на никем не занятые территории и другими тематиками (VB.NET не заставит долго ждать - это же чей-то огромнейший кусок хлеба. Думаю, об этом догадался не только автор настоящей публикации, но и десятки тысяч издательств мира... однако, как мне почему-то кажется, Украина не будет лидировать в этой гонке за кусок праздничного пирога), а также великое множество статей и FAQ`ов на тему .NET в целом. Практически ни один корпоративный или информационно-аналитический сайт, ориентированный на разработку ПО и его распространение (по крайней мере для ОС Windows 9x), не обошел вниманием факт появления бета-версии революционно-сенсационного средства быстрой разработки приложений и практически на каждом из них уже имеется десяток советов, как подготовить VB6-проект к более-менее безболезненному "конвертированию" в новый формат - перед использованием Мастера Миграции, а также предостережения до сих пор использующим шестую версию Visual Basic, но планирующим "ремастеринг" в будущем.

Хорош Федот, да уже не тот

Популярная точка зрения тех, кто, не будучи лично знаком с Visual Basic, пытается сосчитать количество сходств между VB6 и VB.NET и при этом сделать объективные адекватные выводы: VB.NET - это якобы очередная, новая версия Visual Basic, и, возможно, Microsoft вскоре реализует "типа-Upgrade-for-VB6".

Это утверждение - не просто заблуждение: если корпорация-производитель и выпустила бы (представим на минуточку) подобного рода довесок для... - будем это называть так - "имитации синтаксических приемов новейшего Бейсика" (другого резона трудно представить исходя из трактования замысла .NET Framework), тогда как быть с упомянутой "виртуальной машиной", ведь все языковые средства из комплекта отныне используют одни и те же Runtime-модули. Если быть точными - CLR (Common Language Runtime). Конечно, неиспользование Framework сегодня выразится в отставании от "уже действительно самой" прогрессивной части населения планеты Земля, но завтра, возможно, станет ИТ-"ересью".

Что же нового несет в себе VB.NET и насколько разительны отличия его от привычных Бейсиков прошлого?

Во-первых, Microsoft одним движением "тренированной" руки по-своему расставила акценты. Отныне Visual Basic - "... первоклассный Объектно-Ориентированный язык программирования... " и "... байки о том, что VB имитирует наследование через делегирование, при этом являясь ОО-симулянтом, канут в лету... ".

Да, действительно Visual Basic стал таковым, однако он не мог им не стать, разделяя ресурсы с другими языками клана .NET, чей статус основанных на ООП (не просто поддерживающих) под сомнение ставить не приходится.

Кроме наследования "высшего сорта" в VB.NET включены и остальные долгожданные атрибуты Объектно-Ориентированного подхода, да и просто "фишки" языков типа C++: ключевое слово Overrides (когда подобное "переназначение" позволяется только в явно указанных случаях - во избежание случайного - например, из производного класса), ключевое слово Implements (с целью имплементации, к примеру, интерфейсов), ключевого слова Inherits (что уже своим написанием говорит обо всем и сводит на нет все сомнения, если таковые еще остались относительно природы ОО-Бейсика .NET), конструкторы, до боли знакомые программистам на всех ОО-языках, структура Try...Catch...Finally (призванная впредь избежать ошибок "незавершенности начатого" - ("сказал а - скажи и б"), рождающихся в окончивших свой срок существования On Error GoTo и On Error Resume Next/Exit ..., а также GoSub...Return), реализована привычная для разработчиков на C/C++ потоковость (Free Threading, когда одно приложение может порождать множество потоков (процессов), один от другого не зависящих и выполняющихся практически автономно. К стати, если вышесказанное хоть как-то могло быть реализовано иными средствами в VB6, то потоки были вовсе недоступны "басиковцам", отчего они весьма горюнились), а также введено понятие перегрузки (одна функция или процедура может принимать различные аргументы различных типов; при этом вычисление происходит без ошибки несоответствия типов, и понятно почему). Введено явно заимствованное из C/C++ ключевое слово Return, которое возвращает значение из функции, в рационе появился объект Exception. Удобство можно объяснить тем же, чем и преимущество лексеммы "Me" перед frmMyForm или Form1.

В VB.NET не является синтаксической ошибкой определение значения переменной в строке ее объявления (что весьма и весьма удобно), а также "доделан" механизм объявления однородных переменных в одну строку (если уважаемый Читатель знает, в объявлении Dim A, B, C, D As String только одна переменная принимала тип Строка - D, остальные - Variant):



Введены также жесткие меры по пресечению "произвола" программистов: в действительности привыкание пользователей VB 4, 5, 6 к перенастройке измерений массивов, используя директивы Option Base (и другие вредные попущения, которые сродни привыканию к никотину :)) портят вкус программиста, ведут к распущенности и, в следствие заполнения потенциальными ошибками, усиленными заведомо отключенной проверкой типов, затрудняют процесс отладки и слежения за поведением всего проекта на стадии разработки, не говоря уже о багах откомпилированных программ, которые снятся программистам на VBA и VB в самых страшных снах. К счастью, VB.NET более не позволяет использовать "умолчательные" свойства элементов управления (см. код ниже), экономить на объявлениях переменных, устанавливать значение индекса первого элемента массива равным единице.



Однако наряду с этими мерами по "оздоровлению" Бейсика были введены и меры явно репрессивного (как показалось некоторым западным журналистам-"языковедам") характера: .NET-boolean со значением True в числовом эквиваленте более не отрицательное -1. Это - положительное 1. Таким образом, если программист использовал числовые эквиваленты вместо True и False, то никакой мнимый анализатор кода без целенаправленного поиска значений переменных согласно объявленному типу не в состоянии будет отловить логическую ошибку (а часто и тупик) в коде шестого Бейсика - следует учесть, что VB 6 не требовал строгого объявления переменных, а вслучае "отсутствия факта присутствия" просто имел в виду тип Variant. Variant же порождает множество интерпретаций задуманного... Прибавьте ко всему сказанному грядущие неприятности на фронте ByVal и ByRef - в лагере Классов, к примеру...

Visual Basic версии 6 рассматривал Integer как 16-битную переменную. VB.NET - как 32-битную, что рано или поздно скажется на производительности в проектах любого языка программирования клана .NET. Зачем? Кажется, неспроста...

И, наконец, самое печальное: MESSAGEBOX - это не то же, что и MessageBox. Другими словами, отныне обязательно соблюдение регистра символов. Несоблюдение приведет к ошибке. Увы...

Что может VB.NET?

Прежде всего, создание приложения, в любом .NET-языке - это запуск общего IDE. Причем и отладка, и компиллирование происходит там же. При запуске последнего пользователю предлагается выбрать тип проекта, исходя из предустановленных шаблонов проектов. Шаблоны (по своему назначению) можно пополнять. В комплект входят шаблоны Web-приложений, Web-сервисов, Win-приложений, Элементов Управления Windows, которые теперь именуются как Windows Controls, Элементов Управления для веб-контента (Web Controls), шаблона класса, консоли и других.



Сами же синтаксические извороты нового века в Бейсике пока непривычны, но, как уже было сказано не раз - дело привычки. Так, любая функция вызывается из базового класса, входящего в BCL (Base Class library), и вызывается как функция-член класса в предыдущих версиях VB - через точку. Причем функции типа вызова окна сообщения (и других наиболее употребительных) реализованы для совместимости кодов и являются всего лишь "эмуляторами" новых. Значительно переработан арсенал для работы с файлами, веб-сервисами (а вот WebForms там не оказалось) и т.п.



Конечно, если судить о Visual Basic .NET как о продукте наступившего "нового" тысячелетия, когда возросли и запросы пользователей, и программные средства не позволяют воплотить эти пожелания без определенной доли "хакинга", то Visual Basic .NET и C# - продукты времени. Их появление как раз очень своевременно и многими желанно. К тому же по большому счету для посредственного Бейсик-пользователя особых затруднений возникнуть не должно. Тем паче, что ООП (и другие, подвергшиеся изменениям, малоиспользуемые способы ведения ведения войны с компилятором) в рамках этого языка использовали не полее 60-70% "программистов"-непрофессионалов (в смысле некоммерческих и неопытных разработчиков), так что адаптация для многих произойдет без нечеловеческих усилий и едва ли ощутимо.

Инсталляция

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

Процесс установки ни у одного из респондентов опроса, по данным одного из наиболее известных информационно-технологических обозрений в Сети, не прошел без сбоев. Как минимум три-четыре раза Система пыталась "лечь" ниц. Инсталляция Visual Studio .NET обычно происходит в два основных этапа: обновление OS Windows 9x (под нужды .NET Framework, надо полагать) и сама установка Visual Studio. Однако разочарование для пользователей Windows 95: в инструкции по установке сказано, что создание программного обеспечение на базе машины .NET невозможно, однако запуск готового .NET-ПО - вполне допустим.

Ошибки на стадии обновления - одно из наиболее уязвимых мест .NET - здесь и происходит война миров - низы еще хотели бы пожить по-старому, а "верха" еще не могут без треска по-новому... В остальном лучше пока придерживаться опций по умолчанию - проблем будет намного меньше.

Что ж... Microsoft уже заикнулась о второй бета-версии MS .NET... Сколько новых сенсаций/разочарований ждет VB-поклонников с ее выходом?

Поживем - увидим.

Добавлено: 16 Сентября 2013 03:44:20 Добавил: Андрей Ковальчук