wingolog

value representation in javascript implementations

18 May 2011 4:57 PM (javascript | ecmascript | scheme | igalia | guile)

In my last note I mentioned that I had been doing a lot of reading of JavaScript implementation code. One point that I didn't mention is that the state of the art is completely undocumented. So to work on rectifying that, here's the first in what might be a series of articles about the internals of JavaScript implementations.

tagging

Initially, all JavaScript implementations used tagged pointers to represent JS values. This is a old trick that comes from the observation that allocated memory takes up at least 4 or 8 bytes, and are aligned in such a way that the least significant bit or three will be zero.

Here's an old part of the Guile manual that explains the technique. For example you could take values whose lowest bit is 1 to be a pointer to the heap. Any value that ends in 0 could be an integer, represented directly in the bits of the pointer. (If your pointer tag is not 0, you will have to mask off the low bits before dereferencing a pointer..)

Google's V8 JavaScript engine still does it this way. This yields 31-bit immediate signed integers; you can just do a signed right-shift to get the value. They call them "smi" values, for "small integers"; they are more commonly called "fixnums". There are other fun tricks you can do to avoid shifts for some common operations, like addition. Note that they also take advantage of the four-byte alignment (in their case) to encode another immediate value, "failure objects", using the other low bit.

The size of a tagged pointer is the size of a pointer, so 32 bits on a 32-bit machine, and 64 on a 64-bit machine. V8 doesn't actually use 63-bit smi values on 64-bit machines, AFAIK.

nan-boxing

JavaScriptCore, the implementation used by WebKit, switched from tagged pointers to a "nan-boxed" format. The best explanation of this strategy is given by Rob Sayre of Mozilla. I believe the technique was first made popular by LuaJIT, though I would appreciate additional references.

Sayre does a good job of explaining things, but to recap, there are about 253 bit patterns that represent not-a-number values for IEEE-754 double-precision floats, but that only one of those is actually emitted by current hardware and software. So cheeky implementations are free to use the other patterns for their own purposes.

What I always wondered when I heard about this strategy was how 53 bits were possibly enough, for a 64-bit machine. How are you going to fit a pointer in that space?

Well it turns out that on x64-64 systems, you only have a 48-bit address space, currently anyway. The shape of that space is quite peculiar, too. I don't know whether Linux gives out addresses in the upper half, but Windows does not, though Solaris does.

Anyway, the other way of looking at NaN-boxing is that there are 264 - 248 values in a pointer that aren't being used, and we might as well stuff something in them, and hey, the whole space of valid double precision numbers fits!

It's convenient too that numbers in JS are specified as doubles. (Even still, all implementations define separate "small integer" types, for use in loops and indexing and such; integer operations are faster when you can use them, too.)

JSC's implementation of nan-boxing is described here, and you can see some of the neat tricks they do here. It actually makes me envious of C++, as a C programmer!

nun-boxing

So, when you choose to do nan-boxing, you basically choose to do one of two things: you favor pointers, or you favor doubles. To favor pointers means that you recognize pointers as having initial (most-significant) 0 bits; if the initial bits are not 0, then it's a double, and you have to add or subtract a bit pattern to get to the double value.

