count pages in pdf without opening c# : Extract one page from pdf file control application platform web page html .net web browser antocuni-thesis1-part298

Table of Contents
Chapter1 Introduction
6
1.1 Pythonimplementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.1.1 Digression:Python2vs.Python3 . . . . . . . . . . . . . . . . . . . . . . . .
7
1.2 AgentleintroductiontoJustInTimecompilation. . . . . . . . . . . . . . . . . . .
8
1.3 Relatedwork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.4 Contributionsofthisthesis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5 Structureofthethesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Chapter2 Theproblem
12
2.1 IsPythonintrinsicallyslow? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.1 Interpretationoverhead. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.2 Boxedarithmeticandautomaticover owhandling . . . . . . . . . . . . 13
2.1.3 Dynamicdispatchofoperations . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.4 Dynamiclookupofmethodsandattributes. . . . . . . . . . . . . . . . . . . 14
2.1.5 Theworldcanchangeunderyourfeet. . . . . . . . . . . . . . . . . . . . . . 15
2.1.6 Extremeintrospectiveandre ectivecapabilities . . . . . . . . . . . . . . . 17
2.2 Interpretersvs.compilers: : limitsofstaticanalysisforPython . . . . . . . . . . 18
2.3 Oursolution: : automaticallygeneratedJITcompiler . . . . . . . . . . . . . . . . . 19
Chapter3 EnterPyPy
20
3.1 WhatisPyPy? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2
Extract one page from pdf file - control application platform:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others
www.rasteredge.com
Extract one page from pdf file - control application platform:VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc
www.rasteredge.com
3.2 Architectureoverview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 JITcompilergenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.4 WhychoosingPyPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Chapter4 Characterizationofthetargetplatform
26
4.1 Dynamicloadingofnewbytecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2 JITlayering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 Immutablemethods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4 Tailcalls s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4.1 Tailcallsbenchmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.5 Primitivetypesvsreferencetypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.6 Delegates(or:objectorientedfunctionpointers) . . . . . . . . . . . . . . . . . . . 31
Chapter5 TracingJITsinanutshell
32
5.1 WhatisatracingJITcompiler? ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2 Phasesofexecution n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.3 Adeeperlookattraces s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.4 Exampleoftracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.5 Generalizationofthetraceandcodegeneration . . . . . . . . . . . . . . . . . . . 38
5.6 Lineartracesvs. . tracetrees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Chapter6 ThePyPyJITcompilergenerator
42
6.1 Thereisatimeforeverything . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2 ArchitectureoftheJITcompilergenerator . . . . . . . . . . . . . . . . . . . . . . . 43
6.3 Tracingthemetalevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.3.1 ApplyingatracingJITtoaninterpreter . . . . . . . . . . . . . . . . . . . 45
6.3.2 Detectinguserloops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.3.3 Applyingthehints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.4 Loops,bridgesandguards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3
control application platform:C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
C# developers can easily merge and append one PDF document to document imaging toolkit, also offers other advanced PDF document page processing and
www.rasteredge.com
control application platform:VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
This guiding page will help you merge two or more PDF documents into a single one in a Visual Basic .NET imaging application.
www.rasteredge.com
6.5 Escapeanalysisandtraceoptimization . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.5.1 Escapeanalysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.5.2 Reenteringaspecializedloop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.5.3 Forcingvirtuals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Chapter7 TheCLIJITbackend
60
7.1 TeachingtheJITfrontendObjectOrientation . . . . . . . . . . . . . . . . . . . . . 60
7.2 TheinterfacebetweentheJITfrontendandbackend . . . . . . . . . . . . . . . . 61
7.2.1 Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.2.2 Executingoperations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.2.3 Loopsandbridges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.2.4 Executingloops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.3 Compilingloops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.4 Codegeneration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.5 Compilinginnerbridges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.5.1 Entryandexitbridges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Chapter8 Benchmarks
72
8.1 ApplyingtheJITtothePythonInterpreter . . . . . . . . . . . . . . . . . . . . . . 72
8.2 MakingtheinterpreterJITfriendly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
8.3 Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.4 Microbenchmarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8.5 Middle-sizedbenchmarks s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8.5.1 DierencesbetweenMonoandCLR. . . . . . . . . . . . . . . . . . . . . . . . 80
Chapter9 ConclusionandFutureWork
84
9.1 Contributionsofthisthesis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
9.2 Futurework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4
control application platform:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
a solution to conveniently delete one page from your PDF document, you can use this VB.NET PDF Library, which supports a variety of PDF file editing features
www.rasteredge.com
control application platform:VB.NET PDF File Split Library: Split, seperate PDF into multiple
document splitter control provides VB.NET developers an easy to use solution that they can split target multi-page PDF document file to one-page PDF files or
www.rasteredge.com
Bibliography
88
5
control application platform:C# PDF Image Extract Library: Select, copy, paste PDF images in C#
Extract various types of image from PDF file, like XObject Image, XObject PDFPage page = (PDFPage)pdf.GetPage(0); // Extract all images on one pdf page.
www.rasteredge.com
control application platform:VB.NET PDF Annotate Library: Draw, edit PDF annotation, markups in
A PDFDocument object contains all information about source PDF document file. PDFPage: As for one page of PDFDocument instance, RasterEdge VB.NET PDF annotator
www.rasteredge.com
Chapter 1
Introduction
1.1 Python implementations
Python[pyt]isahighly exibleandopensourcescriptinglanguagewhichhassignicantly
growninpopularityinthelastfewyears.ThereferenceimplementationiscalledCPython
andiswritteninC.Thelanguageis implementedby acompilerthat translatesPython
sourcecodeintoaveryhighlevelbytecode,andbyasimplevirtualmachinethatinterprets
thebytecode.
Sincethebeginning,oneofCPythongoalshavebeentokeeptheimplementationsimple
toread,maintainandextend,inorderforthelanguagetobeeasiertomatureandevolve.
However,onedrawbackofthisapproachisthatthenalperformanceoftheprogramsare
notasgoodastheycouldbe.
AlthoughCPythonisthereferenceimplementation,itisnotthesole.Inparticular,overthe
yearsfour maindierentalternativeimplementationsemerged: Jython n [jyt],IronPython
[iro],PyPy [pyp]andUnladenSwallow[unl]
1
.
JythonisanimplementationofPythonwritteninJavaandrunningontheJavaVirtual
Machine(JVM).ContrarilytoCPython,itdoesnotimplementaninterpreterbutinstead
itcompilesPythonsourcecodeintoJVMbytecode.
IronPythonistheJythonequivalentforthe.NETFramework[dot].AsJython,ittrans-
latesPythonsourcecodetobytecodefortheCLI[Int06],whichisthevirtualmachineat
theheart of the .NETFramework. Dueto o thedierencesbetweentheobject modelof
PythonandthenativeobjectmodeloftheJVMortheCLI,bothJythonandIronPython
1
Thesearenottheonlyalternatives toCPython. . Inparticular,thereareforksthatextendCPython
tohavenewfeaturessuchasStacklessPythonandtherearecompilers for Python-likelanguageswhich
aimsatbetterperformance.However,theyarenotrelevantforthetopicofthisthesis.
6
control application platform:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
unnecessary page from target existing PDF document file. Using RasterEdge Visual C# .NET PDF page deletion component, developers can easily select one or more
www.rasteredge.com
control application platform:C# PDF File Compress Library: Compress reduce PDF size in C#.net
document of 1000+ pages to smaller one in a Easy to compress & decompress PDF document file Remove bookmarks, annotations, watermark, page labels and article
www.rasteredge.com
suerperformanceproblemswhentheyhavetodealwithsomehighlydynamicfeaturesof
Python.
Sincethelanguageiscontinuouslyevolving,itishardtokeepallthealternativeimplemen-
tationssynchronizedwiththereferenceone.Amongtheothers,thisisoneoftheproblems
whichPyPyaimstosolve.PyPyisanimplementationofthelanguagewritteninPython
itself: themainideaistowriteahighlevelspecicationoftheinterpreterinarestricted
subsetofPython(calledRPython,forRestrictedPython),tobetranslatedintolower-level
ecient executables for theC/POSIXenvironment,fortheJVMand for the CLI,thus
providingaplatformindependentimplementationofPythonwhichcanbeeasilyportedby
addingthecorrespondingbackendsMoreover,theothermajorgoalofPyPyistodevelop
aJustInTimecompilerforPython,inordertoimprovetheperformanceofthelanguages.
Finally,PyPyismuchmorethanjustanimplementationofPython: indeed,itisagen-
eralframeworktoimplementeectivelyandecientlyallkindsofdynamiclanguagesfor
varioustargetplatforms.
Despite the fact that Jython and IronPythonare compilers and d not interpreters, their
performance is not signicantly better r than CPython, , and often they are even slower.
ThisispartlyduetothefactthatPythonisinherentlyhardtoimplementeciently,and
partlybecauseneither theJVMnortheCLIhavebeendesignedtoimplementdynamic
languages. The e scope ofthis thesis is to demonstrate that it is possible to write very
ecientimplementationsofPython,andmoregenerallyofdynamiclanguages,ontopof
thesevirtualmachines,by portingtheJustInTimecompilationtechniquesofPyPy to
theCLIandtheJVMaswell.
Finally,thelastPythonimplementationthatcameoutinchronologicalorderisUnladen
Swallow:dierentlyfromtheothers,UnladenSwallowisnotwrittenfromscratchbutitis
aforkofCPythontoseekforbetterperformance.AsPyPy,UnladenSwallowimplements
aJustInTimecompilerforPython:however,dierentlythanUnladenSwallowthisthesis
iscenteredontargetingvirtualmachinessuchastheCLI,sotheproblemswehadtoface
aredierent.
1.1.1 Digression: Python 2vs. Python3
Since the beginning each new w versionof Python has s always beenbackward compatible
withtheprecedingones.ThisrulehasbeenbrokenwiththeadventofPython3.0,which
hasbeenintentionallymadeincompatibletoremoveold,unwantedfeaturesandintroduce
newones whichcouldnot beaddedinabackwardcompatible manner. At t themoment
ofwriting,CPythonistheonlyavailableimplementationofPython3,whilealltheother
alternativeimplementationsarestilltargetingPython2.x.
Forthisreason,inthisthesiswetalkaboutPython2.x: however,alltheconceptsapply
7
equallywellalsotoPython3,andtodynamiclanguagesingeneral.
1.2 AgentleintroductiontoJustInTimecompilation
As[AFG
+
05]nicelyillustrates,overtheyearstheproblemofmakingdynamiclanguages
fasterhasbeentackledinanumberofdierentways,whichcanbedividedintotwolarge
categories:
1. writingfastinterpreters
2. writingoptimizingJustInTime(JIT)compilers
Thekeyideabehindfastinterpretersistoreduceatminimumthecostofinterpretation
overhead. Thevarious s techniques tomeet this goalaregreatly summarizedby[EG03]:
however,theyare eectiveonly for those languagesforwhichthecost ofinterpretation
dominatesthetotalexecutiontime.AswewillseeinSection2.1.1,thisisnotthecasefor
Python.
Onthe other hand,JITcompilershave provedto bevery eectiveatoptimizing dier-
ent kinds ofoverheadintroducedby dynamiclanguages. ThemaincharacteristicofJIT
compilersisthattheygeneratemachinecodeatruntimeandonlywhenneeded(hencethe
name,justintime):usuallytheprogramisrepresentedinformofabytecodeforavirtual
machine,whichisportableandarchitectureindependent,tobetranslatedtomachinecode.
Depending on the strategy, a JIT T compiler r can be either the only way to execute the
bytecodeoritcanworksidebysidewithaninterpreter. Inthelattercase,usuallythe
program is s interpreted at rst, , then the e JIT T compiler r optimizes only the e hotspots, , i.e.
thepartsoftheprogramwhichareexecutedveryoftenandthus areresponsibleforthe
majorityofthetimespent.
Tounderlinebetterthedierencesbetweenthe variousstrategies,weintroduceabitof
terminology:
 ABatch or Ahead OfTime(AOT) compilertranslatesthesourcecode(orthe
bytecode)intomachinecodebeforetheprogramstarts.
 A Just In Time e (JIT) compiler translates s the source code (or, , more e often, , the
bytecode)intomachinecodeimmediatelybeforeexecutingit,possiblycachingthe
result toavoidthat the samecodefragmentiscompiledtwice. Inthesubsequent
chapters,wewillabbreviatethetermJITcompilerwith\JIT".
8
 AStaticcompiler r uses exclusively the informationwhichcanbederivedfromthe
