我正试图在Microsoft Windows上理解这个LIB文件业务,我刚刚发现了一个发现 - 我希望 - 消除迄今为止阻止我清楚地掌握这个问题的混乱.也就是说,LIB文件不是他们的文件扩展名表明的那种文件.
:: cd "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib"
:: lib /nologo /list Ad1.Lib
obj\i386\activdbgid.obj
obj\i386\activscpid.obj
obj\i386\ad1exid.obj
obj\i386\dbgpropid.obj
obj\i386\dispexid.obj
:: lib /nologo /list oledb.lib
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\oledbiid.obj
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\oledbnewiid.obj
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\cmdtreeiid.obj
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\oledbdepiid.obj
:: lib /nologo /list AdvAPI32.Lib | sort | uniq -c
731 ADVAPI32.dll
Run Code Online (Sandbox Code Playgroud)
前两个示例包含目标文件(在lib.exe实用程序显示时显示为相对路径或绝对路径).但是,第三个示例仅包含对DLL的731个引用.(我想lib.exe这不是为了显示这种文件的更多有用信息.)
一些包含目标文件,它们是静态库.其他包含符号,它们是导入库.(这里有一个简短的解释.)
因此,静态库似乎是.aLinux 上文件的等价物,而DLL似乎映射到.soLinux 上的文件.(顺便说一下,导入库如何适应这个Windows/Linux等效图片?)
现在我想知道为什么会这样?为什么Microsoft决定为导入库提供与静态库相同的文件扩展名?(我理解,从历史上看,静态图书馆是第一位的,就像原始形式的生活先于更复杂的形式.)为什么他们不会说,好吧,这些是新的图书馆,他们应该被称为进口图书馆,他们应该承担文件扩展名.ILB(或其他)?
如果您想了解如何使用Perl解释器线程,有良好的文档perlthrtut(线程教程),并在threads附注手册页.写一些简单的脚本绝对够好.
但是,我发现在网络上的一些指导,为什么和怎样明智地使用Perl解释器线程.事实上,关于它们的讨论并不多,如果人们谈论它们,通常会阻止人们使用它们.
这些线程,可当perl -V:useithreads是useithreads='define';和释放use threads,也被称为的ithread,也许更恰当,以便他们有很大的不同,从由Linux或Windows操作系统或Java虚拟机中的任何内容所提供的线程默认情况下,而是一个共享大量数据被复制,而不仅仅是线程堆栈,因此显着增加了进程大小.(要查看效果,请在测试脚本中加载一些模块,然后在循环中创建线程,每次都按下按键,并观察任务管理器中的内存增加或top.)
[...]每次启动线程时,所有数据结构都将复制到新线程中.当我说全部,我的意思是全部.这包括包括stashes,全局变量,范围内的词汇.一切!
- 编程Perl ithreads之前需要了解的事情(Perlmonks 2003)
在研究Perl ithreads的主题时,你会看到人们不鼓励你使用它们("非常糟糕的主意","从根本上有缺陷",或"从不使用ithreads for any").
Perl线程教程强调"Perl线程是不同的",但它没有太多麻烦解释它们是如何不同以及这对用户意味着什么.
有关ithreads实际内容的有用但非常简短的解释来自WINDOWS PROCESS EMULATIONCoro标题下的联机帮助页.该模块的作者(Coro - perl中唯一真正的线程)也不鼓励使用Perl解释器线程.
在某处我读到,在启用线程的情况下编译perl会导致解释器显着变慢.
有从2003年Perlmonks页面(你需要的东西之前的Perl编程的ithread知道),其中笔者问:"现在你可能想知道为什么Perl中的ithread不使用fork()那不是已经取得了很多更有意义?" 这似乎是由forkspragma 的作者写的.不确定该页面上提供的信息在2012年仍适用于较新的Perls.
以下是Perl中线程使用的一些指导原则,我从读数中提炼出来(可能是错误的):
HTTP::Async,or AnyEvent::Socket或Coro::Socket.所以在Bash中你只需配置PS1为你的提示添加颜色.我说的是正确的提示,而不是前景(文本)或背景的颜色.它在Bash中非常简单,如果你需要在凌乱的文本输出中找到你的命令,它会有很大的帮助.
您是否可以cmd.exe为PowerShell 实现相同或后退?彩色提示?
我不知道是否可以通过加载在Win32之前的日子里完成ANSI.SYS.我认为这只是为了使前景和背景丰富多彩.但我可能错了.无论如何,那些日子已经过去,在我们现代(我知道),我们正在使用cmd.exe,或PowerShell.
我知道cmd.exe和PowerShell都能够进行彩色输出.对于cmd.exe,只需运行color /?即可查找.但我的问题不是关于前景和背景,这是人类都知道的 - 它只是改变cmd.exe的提示颜色,可能是通过PROMPT环境变量通过PS1变量为Bash?可能吗?
不,Cygwin不是替代品.我是使用MinTTY的Cygwin用户,我喜欢它.但我仍然希望我的cmd.exe提示色.
我刚刚发生了标题中的陈述.完整的报价是:
根据经验,使所有方法都是虚拟的(包括析构函数,而不是构造函数),以避免与遗漏虚拟关键字相关的问题.
我在Wrox的专业C++书中找到了这个.你可以谷歌检查.
有什么事吗?我原以为你只提供选择扩展点,而不是默认的可扩展性.例如,Herb Sutter在2001年发表的一篇文章就这么说了.从那时起,有什么改变发生了戏剧性的规范吗?(请注意,我是一名C++ noob,因此我在过去十年中没有关注过这个问题.)
我正在尝试使用IIS 7.5运行Perl/FastCGI(FCGI).版本C:\Windows\System32\inetsrv\iisfcgi.dll是7.5.7601.17514.这是我web.config和我的Perl脚本:
D:\MiLu\Dev :: more /t1 web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="true" />
<handlers>
<add name="FCGI" path="*.pl" verb="*"
modules="FastCgiModule"
scriptProcessor="C:\Opt\Cygwin\bin\perl.exe"
resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>
D:\MiLu\Dev :: more /t4 Perl\fcgi\count.pl
use strict;
use warnings;
use FCGI;
my $count = 0;
my $request = FCGI::Request();
while ( $request->Accept >= 0 ) {
print "Content-type: text/html\r\n\r\n", ++$count;
}
Run Code Online (Sandbox Code Playgroud)
所有我得到的是一个带有IIS通用错误页面的500,说明"FastCGI进程意外退出"并列出了可能的错误原因.
脚本从命令行运行正常,打印其三行然后立即退出,表明脚本和模块安装正常.(顺便说一下,我从FCGI手册中复制了它,所以应该没问题.)
D:\MiLu\Dev :: C:\Opt\Cygwin\bin\perl.exe Perl\fcgi\count.pl
Content-type: text/html
1
Run Code Online (Sandbox Code Playgroud)
有一个FCGI::IIS module,但是,它仅出现在IIS …
默认情况下,穆斯非常宽容.您可以拥有一个名为的类Cucumber,并将未声明的属性(如wheels)传递给构造函数.Moose默认不会抱怨.但我可能更喜欢穆斯而die不是接受未申报的属性.我怎样才能做到这一点?我似乎记得读过它是可能的,但是在文档中找不到它所说的地方.
package Gurke;
use Moose;
has color => is => 'rw', default => 'green';
no Moose;
__PACKAGE__->meta->make_immutable;
package main; # small test for the above package
use strict;
use warnings;
use Test::More;
use Test::Exception;
my $gu = Gurke->new( color => 'yellow' );
ok $gu->color, 'green';
if ( 1 ) {
my $g2 = Gurke->new( wheels => 55 );
ok ! exists $g2->{wheels}, 'Gurke has not accepted wheels :-)';
# But the caller might not …Run Code Online (Sandbox Code Playgroud) 所以我们在Oracle中有这个SYS_CONTEXT函数,它有两个参数,第一个是命名空间,第二个是参数名.有一个预定义的命名空间USERENV,它带有各种参数,确切的数量和名称取决于所使用的Oracle版本.
使用Firefox和Firequery,您可以从上面链接的Oracle doc页面获取所有参数名称的列表,如下所示:
$("tr > td[id] > p > code").map(function () { return $(this).text() })
Run Code Online (Sandbox Code Playgroud)
然后你可以构建一个读取和输出整个上下文的过程 - 至少对于你已经获取参数的版本.
但抛开这种静态的阅读方式SYS_CONTEXT/USERENV,是否有一种动态的方式呢?数据字典中的某些地方列出了有效参数的名称USERENV?
至于我为什么要阅读它USERENV,它只是为了闲置的学习目的和好奇心.
考虑以下两个涉及VBScript中按位比较的条件:
If 1 And 3 Then WScript.Echo "yes" Else WScript.Echo "no"
If Not(1 And 3) Then WScript.Echo "yes" Else WScript.Echo "no"
Run Code Online (Sandbox Code Playgroud)
我认为输出应该是:
yes
no
Run Code Online (Sandbox Code Playgroud)
但实际输出是:
yes
yes
Run Code Online (Sandbox Code Playgroud)
等待一秒钟,所述Not操作者应该在的表达式执行逻辑非.据我所知,逻辑否定true是false.我必须得出结论认为它不符合这一承诺吗?怎么样,为什么以及这里发生了什么?理由是什么,如果有的话?
由于不完整的数据被提供给我的Moose构造函数,我收到了很多 QA 例外.属性名称存在于构造函数参数中,但值为undef.
事实上,许多脚本应用程序都是生活中的事实undef.而且这通常很好.你不希望来自warningspragma 的烦人的警告(所以你这样做no warnings 'uninitialized'),你当然不希望你的代码死掉,因为一个小的值,比如房子号,就是undef.
所以不用多说,我希望我的Moose构造函数表现得像直接Perl(即没有use warnings 'uninitialized'),这是根据需要转换undef为0空字符串.此示例中显示的尝试不适用于存在属性名称但值为的情况undef.我可以想到BUILDARGS用来实现我想要的东西.但是,在没有使用MooseX :: UndefTolerant(不幸的是我不能使用,因为它没有安装)的情况下,在普通的Moose中是否有一种声明性的方式?
package AAA;
use Moose;
has 'hu', is => 'ro', isa => 'Str';
has 'ba', is => 'ro', isa => 'Int';
no Moose; __PACKAGE__->meta->make_immutable;
package BBB;
use Moose; extends 'AAA';
has '+hu', default => ''; # don't want to die on undef
has '+ba', default …Run Code Online (Sandbox Code Playgroud) 我担心这是一个基本问题.看看下面的代码.我想知道是否有声明的方式slices属性,以这样的方式,以避免的样板get_slices和add_slice.
package Gurke;
use Moose;
has slices => is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] };
sub get_slices { return @{ $_[0]->slices } }
sub add_slice {
my( $self, $slice ) = @_;
push @{ $self->slices }, $slice;
return;
}
no Moose;
__PACKAGE__->meta->make_immutable;
package main; # now a small test for the above package
use strict;
use warnings;
use Test::More;
my $gu = Gurke->new;
$gu->add_slice( 'eins' );
$gu->add_slice( 'zwei' ); …Run Code Online (Sandbox Code Playgroud)