Favoring doubles means that pointers are left as NaN values, so their initial bits are all ones (or the sign bit can be unset, it doesn't matter), and to unpack a pointer, you have to rotate the double space around.

Amusingly, there is a third option as well. For 32-bit machines, you can address the second word in the double directly, so there is no need to mask off anything. This is the JSVALUE32_64 case mentioned in the JSValue code I linked to above.

JSC chose to favor pointers, and as the first JS implementation to nan-box, got to call their choice "nan-boxing". Mozilla chose to favor doubles, and so made up the silly name "nun-boxing".

get thee to a nun boxery?

So you're implementing a language. Should you nan-box or not? I can't say in your case but I can give a couple of examples.

NaN-boxing has the obvious advantage of not allocating doubles on the heap. This reduces cache pressure, GC pressure, and such. That's why Moz and JSC chose it.

V8 on the other hand has not chosen it, at least not yet, anyway. I think that one reason is because especially on embedded devices, and to an extent on ia32, passing around 64-bit values is a big lose. It's so bad that I understand that Mozilla actually passes these values by reference instead of by value in some places, on 32-bit systems only.

But the real reason that V8 doesn't nan-box I think is that they have a compiler that is able to unbox values in registers and in temporary stack locations, both as int32 values and as double values. This works for loops and such things in a function, and is obviously quite efficient, as you don't need to box and unbox at all. Passing doubles as arguments or return values however does allocate them on the heap, as far as I can tell anyway.

Also there is the hackery that with NaN-boxing, you assume things about your OS's memory management. A language implementation should be able to get around this with use of mmap at specific addresses, but still, it's tricky.

I looked at doing nan-boxing for Guile, and eventually decided against it. Guile has a few more constraints that V8 does not have. Firstly it is very portable, so it can't rely the address range constraints that x86-64 has, not without some hackery. It's also portable to the low end, like V8, so 64-bit values are a lose there.

But the killer is the conservative GC on 32-bit systems. If you represent integers with the tag in the high bits, as you would with nan-boxing, then the lower 32 bits are not distinguishable from a pointer, so they can cause the GC to retain heap objects for longer than it should. With tagged pointers, the low-bit masking lets the GC know that an integer is not a pointer. If you were to reintroduce low-bit tagging to a nan-boxed system, you've lost much of the advantage of it. Furthermore if you want to support more than 32 bits of precision in a fixnum, then on a 32-bit system you need to play games with sign extension of a 48-bit value to a 64-bit value, and for all word sizes it looks like the overhead will be significantly higher than tagging.

Finally I think that if we're really going to shoot for the moon, we should implement something like V8's Crankshaft compiler that does decent type inference, to allow unboxed values in registers and on the stack. (For readers of source code, "crankshaft" is basically the "hydrogen" flow-graph code plus a "lithium" assembler. Confusing, right?)

Well that's all for now. If you corrections, or an idea for a further topic, let me know in the comments. Thanks!

124 responses

  1. John Cowan says:

    I have discussed this topic with someone who is working on a nun-boxing implementation of R5RS Scheme. He is restricting the non-doubles to be *signaling* NaNs, thus avoiding the unsafe assumption that only one particular (quiet) NaN is *the* representation of NaN.

    Chibi Scheme, which uses the tagged pointer system, used to have a configuration-time option (for 64-bit systems only) to use 32-bit floats as Scheme inexact values, directly embedded in the pointer. Apparently this has been removed now.

  2. Jeff Walden says:

    v8 won't have 63-bit small integers because JavaScript doesn't have an integer type at all. Every number in play is just an IEEE-754 double precision number, which of course can't represent all 64-bit integer values (integers of magnitude up to 2**53ish, yes, but past that some integer values just don't exist). So there's no real reason to have larger small integers, and indeed there might be some reason not to, because adding 32-bit numbers may well be slightly faster than adding 64-bit numbers.

    The most ideal non-31-bit integer value to have would probably be 32-bit integers -- crypto algorithms in particular could benefit from not having to go to double when the high bit gets set, although runtime techniques can substantially mitigate this cost -- but again I suspect the 32-bit add versus 64-bit add is problematic.

  3. Mac says:

    Here's an article pointing to a 1993 paper on value representation techniques (nice, easy read) which also mentions NaN tagging briefly:

    http://lambda-the-ultimate.org/node/3912

  4. Dave Mandelin says:

    Good summary of the main design points and tradeoffs. Some comments:

    On nax-boxing or not, my guess is that the original reason V8 didn't nan-box is that they have always had a good generational GC, which makes allocating doubles on the stack pretty cheap. In systems that don't have generational GC, putting doubles on the heap was way too expensive. And even with V8's generational GC, before Crankshaft came out, Jaegermonkey and Tracemonkey were generally faster on floating-point code, because of the nan-boxing.

    Once you have an optimizing compiler that can operate mostly on unboxed values (Tracemonkey and Crankshaft), then the boxing format doesn't matter much at all, because you are not using boxed values in hot code. But I really doubt Crankshaft influenced the value format of the original V8.

    I'm a bit surprised about your point about conservative GC--is an untagged int that likely to point inside the GC heap? We currently use conservative GC but we haven't had any evidence that that problem bites us, and I'm sure there's a lot more random stuff than boxed values on the C stack anyway, at least in a browser.

    To add further to what Jeff says, floating point arithmetic seems to be about as fast as integer arithmetic now, so the big cost of using floats is in conversion to ints, which happens for bitops and array indices. But bitop inputs are always logically 32 bits in JS and array indices are going to be 32 bits or less in practice.

  5. Alex says:

    "If your pointer tag is not 0, you will have to mask off the low bits before dereferencing a pointer."

    Don't most processors these days have a mem[ptr-const] addressing mode?

  6. Luke Wagner says:

    Nice article! Just a few nits: the name "nunbox" refers to nan-boxing on 32-bit architectures and is roughly equivalent to JSC's JSVALUE32_64 (the 'u' in 'nunbox' is for 'unboxed' since, as you pointed out, the low word is unboxed). The 64-bit nan-boxing encoding used by SpiderMonkey is named "punboxing" (the 'p' is for 'packed', since this scheme is logically like nunboxing, but with all the unused bits sucked out).

  7. Sandro says:

    The IEEE 754 tagged pointer representation used by LuaJIT was first invented in 1997 for an implementation of parallel Haskell.

  8. gfour says:

    Sandro: NaN-boxing is older than the parallel Haskell technique -- it was for example described by Gudeman in section "2.6.1 Using IEEE NaN Codes" of "Representing Type Information in Dynamically Typed Languages" (1993).

  9. Kane York says:

    > I don't know whether Linux gives out addresses in the upper half, but Windows does not, though Solaris does.

    Linux seems to only use the upper half for virtual syscalls on my current kernel build:

    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

    It's probably a build-time option, though.

  10. Case Studies Solutions says:

    I am certain this post has offered me some assistance with saving numerous hours of perusing other related presents just on find what I was searching for. Much obliged!

  11. C Assignment Help says:

    Awesome enlightening site. I'm truly awed subsequent to perusing this blog entry. I truly welcome the time and exertion you go through to impart this to us!

  12. Turkcell Case Solution says:

    I am to a great degree astonished at what I found here. It is a remarkable Article. Much obliged to you much.

  13. successful technologies used classroom says:

    Apart from classrooms, the term SmartClass is usually used for the technology equipped classes for the benefit of students. Here are some more which you will be interested in.

  14. merry christmas 2016 cards says:
  15. shareit app says:
  16. happy new year says:
  17. SSC Result 2017 says:

    Nice articleSSC Result 2017

    Very much intersting to read such a nice a posting / articleAP SSC Result 2017

    Nice and informativeGoa SSC Result 2017

    Good and informative postGujarat SSC Result 2017

    Nice and informativeMaharashtra SSC Result 2017

    Good and excellent articleTelangana SSC Result 2017

  18. raees says:

    Eager to know about upcoming movie raees

    click
    Raees Release Date
    raees Story
    Raees Cast
    Raees Actress

  19. New Year 2017 Poems says:

    Short New Year Poems are best for sending through mobile. With the ... Wish you all a very happy New Year and hope you loved these poems.New Year 2017 Poems

  20. YO YO says:
  21. Happy New Year says:
  22. new year sms says:
  23. the professional hackers says:

    nice article

  24. happy new year 2017 Wishes says:

    Happy New Year 2017 Poems: The new year is an occasion to celebrate fresh beginnings. It is time and energy to celebrate having a clean slate.

  25. super bowl 2017 live streaming says:

    Today mаkеs іt оnе week untіl Super Bowl 51, as the Broncos and Panthers are en route to Santa Clara.

  26. Rupali Sharma says:
  27. ANDREW says:

    Download all hollywood movie in 720p and 1080p Yify Torrent Download Link with free Download direct Yts Yify Links.

  28. ANDREW says:

    Download all hollywood movie in 720p and 1080p Yify Torrent Download Link with free Download direct Yts Yify Links.

  29. http://www.christmas-pictures.net/ says:
  30. http://www.merrychristmasimagess.net/ says:
  31. Riyo says:

    Tv series,Tv series Download,Tv series Download in 480p and 720p,Download Tv Series, Free English Tv Series

  32. Showbox says:
  33. PSnama says:
  34. John says:

    this is very nice article On shareit on PC. You can use SAHREit for PC Download very easily from there. nice.

  35. Crazyask says:

    Every one knows about how to create blogs today. They are lacking behing foreign bloggers in the knowledge of getting traffic. The tips published in various blogs are not sufficient to get more than 5000 visitors daily. I hope I will also get traffic like these bloggers soon.Techlazy.comHowmate.comCrazyask.comUpdateLand.comFeedegg.comTechube.comDeep web linksDark web linksDarknet MarketsHow to access the Dark WebHow to access the Deep Web

  36. How mate says:
  37. Sankeh says:
  38. siteadd1 says:
  39. Dark Web says:
  40. SK says:
  41. IPL Auction 2017 says:

    What's Going down i am new to this, I stumbled upon this I have discovered It positively useful and it has aided me out loads. I am hoping to contribute & aid different users like its helped me. Great job.IPL Auction 2017IPL 2017 AuctionIPL AuctionIPL auction liveIPL auction 2017 liveIPL auction 2017 live streaming

  42. Royal Rumble 2017 says:
  43. Alone Status says:

    Thanks for Sharing this.

  44. Love Status says:

    Nice Post

  45. happy new year 2017 images says:

    happy new year 2017 images

  46. Happy new year 2017 images says:

    Just loved this post.

  47. New Year Wishes 2017 says:

    Nice information that you share with us :) I hope every programmer will get you point.

  48. Rodney B says:

    Thank you for this awesome information. I'll bookmark this page. Thank you once again. happy valentine day imageshappy valentine day cardhappy valentine day imagesvalentines day memevalentines day poems

  49. clipart says:

    Thank you for this awesome information.

  50. free clipart says:

    thanks

  51. happy new year 2017 wallpaper says:

    nicepost

  52. valentines day clip arts says:

    thanks man

  53. valentines day cards for sister says:

    awsome post

  54. blackmart alpha says:

    good post

  55. garageband for windows says:

    well post man

  56. Katy says:

    We Are back with This New Project! New domain! On Project Free Tv you can watch all your favorite Movies and Watch Series online for FREE.

    The Project Free TV ShowWatch Rogue One: A Star Wars Story Online FreeWatch Bad Santa 2 Full Movie Online FreeWatch Collateral Beauty Online FreeWatch Sing Full Movie Online FreeWatch La La Land Online FreeWatch Moana Movie Online FreeWatch Arrival Movie Online FreeWatch Trolls 2016 Movie Online FreeWatch Hacksaw Ridge Movie Online FreeWatch Manchester by the Sea Movie Online FreeWatch Allied Movie Online FreeWatch Almost Christmas Online FreeWatch Fantastic Beasts and Where to Find Them Online FreeWatch Doctor Strange Online FreeWatch Bad Neighbours 2 Movie Online FreeNerve Full Movie Watch OnlineEdge of Winter Full Movie Watch OnlineMorris from America Full Movie Watch OnlineThe Legend of Tarzan Full Movie Watch OnlineIce Age Collision Course Full Movie Watch OnlineThe Purge Election Year Full Movie Watch OnlineGhostbusters Full Movie Watch OnlineMechanic 2 Resurrection Full Movie Watch OnlineKrampus Full Movie Watch OnlineWatch Unfriended Full Movie OnlineWatch Beyonce Lemonade Online FreeWatch The Danish Girl Online Full MovieWatch Lion Online Full Movie Free

  57. vijay says:
  58. deep says:
  59. popular wishes says:
  60. gaurav manral says:
  61. gaurav says:
  62. dasdsadsa says:
  63. Estale Hall says:

    Here is list of Best Free Streaming Sites for Watch Movies and tv shows online

  64. republic day says:
  65. Article Writing Service says:

    it's really nice and meanful. it's really cool blog. Linking is very useful thing.you have really helped lots of people who visit blog and provide them usefull information.

  66. Thesis Help says:

      I loved the way you discuss the topic great work thanks for the share.

  67. Bluetooth App Sender Apk Download says:

    I loved the way you discuss the topic great work

  68. live free stream score says:

    good deals in united states download clipart

    live stream

  69. Happy Makar Sankranti 2017 Wishes images says:
  70. love quotes says:
  71. motu patlu games says:
  72. csgo lounge says:

    I thought about this, I accepted my fate for the first days. I make sure I take at least 2 weeks vacation and I try not to do anything

  73. Happy New Year 2017 HD Wallpaper For IPhone says:

    cool idea sir, well i want to try this and i'am get excited about this love it.Happy New Year 2017 HD Wallpaper For IPhoneHappy New Year Wallpaper For MobileHappy New Year Images Free Download

  74. Pranshu Kharkwal says:
  75. cassidy bio wiki says:

    This is the post about celebrity net worht of cassidy

  76. dds says:

    DDS Dentist and dmd dentist are the same. Tooth extractionTooth implants

  77. ultimate tech news says:

    Really nice post. I loved the idea totally and am excited for this

  78. Valentine Day Images says:
  79. Meet says:

    Nice and informative post. Thanks to check EPF Status Happy to Read.

  80. janice says:

    Awesome Post and great content.freestore apk download

  81. jone robert says:
  82. Jonny says:

    http://gofishtalk.com/forum/topics/steve-harvey-net-worth-income-earning
    http://adeum.com/EN/offers/movies_dvds/other/000134980.html
    http://articlebyclick.com/submit.php?c=20
    http://www.askpins.com/21703-why-are-you-happy-about-growing-up/
    http://losangeles.daype.com/electronics/entertainment/The-net-worth-height-weighta-and-body-measurements-of-steve-harvey-Ad-35787208.html

  83. Jonny says:
  84. Mother says:

    We wish a very happy mother's day 2017 to everyone.

  85. Daniel says:

    Well done with the content section. Loved your stuff always. Keep posting such useful info always. Check out some of the Brilliant Printable January 2017 Calendars here.

  86. Jain says:

    Best app for ios users to play all kinds of games for free. Delta emulator ios app is very popular to play games whenever you want for free.

  87. ADIL says:
  88. bhim app for ios says:
  89. ok jaanu says:
  90. dreamhost.net says:
  91. best keurig coffee maker 2017 says:
  92. Skumar says:

    Free tv full episodes online streaming. Project free tv offer you recently aired new episodes and internet Videos free!Putlocker WatchThe Project Free TV Show

  93. Net worth says:

    Steve Harvey is one entertaining man, I've been watching him perform since I was a young man, and I should state that I've appreciated each film or demonstrate that he has showed up on. Sources:

    Steve Harvey Net Worth 2016Steve Harvey Net WorthSteve Harvey Net WorthSteve Harvey Net Worth 2017Steve Harvey Net Worth 2016-7Steve Harvey Net Worth 2016

  94. States says:
  95. Movie Box says:

    You have written such an appreciable post movie box thank you so much for sharing this information with all of us.

  96. dc rd says:
  97. dc rd says:
  98. ajay says:

    We all know Valentine’s day is eagerly waited by Love couples or even singles as well thinking to get their love partner. People also wait for Valentine Week list and dates

  99. Salary States says:
  100. Rapper says:

    Fredo Santana is the stage name of Derrick Coleman. He is American rapper conceived in Illinois in the city of Chicago. He is a more seasoned cousin of Chicago Keef, a Chicago rapper. The principal make a big appearance collection was called Trapping Ain't Dead and it got discharged in the year 2013 utilizing Savage Squad mark.

    His first mixtape is under name of Scary Site and it was discharged in 2012 and it highlighted the generation of many individuals incorporate C-Sick, Leek E Leek, 12Hunna, Young Chop among others. The second mixtape is called Fredo Kruger and it was discharged in 2013, highlighting individuals like Young Scooter, Soulja Boy, Juelz Santana and Migos. In 2013, he showed up of music video of Drake called Hold On, We're Going Home. He was depicting a terrible person that captured the sweetheart of Drake. His presentation collection highlighted Kendrick Lamar, PeeWee Longway and Chief Keef with different individuals from Glory Boyz Entertainment. The Scary Site 2 got discharged in 2013. In 2014, he said that he would discharge the joint effort with Keef called Blood Thicker than Water. His third collection is Walking Legend.

    From his life story, Fredo Santana is additionally called Big Boss Fredo and he is a rapper of United States. He is renowned since he is a co-CEO of record mark of Glory Boyz Entertainment and other CEO is Chief Keef. Fredo Santana is conceived from African and American guardians and they were white collar class family. He began to seek after the singing vocation in 2011. He is 25 years of age; he was given the pay of 352.941 while working in Glory Boyz Entertainment. His total assets is 4.75 million.

    Fredo Santana is a closest companion of Lil Reese and he had alluded to him in a considerable lot of his tunes. He had visitor appearance in a portion of the melodies of Juelz Santana, Young Scooter and Soulja Boy.

    He earned his salary through marking tunes and collection contracts for Jealous, Bird Talk and I Need More. He additionally earned cash from the sponsorship or having his melodies including on projects. Fredo Santana has two things that make him well known, it is the Trap Music and the tattoos he has all over including the tattoo at the brow.

    Fredo Santana's better half is Madzilla, an Instagram show known for the tattoos on her body simply like Fredo Santana. She is an excellent lady and she has much more tattoos contrasted with that of her beau.

    Fredo Santana propelled dress line from architects and specialists. These T-shirts are hand crafted and they can be delivered around the world. He additionally advances his name Savage Squad Record name which is another wander added to his entrepreneurial muscle. The garments line incorporates hoodies, sweatshirts, and shirts with the wording Fredo in the Cut, Savage Squad Records and Trappin Ain't Dead. The garments might be purchased on the web.

    Fredo Santana Net Worth 2017Fredo Santana Net Worth 2016Fredo Santana Net Worth UpdatesFredo Santana Net Worth PageFredo Santana Net WorthFredo Santana Net Worth and SalaryFredo Santana Net Worth is $3 Million

  101. TI Rapper says:
  102. sbi credit card status says:
  103. happy Valentines Day 2017 says:
  104. Happy Friendship day Images says:
  105. tinder without facebook says:

    hank for the post man

  106. valentiens day quotes in hindi says:

    thanks for the post ma n

  107. valentines day cards says:

    thans for the post man

  108. diets that work says:

    This was a great read, and really appreciate the time and effort you took to post this. Thanks! diets that work

  109. happy makar sankranti images says:
  110. bahubali2 movie says:
  111. Adam says:

    Best tattoos designs

    tattoos ideas and designs

  112. clipart says:

    Allowlive sports blog all major sports football,basketball,rugby,cricket,tennis,cricket formula 1.

    What do I find in https://allowlive.com/ ?

    In Allowlive you can find All Sports Team:

    Real Madrid live stream,Barcelona Live Stream,Atletico Madrid Live Stream,Chelsea Live Stream,Manchester United Live Stream,Arsenal Live Stream,Manchester City Live Stream,Tottenham Live Stream,Liverpool Live Stream,Juventus Live Stream,Inter Live Stream,Napoli Live Stream,Roma Live Stream,Fiorentina Live Stream,Milan live stream PSG Live Stream,O.Lyon Live Stream,Bayern Munich Live Stream,Borussia Dortmund Live Stream.

    You can all sports watch:

    Live Stream,Live Stream Free,Live Streaming,Premier League Live Stream,La Liga Live Stream,Serie A Live Stream,Bundesliga Live Stream,Ligue 1 Live Stream, Match Live Stream,Match Predictions,Match Preview,Football Predictions,Match Highlights,Live Score.

    You can see teams news:

    Real Madrid News,Barcelona News,Atletico Madrid News,Chelsea News,Manchester United News,Arsenal News,Manchester City News,Tottenham News,Liverpool News,Juventus News,Inter News,Napoli News,Roma News,Fiorentina News,PSG News,O.Lyon News,Bayern Munich News,Borussia Dortmund News

    Real Madrid Highlights,Barcelona Highlights,Atletico Madrid highligts,Chelsea Highlights,Manchester United Highlights,Arsenal Highlights,Manchester City Highlights,Tottenham Highlights,Liverpool Highlights,Juventus Highlights,Inter Highlights,Napoli Highlights,Roma Highlights,Fiorentina Highlights,PSG Highlights,O.Lyon Highlights,Bayern Munich Highlights,Borussia Dortmund Highlights

  113. clipart says:

    Clipart for you in 2016 - Free for commercial and non-commercial use. All clipart with transparency, scaling to any size you want. Free Requests.


    Clip art is a collection of pictures or images that can be imported into a document or another program. The images may be either raster graphics or vector graphics. Clip art galleries many contain anywhere from a few images to hundreds of thousands of images.
    clipart is typically organized into categories, such as people, objects, nature, etc., which is especially helpful when browsing through thousands of images. Most clip art images also have keywords associated with them. For example, a picture of a female teacher in a classroom may have the keywords "school," "teacher," "woman," "classroom," and "students" associated with it. Most clipart programs allow you to search for images based on these keywords.

    When you find a clip art image you want to use, you can copy it to your computer's clipboard and paste it into another program, such as Photoshop or Microsoft Word. You may also be able to export the image to the Desktop or another folder on your hard disk. Most clip art is royalty free, meaning you can use the images without paying royalties to the creators of the images. So if you buy a clip art package with 50,000 images for $50.00, you are only paying 1/10 of one cent for each image. That's a pretty good deal.
    https://clipartninja.com/

    -------------------------------------------------------------

    Clipart for you in 2016 - Free for commercial and non-commercial use. All clipart with transparency, scaling to any size you want. Free Requests.


    Clip art is a collection of pictures or images that can be imported into a document or another program. The images may be either raster graphics or vector graphics. Clip art galleries many contain anywhere from a few images to hundreds of thousands of images.
    free clipart is typically organized into categories, such as people, objects, nature, etc., which is especially helpful when browsing through thousands of images. Most clip art images also have keywords associated with them. For example, a picture of a female teacher in a classroom may have the keywords "school," "teacher," "woman," "classroom," and "students" associated with it. Most clipart programs allow you to search for images based on these keywords.

    When you find a clip art image you want to use, you can copy it to your computer's clipboard and paste it into another program, such as Photoshop or Microsoft Word. You may also be able to export the image to the Desktop or another folder on your hard disk. Most clip art is royalty free, meaning you can use the images without paying royalties to the creators of the images. So if you buy a clip art package with 50,000 images for $50.00, you are only paying 1/10 of one cent for each image. That's a pretty good deal.
    https://clipartfest.com/

    -------------------------------------------------------------------------------

    Clipart for you in 2016 - Free for commercial and non-commercial use. All clipart with transparency, scaling to any size you want. Free Requests.


    Clip art is a collection of pictures or images that can be imported into a document or another program. The images may be either raster graphics or vector graphics. Clip art galleries many contain anywhere from a few images to hundreds of thousands of images.
    clipart is typically organized into categories, such as people, objects, nature, etc., which is especially helpful when browsing through thousands of images. Most clip art images also have keywords associated with them. For example, a picture of a female teacher in a classroom may have the keywords "school," "teacher," "woman," "classroom," and "students" associated with it. Most clipart programs allow you to search for images based on these keywords.

    When you find a clip art image you want to use, you can copy it to your computer's clipboard and paste it into another program, such as Photoshop or Microsoft Word. You may also be able to export the image to the Desktop or another folder on your hard disk. Most clip art is royalty free, meaning you can use the images without paying royalties to the creators of the images. So if you buy a clip art package with 50,000 images for $50.00, you are only paying 1/10 of one cent for each image. That's a pretty good deal.
    https://clipartfox.com/

    -------------------------------------------------------------------------------------------

    Clipart for you in 2016 - Free for commercial and non-commercial use. All clipart with transparency, scaling to any size you want. Free Requests.


    Clip art is a collection of pictures or images that can be imported into a document or another program. The images may be either raster graphics or vector graphics. Clip art galleries many contain anywhere from a few images to hundreds of thousands of images.
    clipart is typically organized into categories, such as people, objects, nature, etc., which is especially helpful when browsing through thousands of images. Most clip art images also have keywords associated with them. For example, a picture of a female teacher in a classroom may have the keywords "school," "teacher," "woman," "classroom," and "students" associated with it. Most clipart programs allow you to search for images based on these keywords.

    When you find a clip art image you want to use, you can copy it to your computer's clipboard and paste it into another program, such as Photoshop or Microsoft Word. You may also be able to export the image to the Desktop or another folder on your hard disk. Most clip art is royalty free, meaning you can use the images without paying royalties to the creators of the images. So if you buy a clip art package with 50,000 images for $50.00, you are only paying 1/10 of one cent for each image. That's a pretty good deal.
    https://clipartpedia.com/

  114. Valentine Day Greeting Cards says:
  115. Chris Brown says:
  116. Progressive insurance login says:
  117. Calendar Images 2017 says:

    [url=http://iprintcalendars.com/]Calendar[/url]

  118. Happy Valntines Day mESSAGES says:
  119. Valentines day says:
  120. valentines day whatsapp status says:
  121. Happy Valentines Day 2017 says:
  122. Happy Valentines Day says:
  123. Arun says:
  124. Super bowl 2017 ads says:

Leave a Reply