大家帮我想一想啊,如果在已经有了codesmart,mztools等的前提下,再开始一个小的VB6 IDE外接程序,代码规模3-5K的那种,哪几个新功能是您的推
--------------------编程问答-------------------- 最多装装那个鼠标滚轮插件, 可以用滚轮上下翻代码 --------------------编程问答-------------------- 程序中,对一些错误没有处理,可能是致命的,可以添加一个自动添加on error goto errhandler的代码的功能 --------------------编程问答-------------------- 可以添加一个查看过程或函数被调用的位置 --------------------编程问答-------------------- 就装1个中轮滚动的插件,其他一律不装,免的到别的电脑还打不了代码了 --------------------编程问答--------------------这个我想过,弄一个选项,当添加事件过程时自动添加这种错误处理 --------------------编程问答-------------------- 有用的插件必然需要涉及到VB语法解析。VB6的编译器是封闭的,注定这么搞是劳命伤财,你见过VB6有好用的重构插件么?其实这是最有用的。
.NET下好玩的东西很多,得益于Compiler as a Service,有那么多人在给C#编写各种插件。我举一个例子,你看什么插件有给VB增加代码折叠的功能很神奇吧,在Roslyn的帮助下,只要你会用TreeView,写这样的东西就和玩一样,因为我直接访问编译器产生的语法树(也包括tokens、expression tree等等)。 --------------------编程问答--------------------
呵呵,看来老兄对IDE扩展不太了解,VBIDE 扩展这方面能力是很强的,你几乎可以控制编程的各个方面,ide内部个各个细节事实上是很开放的 --------------------编程问答-------------------- 了解10年前的古董有意思么?VBIDE扩展能力很强?你给VB IDE添加一种新语言的支持看看?
我不是说不可以,但是一定是很麻烦的。事实上用VSShell,不需要什么技巧,就可以在几个小时内搞定。包括语法高亮、智能感知、Debugger集成。事实上MSDN上就有把IronPython集成到VSShell的例子。
你把Python整合到VBIDE试试看? --------------------编程问答-------------------- 我说了,给VB写插件方便不方便不是看那些花花绿绿的东西。我可以给VB6添加“记事本”“时钟”“计算器”“小说阅读器”“ftp上传下载工具”等很多功能,有意思么?
你要想给VB6写有意义的插件,你就得自己实现VB代码的词法/语法解析器乃至解释器,因为这些是VB不开放的。
另外,VB语法本身很糟糕,给VB写解释器甚至比给C#写解释器还困难。 --------------------编程问答--------------------
VB语法解释难,老兄你说笑话吧?
语法的灵活度和解释的难度是成正比的。
比如最简单的赋值(包括自增、自减)语句
A = 1
A = 1;--------------------编程问答--------------------
A += 1;
A -= 1;
A *= 1;
A /= 1;
A %= 1;
A <<= 2;
A >>= 2;
A &= 1;
A ^= 1;
A |= 1;
A++;
++A;
A--;
--A;
笔误,我想说的是给VB写语法解析比给C#等现代的语言更难。
难的原因是VB包含很多过时的,非结构化的语言成分。 --------------------编程问答-------------------- 运算符多寡和实现语法分析没有什么必然的联系,这是词法分析解决的问题。 --------------------编程问答--------------------
猜到你会拿这个来糊弄。
很可惜,结构化好不好和语法解析难不难没有关系。
就算一个函数中有 100 个 GOTO,人读不懂逻辑,但语法解析根本不受影响。
又:下面的代码就是结构化好的语言写的
#include"stdio.h" main(int _){_^*("^o^"+(*"@_@">>7))-74?putchar(_^*&("- -!"[1])-13?*(&"=^_^=Mx\"Mehc'2)IB[RLCET-_-b"[_]+4)^_-1:10),main(*("^o^y"+1)-'n'+_):*"^_^";getch();}--------------------编程问答-------------------- 应该是两行的,鄙视对复制内容动手脚的网站!
#include"stdio.h"--------------------编程问答--------------------
main(int _){_^*("^o^"+(*"@_@">>7))-74?putchar(_^*&("- -!"[1])-13?*(&"=^_^=Mx\"Mehc'2)IB[RLCET-_-b"[_]+4)^_-1:10),main(*("^o^y"+1)-'n'+_):*"^_^";getch();}
首先,C不算我说的良好的语言,其次,你根本没有理解我的意思,举例也莫名其妙。
我说的是实现语法解析的难度,而不是看懂源代码的难度。 --------------------编程问答-------------------- 很难想象这是一个5星的用户讲出的话,那么业余。
机器和人对复杂、简单的理解是完全不同的。按照你的理论,最简单的语言不是C,也不是VB,而是汉语了。你写一个汉语的编译器试试看?
VB有很多杂七杂八的规则,比如说
Open xxx For xxx As xxx
调用方法,有返回值和没有返回值还要区分Call xxx和xxx(...)
还有那个奇怪的On Error Goto/Resume Next
甚至还有GoSub之类的语法,你尝试用BNF范式描述下,多到让你易做图,更不用说实现了。 --------------------编程问答-------------------- C# 作为 C++ 的继承者,那么原先灵活(较难解析)的语法至少 90% 是支持的吧?
虽然 C# 提供了“结构好”的语法,但也会兼容以前“结构不好”的语法吧!
假如你来写 C# 的语法解析,总要考虑这些“结构不好”的代码吧?——这就是难度啊
虽然举的是C的例子,不一定完全符合C#,但是能直观表现难度。
不要求读懂,只要构思一下如何解析。
而 VB6 语法就简单多了,写千行左右代码就可以做一个简单的代码格式化工具了:
统一缩进;
将一个 Dim 语句定义多个变量拆分成单独的 Dim 语句。 --------------------编程问答-------------------- 打开一个事件,最好是能将容错处理代码自动生成。生成一个新的工程,最好能自动生成一个标准的模块,里面包含常用的API函数。 --------------------编程问答-------------------- 我想明白我俩的看法差异在哪里了。
你侧重整体的结构性,所以觉得没有统一简洁的范式。
VB6 语句的范式种类多,这我同意。
但由于从最早的“行式”语法演变而来,VB6代码只要拆分成行,每行的范式都不复杂。
结合写编解析器的实践看,我认为拆分再单句范式分析,简单。
--------------------编程问答-------------------- 我不谈那些看似很学术的观点(其实编译原理都学过,谈不上学术),我想说说为什么要做语法分析。
不谈C#,谈VB,可以看看roslyn为编写插件带来了什么好处:
http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/roslyn-syntax-visualizers.aspx
你可以看到,一组简单的API可以将用户输入的代码转化为语法树。
以18L说的需求为例,如果你不做语法解析,你的插件美其名曰“添加异常处理”,其实不过是多重剪贴板,它只能机械地给你往一个方法中灌入一些文本,我现在要做如下的需求,将原有的异常处理全部去掉,或者将A形式的异常处理全部替换成B形式的,或者,我需要检查代码中哪些部分没有覆盖到异常处理,你能实现么? --------------------编程问答-------------------- 又想复杂了不是!
问题是 VB 就是简单到没有多形式的异常处理,纯粹就是机械添加
Sub f()
On Error GoTo ErrHandler
<原内容>
ExitEntry:
Exit Sub
ErrHandler:
ErrProc STR_MODULE_NAME & ".f()"
Resume ExitEntry
End Sub
MZ-Tools 的模板就轻易实现了。
再把 <原内容> 中的 On Error Goto 0 挑出来做个提示,就能检查未覆盖了。 --------------------编程问答-------------------- 还有,我们的分歧是“语法解析”,只管语法的难易度,不管程序的正确性。 --------------------编程问答--------------------
有个美国人居然把VB的错误处理还写出一本书来。
你可见VB实现异常处理的复杂。
如果你不是只打算拿VB做玩具的话。
比如这样的逻辑:
Try
AccessNetwork
Catch CannotAccessNetworkException
Try
Writelog CannotAccessNetworkException
Catch CannotWriteFileException
...
End Try
Catch DataInvalidException
Throw ArgumentException
End Try
你用VB6写写看。据我所知,VB6不支持处理异常处理中引发的新异常吧。 --------------------编程问答--------------------
MZ-Tools做的如何先不说,就说给你半个小时,让你做一个出来,你就肯定办不到。据说MZ-Tools还可以卖钱吧,这东西在.NET平台上估计卖不出去,这就是差别——WPS For DOS是一个商品软件,功能也就和VB拖一个文本框差不多,而且前者的用户体验还不能和后者比,因为时代不同了。 --------------------编程问答-------------------- 我22楼已经打了预防针了!
不要跑题,VB6“语法解析”。 --------------------编程问答-------------------- --------------------编程问答-------------------- 呵呵,啥都不用。 --------------------编程问答--------------------
对象浏览器左右的列表框会把下面的注释盖住?
我没遇到过呀
我每次都能拖动下面的注释框的大小。
--------------
斑竹在vb论坛讨论vb这个不好,那个不好,奇怪的很哦 --------------------编程问答-------------------- 卖爆米花啦……卖小板凳啦……元旦特价,要的速度。
买了干吗?
你2啊,坐着看大虾论剑啊 --------------------编程问答-------------------- 哎 无语。。讨论这么激烈干嘛。。 自己试试就知道咧 - -! --------------------编程问答-------------------- 应该要像VBNET那样,对变量 关键字,字符串要用不同的颜色标出
自动排版,对简单错误提供修复建议 支持点到某个变量,这个变量都高亮显示 --------------------编程问答-------------------- 31楼说的那些功能我也想要啊,可惜那些就算codesmart也没做,应该是难度比较高吧。
我也就做点低难度的或简化的,比如像vs.net里“向前向后定位”那样的 --------------------编程问答-------------------- 好象争得跑题了。
各位有用过那二个插件吗?
codesmart,太强大了。精典的多页代码显示,折叠代码,关键字着色都有。
mztools,大家提的错误处理,他可以设置代码段,一个快捷键就进来了。
另外就是鼠标滚轮,这个一定要的,不然太不方便了。
语言没有好坏,只是用的人习惯不习惯而已。
水平高低决定了用同一种语言,写出来的东西也是良莠不齐。
个人观点,能养家糊口的语言就是好语言。 --------------------编程问答-------------------- bcrun 想写一个 vb Add-in,这很正常,各人有各人的习惯和需求。
你有一个想法,先做出来就是,开始不用考虑什么大而全的目标。
Just DO it!
————————
caozhy 泼冷水,说 VB 语法解析困难,这是我要反对的,仅此而已。
我有实际经验,在用 Smart Indent 之前,自己写过简单的语法解析、进行代码格式化(当然没有 Smart Indent 这样全面),就是千行左右代码搞定。
"MZ-Tools做的如何先不说,就说给你半个小时,让你做一个出来,你就肯定办不到。"——这种通过否定一点来否定全部的论证方法听得耳朵都起老茧的,直接无视了。
————————
虽然准备有许多 Add-in,但是经常加载的也就有限个
MZ-Tools
Smart Indent
Ulli's VB Companion(支持鼠标滚轮)
*** (大学室友写的,我喜欢其中的一个功能) --------------------编程问答-------------------- 语法解析,那是机器的事,管人什么事啊! --------------------编程问答-------------------- 哈哈,感觉caozhy对VB6是BS得一无是处啊,简直恨不得用VB6的人全都转到C#之类的.NET平台才好,看到好多个帖子里的回复,都是这样的感觉 --------------------编程问答--------------------
绝对有私心,典型的易做图股决定嘴巴啊,一边狂BS一边狂来这个版捞专家分:)
他今年的MVP申请表中估计也少不了VB版答疑的帖子链接
唉呀,我们好像忘了把那个国产的免费VBIDE扩展AmicForVB贴出来了,感觉功能上可和mztools互补。可惜作者没有坚持下去,最新的还是2009年的,有几个很讨厌的BUG都没改正。
http://download.csdn.net/detail/acev/4656128
AmicForVB 1.1.8, vb插件,作者:予心居 --------------------编程问答-------------------- 难度由上至下递增,哈哈哈
1、滚轮必须的;
2、代码自动格式化;
3、检测未使用的变量、函数、过程,友情提示;
4、查找同一变量、函数、过程等对象的所有引用,需要区分变量定义范围;
5、代码区块折叠,类似于#region #endregion
6、最后提个难点的,能否添加函数指针,以前用VB6的时候,总觉得少一个功能,错误处理里面不能获得当前函数名称,类似如下:
on error goto errHandler
exit sub
errHandler:
err.function_name --------------------编程问答--------------------
那你以为我21楼的代码那来的,MZ-Tools 模板中有表达式可用
On Error GoTo ErrHandler--------------------编程问答--------------------
{PROCEDURE_BODY}
ExitEntry:
Exit {PROCEDURE_TYPE}
ErrHandler:
ErrProc STR_MODULE_NAME & ".{PROCEDURE_NAME}()"
Resume ExitEntry
没用过MZ-Tools这个工具,原来已经有这工具了啊,是我孤陋寡闻了,哈哈 --------------------编程问答-------------------- 补充一句:我觉得Codesmart的autotext比mztools的Code Template方便
先结帖,下次正式确定下初期的功能再发新帖。 --------------------编程问答-------------------- 那就来个像 excel那样的 自动填充功能吧。 即 text1 下拉后变成 text2...
虽然可以用控件数组+循环完成,但有时候也真的需要啊 --------------------编程问答--------------------
请教,为啥我没找到代码折叠在哪里呢?
补充:VB , 基础类