sourcecodeorfromthebytecodetoperformthetranslationprocess.
 ADynamicorAdaptivecompilerusesalsoextrainformationcollectedatruntime:
forexample,thecodepathswhicharetakenmostfrequently,thedynamictypesof
theobjectsstoredinagivenvariable,andsoon.
Obviously,dynamiccompilers havebetterchancestogeneratemoreecient code,since
they have more knowledge about the program thantheir static counterpart. Following
thisdenition,itisalsoclearthatwhilealmostallAOTcompilersarestatic,notallJIT
compilersaredynamic.
1.3 Related work
Historically, the e rstimportant contributiontothis research area consistsinthe imple-
mentationoftheSELFlanguage[H
94],whereseveralproposednoveltechniqueshavebeen
reusedandenhancedtoimplementhighlyecientvirtualmachinessuchas HotSpot for
Java[PVC01].
AnotherinterestingprojectformorerecentlanguagesisPsyco[Rig04]:itisanimplemen-
tationofadynamicJITcompilerforPython,whichgeneralizesthetechniquesdeveloped
forSELF,inparticulartheconceptofPolymorphicInlineCache (PIC)[HCU91]. . Itgets
verygoodresults,as programs optimizedby Psyco canrunupto 60times faster than
CPython.However,Psycohassomedrawbacks:
 WhileonthesurfacePythonisacleanandsimplelanguage,underthehoodithasa
