What is a Shim?

2019-01-30 00:15发布

What's the definition of a Shim?

8条回答
走好不送
2楼-- · 2019-01-30 00:36

From Wikipedia:

In computer programming, a shim is a small library that transparently intercepts an API, changing the parameters passed, handling the operation itself, or redirecting the operation elsewhere. Shims typically come about when the behaviour of an API changes, thereby causing compatibility issues for older applications that still rely on the older functionality. In these cases, the older API can still be supported by a thin compatibility layer on top of the newer code. Shims can also be used to run programs on different software platforms than they were developed for.

查看更多
我只想做你的唯一
3楼-- · 2019-01-30 00:43

The General Concept - Simple Explanation via Cartoon

An example of a shim:

My Dog Ralph is one lucky bash-tard (double pun intended)

Summary

A shim is some code that takes care of what's asked (by 'interception'), without anyone being any wiser about it. This is the general concept. Please refer to the answers above for something more technical.

查看更多
成全新的幸福
4楼-- · 2019-01-30 00:51

As for origins of the word, quoth Apple's Dictionary widget

noun
   a washer or thin strip of material used to align parts, 
   make them fit, or reduce wear.

verb ( shimmed, shimming) [ trans. ]
   wedge (something) or fill up (a space) with a shim.

ORIGIN early 18th cent.: of unknown origin

This seems to fit quite well with how web designers use the term.

查看更多
祖国的老花朵
5楼-- · 2019-01-30 00:57

The term "shim" as defined in Wikipedia would technically be classified, based on its definition, as a "Structural" design pattern. The many types of “Structural” design patterns are quite clearly described in the (some would say defacto) object oriented software design patterns reference "Design Patterns, Elements of Reusable Object-Oriented Software" better known as the "Gang of Four".

The "Gang of Four" text outlines at least 3 well established patterns known as, "Proxy", "Adapter" and "Facade" which all provide “shim” type functionality. In most fields it’s often times the use and or miss use of different acronyms for the same root concept that causes people confusion. Using the word “shim” to describe the more specific “Structural” design patterns "Proxy", "Adapter" and "Facade" certainly is a clear example of this type of situation. A "shim" is simply a more general term for the more specific types of "Structural" patterns "Proxy", "Adapter", "Facade" and possibly others.

查看更多
你好瞎i
6楼-- · 2019-01-30 00:57

Shims are used in .net 4.5 Microsoft Fakes framework to isolate your application from other assemblies for unit testing. Shims divert calls to specific methods to code that you write as part of your test

查看更多
The star\"
7楼-- · 2019-01-30 00:58

According to Microsoft's article "Demystifying Shims":

It’s a metaphor based on the English language word shim, which is an engineering term used to describe a piece of wood or metal that is inserted between two objects to make them fit together better. In computer programming, a shim is a small library which transparently intercepts an API, changes the parameters passed, handles the operation itself, or redirects the operation elsewhere. Shims can also be used for running programs on different software platforms than they were developed for.

I interpret this to mean that a shim is a generic term for any library of code that acts as a middleman and partially or completely changes the behavior or operation of a program. Like a true middleman, it can affect the data passed to that program, or affect the data returned from that program.

The article uses the Windows API as an example, and I found the following sentence relevant:

The application is generally unaware that the request is going to a shim DLL instead of to Windows itself, and Windows is unaware that the request is coming from a source other than the application (because the shim DLL is just another DLL inside the application’s process).

To generalize this quote, the two programs that make the "bread" of the "shim sandwich" should not be able to differentiate between talking to their counterpart program and talking to the shim.

What are some pros and cons of using shims?

Again, from the article:

You can fix applications without access to the source code, or without changing them at all. You incur a minimal amount of additional management overhead... and you can fix a reasonable number of applications this way. The downside is support as most vendors don’t support shimmed applications. You can’t fix every application using shims. Most people typically consider shims for applications where the vendor is out of business, the software isn’t strategic enough to necessitate support, or they just want to buy some time.

In the context of this question, terms like "proxy", "adapter", and "facade" make more sense (at least to me) after having read the above link.

查看更多
登录 后发表回答