verycomplexsemanticswithmanycornercases:thus,developingacompilerwhich
keeps theexact samebehaviour as the reference implementation is veryhardand
timeconsuming.
 Forthesamereason,eachtimethereferenceimplementationevolves,e.g.byadding
anewfeature,theJITcompiler needstobe updated. Overthetime,addingnew
featuresbecomemoreandmorecomplex,astheymayinteracteachotherinvarious
ways. Forexample,implementingsupportforgenerators
2
[SPH01]inPsycotookap-
proximatelyfouryears,provingthatthisapproachdoesnotscalewellasthelanguage
changes.
2
InPython,generators arespecialfunctions s that canbe interruptedandresumedatspecicpoints,
returninganewvalueateachresume
9
 Becauseofthewayitisdesigned,Psycocompilesallcodethatisexecutedfromeach
ofthestartingpointsthatareproled,insteadofcompilingonlythehotspots.Asa
consequence,itendsupusingtoomuchmemory,limitingitsuses.
The author ofthethesis has already explored theimplementationof aPsyco-style JIT
compiler for theCLIin[CAR09]and[ABCR08]: however,the e solutionsbasedonPoly-
morphicInlineCachesrelyonthefactthatitispossibletomodifythecodeatruntime,
afterithasalreadybeenexecuted. AsSection4.3explains,thisfeatureisnotsupported
bytheObjectOrientedVirtualMachinesliketheCLIortheJVMandallthesolutionsto
trytoovercomethislimitationarenotparticularlyecient.
Finally,thereisoneparticularstrategyforimplementingdynamiccompilerscalledTracing
JITcompilation:itwasinitiallyexploredbytheDynamoproject[BDB00]todynamically
optimizemachinecodeatruntime.Itstechniqueswerethensuccessfullyusedtoimplement
a JITcompiler for a a Java VM [GPF06,GF06]. Subsequently y these tracing JITs were
discoveredtobearelativelysimplewaytoimplementJITcompilersfordynamiclanguages
[CBY
+
07]. Thetechniqueisnowbeingusedby y bothMozilla’sTraceMonkey JavaScript
VM[GES
+
09]andhasbeentriedforAdobe’sTamarinActionScriptVM[CSR
+
09].
TracingJITsarebuiltonthefollowingbasicassumptions:
 programsspendmostoftheirruntimeinloops
 severaliterationsofthesamelooparelikelytotakesimilarcodepaths
ThetracingJITapproachisbasedontheideathatmachinecodeisgeneratedonlyforthe
hotcodepathsofmostlyexecutedloops,whiletherestoftheprogramisinterpreted.The
code for those mostly executedloops is highly optimized,including aggressiveinlining.
The dierencewithmore traditionalapproaches,suchas the oneimplementedby Java
HotSpot,isthegranularityofJITcompilation:HotSpotcompileswholemethodsatonce,
while Tracing JIT compilers compile e loops, , which can either r be contained in a single
method,orspanoverseveralonesincaseofinlining. Chapter5explainsindetails s how
tracingJITswork.
1.4 Contributions of this thesis
Thisthesisexploresandinvestigatesnewtechniquestoimplementinanecientandeec-
tivewaydynamiclanguagesontopofobjectoriented,staticallytypedvirtualmachines.In
particular,itintroducestheconceptofJITlayering(seeSection4.2):theideaisthatthe
hostVManditslowlevelJITcompilerdonotknowenoughaboutthedynamiclanguagein
10
questiontooptimizeitinaproperway.Instead,weaddahigherlayerofJITcompilation
thatisspecicforthelanguageanddynamicallyemitsbytecodeforthetargetVMthatis
furthercompiledtobythelowlevelJIT.
Instead of writing a JIT compiler r by hand, we adapt t and use the PyPy JITcompiler
generator(seeChapter6),whichautomaticallygeneratesaJITcompilerfromthesource
codeofaninterpreterforthegivenlanguage. Itisimportanttounderlinethatthework
doneonthePyPyJITcompilergeneratoritisnotsolelyoftheauthorofthethesisbutof
thewholePyPyteam. TomakethePyPyJITcompilergeneratorworkingwiththeCLI
virtualmachine,wewrotetheCLIJITbackend(see7).
Finally, weapply y the PyPy JITcompiler generator tothe PyPy PythonInterpreterto
get aJITcompilerforPythontargetingtheCLI,andwemeasure its performanceona
setofbenchmarksagainstIronPython(seeChapter8),theothermainstreamandmature
implementationofPythonfortheCLI.
1.5 Structure of the thesis
Therestofthisthesisisstructuredasfollows.
Chapter2providesanoverviewonthecurrentimplementationsofPythonandexplains
whyimplementingPythonecientlyissohard.
Chapter3introducesPyPy,whichistheprojectwhichthesisisbasedon.
Chapter4presentsthetargetplatform,theCLI.Itcontainsadescriptionofthevirtual
machine,ofitspeculiarities,andacomparisonwiththeJVM.
Chapter5explainshowtracingJITcompilersworkingeneral.
Chapter 6 6 explains more in detail the tracing g JIT T techniques employed by PyPy. In
particular,italsoexplainshowtheJITcompilerisautomaticallygeneratedfromthesource
codeoftheinterpreter.
Chapter7describesthefunctioningofCLIJITbackendofPyPy,andtheproblemsthat
havebeenencounteredduringitsdevelopment.
Chapter8explainshowtheJITcompilergeneratorhasbeenappliedtothePyPyPython
Interpreter, and d measures its performance e when translated with h the CLI I JITbackend
againstIronPython.
InChapter9,weconclude thework bysummarizingthecontributionspresentedinthis
thesis,describingrelatedworksandanticipatingfuturedirectionsofresearch.
11
Documents you may be interested
Documents you may be interested