count pages in pdf without opening c# : Cut and paste pdf pages SDK software project wpf winforms windows UWP antocuni-thesis9-part326

0
2
4
6
8
10
build-tree
chaos
f1
fannkuch
float
html
k-nucleotide
linked-list
oobench
pystone
pystone-new
richards
spectral-norm
Time (s)
IronPython performances on Mono and CLR
mono
CLR
0
2
4
6
8
10
build-tree
chaos
f1
fannkuch
float
html
k-nucleotide
linked-list
oobench
pystone
pystone-new
richards
spectral-norm
Time (s)
pypy-cli performances on Mono and CLR
mono
CLR
Figure 8.8: Time taken to complete the benchmarks by
pypy-cli
and IronPython (the lower
the better)
82
Cut and paste pdf pages - SDK software project: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
Cut and paste pdf pages - SDK software project: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
83
SDK software project:VB.NET PDF copy, paste image library: copy, paste, cut PDF images
VB.NET PDF - Copy, Paste, Cut PDF Image in VB.NET. Copy, paste and cut PDF image while preview without adobe reader component installed.
www.rasteredge.com
SDK software project:C# PDF copy, paste image Library: copy, paste, cut PDF images in
C#.NET PDF SDK - Copy, Paste, Cut PDF Image in C#.NET. C# Guide cutting. C#.NET Project DLLs: Copy, Paste, Cut Image in PDF Page. In
www.rasteredge.com
Chapter 9
Conclusion and Future Work
9.1 Contributions of this thesis
This thesis investigates new techniques to implement in an ecient and eective way
dynamic languages on top of object oriented, statically typed virtual machines. Concretely,
these techniques have been applied to Python as an example of a complex, real world and
extremely dynamic programming language, and to the CLI as the chosen target virtual
machine. However, most of the developed concepts and of the experience gathered in this
thesis can be eectively reused for other dynamic languages and target virtual machines,
in particular the JVM.
One of the most important contribution is the introduction of the concept of JIT layering
(see Section 4.2), which introduces a higher level of JIT compilation on top of the existing
JIT compiler of the virtual machine.
However neither the CLI nor the JVM have been designed to be a target for a JIT compiler,
and they lack features that are fundamental to emit highly ecient code (see e.g. Sections
4.3 and 4.4). Sections 7.3, 7.5 and 7.5.1 explain how to overcome these limitations and
what are the trade-os for the dierent solutions.
Instead of using a more traditional JIT compilation strategy, we implemented a tracing
JIT (see Chapter 5). To our knowledge, this is the rst example of a tracing JIT compiler
targeting the CLI or similar virtual machines.
Instead of directly implementing a tracing JIT, we have developed a tracing JIT generator
that can be applied to any interpreter written in RPython. Interpreters oer the simplest
and cheapest way to implement a language, however compilers allow a much more e-
cient implementation at the cost of a more expensive development and maintenance eort;
furthermore, such drawbacks are even more serious for JIT compilers. By automatically
84
SDK software project:C# PDF Convert to Images SDK: Convert PDF to png, gif images in C#
Selection for compressing to multiple image formats. Cut and paste any areas in PDF pages to images. Supports to resize images in conversion.
www.rasteredge.com
SDK software project:C# PDF remove image library: remove, delete images from PDF in C#.
Page: Move Page Position. Page: Extract, Copy and Paste PDF Pages. to PDF. Image: Remove Image from PDF Page. Image: Copy, Paste, Cut Image in Page. Link: Edit URL
www.rasteredge.com
generating a JIT from an interpreter we try to take the best of both approaches, as ex-
plained in Chapter 6. The PyPy JIT generator is the result of the development eorts of
the PyPy team to which the author of this thesis has actively collaborated.
The CLI JIT backend, described in Chapter 7, has been entirely developed by the author
of this thesis. One of the most challenging problems which has been faced during the
implementation of the backend regards JIT compilation of fragments of the same method
at dierent times, since the CLI does not directly support incremental JIT compilations
of methods.
Finally, a benchmark suite has been executed to evaluate the performance of the JIT
compiler (called
pypy-cli
)produced by the PyPy JIT generator from the PyPy Python
interpreter. Such benchmarks have been executed both with
pypy-cli
and with Iron-
Python, and on top of the two most widespread and stable available implementations of
CLI, that is Mono (on Linux) and CLR (on Microsoft .NET).
Overall the results are satisfactory: most benchmarks run faster on
pypy-cli
than on
IronPython, up to 40 times faster: this proves that, at least for the CLI and for some kinds
of computations, the technique of JIT layering works well and that a tracing JIT compiler
can lead to dramatically better results than a traditional static compiler like IronPython.
Nevertheless, if on the one hand some benchmarks are considerably speeded up by
pypy-cli
,
on the other hand some others are slowed down; moreover, some benchmarks are speeded
up on Mono but slowed down on CLR or vice versa. This fact validates the intuitive as-
sumption that the nal performance is equally in uenced by both the high and low level
JIT compilers. However, what emerges is that it is hard if not impossible to predict the
performance of a particular program before running it.
Finally, one benchmark did not complete the execution under Mono because of a bug in the
Virtual Machine. Similarly, one benchmark gave the wrong results when run under CLR:
we did not investigate further the source of the misbehaviour, which could be perhaps due to
abug of the Virtual Machine. It is interesting to note that we managed to hit two dierent
bugs running only a limited set of benchmarks despite the fact that both implementations
are considered very stable and of high quality, and widely used in production environments.
This is probably due to the fact that our tracing JIT compiler produces patterns of code
that are dierent from the typical patterns of code generated by the compilers for more
widespread languages such as C#, but is also indicates that both implementations are not
well tested enough.
In conclusion, we can say that the concepts and the techniques presented in this thesis give
very good results in some cases and are thus worth of further investigation and development.
85
SDK software project:VB.NET PDF url edit library: insert, remove PDF links in vb.net
Delete or remove partial or all hyperlinks from PDF file in VB.NET class. Copy, cut and paste PDF link to another PDF file in VB.NET project.
www.rasteredge.com
SDK software project:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
Page: Delete Existing PDF Pages. |. Home ›› XDoc.PDF ›› VB.NET PDF: Delete PDF Page. How to VB.NET: Delete Consecutive Pages from PDF.
www.rasteredge.com
9.2 Future work
There are many dierent directions for future work related with this thesis.
First of all, we want to analyze more in depth the behavior of
pypy-cli
on the benchmarks
where it is slower than IronPython to see if it is possible to further improve the overall
performance of the system. Moreover, it would be interesting to analyze the reasons why
some benchmarks are faster on one implementation of the CLI but not on the other, to see
if it is possible to make
pypy-cli
consistently faster than IronPython.
Another problem of the current implementation of the CLI JIT backend is the relatively
high cost of the JIT compilation: Section 7.5 describes in detail the problem as well as a
possible solution.
Finally,it would be interesting to apply the JIT generator to other dynamic languages
written in RPython, to demonstrate that PyPy can be an eective framework to implement
highly ecient programming languages for the CLI. Moreover, we want to port the JIT
generator to the JVM. We described how the techniques presented in this thesis are not
currently applicable to the CLI in production environments due to the instability and
immaturity of its implementations, but it would be interesting to see how they behaves on
the JVM, whose implementations are generally more mature, notably HotSpot. Moreover,
there Da Vinci Machine Project[mlv] is actively researching how to extend HotSpot with
new features thought to implement dynamic languages on the JVM, which could probably
be exploited to implement the JVM JIT backend for PyPy.
86
SDK software project:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
Page: Delete Existing PDF Pages. Provide C# Users with Mature .NET PDF Document Manipulating Library for Deleting PDF Pages in C#.
www.rasteredge.com
SDK software project:VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Page: Insert PDF Pages. |. Home ›› XDoc.PDF ›› VB.NET PDF: Insert PDF Page. Add and Insert Multiple PDF Pages to PDF Document Using VB.
www.rasteredge.com
87
Bibliography
[AACM07] Davide Ancona, Massimo Ancona, Antonio Cuni, and Nicholas D. Matsakis.
RPython: a step towards reconciling dynamically and statically typed OO
languages. In Proceedings of the 2007 Symposium on Dynamic Languages,
pages 53{64, Montreal, Quebec, Canada, 2007. ACM.
[ABCR08] Davide Ancona, Carl Friedrich Bolz, Antonio Cuni, and Armin Rigo. Auto-
matic generation of JIT compilers for dynamic languages in .NET. Technical
report, DISI, University of Genova and Institut fur Informatik, Heinrich-Heine-
Universitat Dusseldorf, 2008.
[AFG
+
05] M. Arnold, S. J. Fink, D. Grove, M. Hind, and P. F. Sweeney. A survey of
adaptive optimization in virtual machines. Proceedings of the IEEE, 93(2):449{
466, 2005.
[Ana99]
C. Scott Ananian. The static single information form. Technical Report
MIT-LCS-TR-801, MIT Laboratory for Computer Science Technical Report,
September 1999. Master’s thesis.
[AR]
Kenneth Anderson and Duane Rettig. Performing lisp analysis of the fannkuch
benchmark.
[asm]
Asm - home page. http://asm.ow2.org/.
[bce]
The byte code engineering library.
http://jakarta.apache.org/
bcel/.
[BCFR09] Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, and Armin Rigo. Trac-
ing the meta-level: Pypy’s tracing jit compiler. In ICOOOLPS ’09: Proceed-
ings of the 4th workshop on the Implementation, Compilation, Optimization
of Object-Oriented Languages and Programming Systems, pages 18{25, New
York, NY, USA, 2009. ACM.
88
[BDB00]
Vasanth Bala, Evelyn Duesterwald, and Sanjeev Banerjia. Dynamo: a trans-
parent dynamic optimization system. ACM SIGPLAN Notices, 35(5):1{12,
2000.
[BGS94]
David F. Bacon, Susan L. Graham, and Oliver J. Sharp. Compiler transforma-
tions for high-performance computing. ACM Comput. Surv., 26(4):345{420,
1994.
[BKL
+
08] C. F. Bolz, A. Kuhn, A. Lienhard, N. D. Matsakis, O. Nierstrasz, L. Renggli,
A. Rigo, and T. Verwaest. Back to the future in one week - implementing a
smalltalk vm in PyPy. In Self-Sustaining Systems, First Workshop, S3 2008,
Potsdam, Revised Selected Papers, volume 5146 of Lecture Notes in Computer
Science, pages 123{139, 2008.
[Bla99]
Bruno Blanchet. Escape analysis for object oriented languages. application
to java. In In Proceedings of the 14th Annual Conference on Object-Oriented
Programming Systems, Languages and Applications, pages 20{34, 1999.
[BLR09]
Carl Friedrich Bolz, Michael Leuschel, and Armin Rigo. Towards just-in-time
partial evaluation of prolog. In Danny De Schreye, editor, LOPSTR, volume
6037 of Lecture Notes in Computer Science, pages 158{172. Springer, 2009.
[bug]
Bug 502575 - Tail call problems with F#. https://bugzilla.novell.
com/show_bug.cgi?id=502575.
[BV09]
Camillo Bruni and Toon Verwaest. Pygirl: Generating whole-system vms from
high-level prototypes using pypy. In Manuel Oriol and Bertrand Meyer, editors,
TOOLS (47), volume 33 of Lecture Notes in Business Information Processing,
pages 328{347. Springer, 2009.
[Can05]
Brett Cannon. Localized type inference of atomic types in python, 2005.
[CAR09]
Antonio Cuni, Davide Ancona, and Armin Rigo. Faster than c#: ecient im-
plementation of dynamic languages on .net. In Proceedings of the 4th workshop
on the Implementation, Compilation, Optimization of Object-Oriented Lan-
guages and Programming Systems, pages 26{33, New York, NY, USA, 2009.
ACM.
[CBY
+
07] Mason Chang, Michael Bebenita, Alexander Yermolovich, Andreas Gal, and
Michael Franz. Ecient Just-In-Time execution of dynamically typed lan-
guages via code specialization using precise runtime type inference. Technical
Report ICS-TR-07-10, Donald Bren School of Information and Computer Sci-
ence, University of California, Irvine, 2007.
89
[CPC
+
07] Antonio Cuni, Samuele Pedroni, Anders Chrigstrom, Holger Krekel, Guido
Wesdorp, and Carl Friedrich Bolz. High-level backends and interpreter fea-
ture prototypes. Technical Report D12.1, PyPy Consortium, 2007. http:
//codespeak.net/pypy/dist/pypy/doc/index-report.html.
[CSR
+
09] Mason Chang, Edwin Smith, Rick Reitmaier, Michael Bebenita, Andreas Gal,
Christian Wimmer, Brendan Eich, and Michael Franz. Tracing for Web 3.0:
Trace compilation for the next generation web applications. In Proceedings
of the 2009 ACM SIGPLAN/SIGOPS International Conference on Virtual
Execution Environments, pages 71{80, Washington, DC, USA, 2009. ACM.
[Cun06]
Antonio Cuni. Implementing python in .NET. Technical report, DISI, Uni-
versity of Genova, 2006. http://codespeak.net/
˜
antocuni/papers/
implementing_python_in_dotnet2006.pdf.
[dCGS
+
99] Jong deok Choi, Manish Gupta, Mauricio Serrano, Vugranam C. Sreedhar,
and Sam Midki. Escape analysis for java. In In Proceedings of the 14th
Annual Conference on Object-Oriented Programming Systems, Languages and
Applications, pages 1{19. ACM Press, 1999.
[dot]
Microsoft .NET Framework.
[EG03]
M. Ertl and D. Gregg. The structure and performance of ecient interpreters.
Journal of Instruction-Level Parallelism, 5:1{25, 2003.
[fBI10]
National Center for Biotechnology Information. Fasta format description, 2010.
http://www.ncbi.nlm.nih.gov/blast/fasta.shtml.
[GBE07]
Andy Georges, Dries Buytaert, and Lieven Eeckhout. Statistically rigorous
java performance evaluation. In In Proceedings of the ACM SIGPLAN Confer-
ence on Object-Oriented Programming, Systems, Languages, and Applications
(OOPSLA, pages 57{76. ACM, 2007.
[GES
+
09] Andreas Gal, Brendan Eich, Mike Shaver, David Anderson, Blake Kaplan,
Graydon Hoare, David Mandelin, Boris Zbarsky, Jason Orendor, Michael
Bebenita, Mason Chang, Michael Franz, Edwin Smith, Rick Reitmaier, and
Mohammad Haghighat. Trace-based Just-in-Time type specialization for dy-
namic languages. In PLDI, 2009.
[GF06]
Andreas Gal and Michael Franz. Incremental dynamic code generation with
trace trees. Technical Report ICS-TR-06-16, University of California, Irvine,
November 2006.
[GHJV93] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design
patterns: Abstraction and reuse of object-oriented design, 1993.
90
[GPF06]
Andreas Gal, Christian W. Probst, and Michael Franz. HotpathVM: an eec-
tive JIT compiler for resource-constrained devices. In Proceedings of the 2nd
International Conference on Virtual Execution Environments, pages 144{153,
Ottawa, Ontario, Canada, 2006. ACM.
[H
94]
Urs Holzle. Adaptive optimization for SELF: reconciling high performance
with exploratory programming. Technical report, Stanford University, 1994.
[HCU91]
Urs Holzle, Craig Chambers, and David Ungar. Optimizing dynamically-typed
object-oriented languages with polymorphic inline caches. In ECOOP ’91: Pro-
ceedings of the European Conference on Object-Oriented Programming, pages
21{38, London, UK, 1991. Springer-Verlag.
[HH93]
Philipp Hoschka and Christian Huitema. Control  ow graph analysis for au-
tomatic fast path implementation. In In Second IEEE workshop on the archi-
tecture and Implementation of, 1993.
[Int06]
ECMA International. Standard ECMA-335 - Common Language Infrastructure
(CLI). 4 edition, June 2006.
[iro]
IronPython. http://www.codeplex.com/IronPython.
[jyt]
The jython project. http://jython.org.
[LA04]
Chris Lattner and Vikram Adve. Llvm: A compilation framework for lifelong
program analysis & transformation. In In Proceedings of the 2004 International
Symposium on Code Generation and Optimization (CGO
201904, 2004.
[mlv]
the Da Vinci Machine Project. http://openjdk.java.net/projects/
mlvm/.
[PVC01]
Michael Paleczny, Christopher Vick, and Cli Click. The java hotspot(tm)
server compiler. In In USENIX Java Virtual Machine Research and Technology
Symposium, pages 1{12, 2001.
[pyp]
Pypy. http://codespeak.net/pypy.
[pyt]
Python programming language. http://www.python.org.
[Rig04]
Armin Rigo. Representation-based just-in-time specialization and the Psyco
prototype for Python. In Proceedings of the 2004 ACM SIGPLAN Symposium
on Partial Evaluation and Semantics-Based Program Manipulation, pages 15{
26, Verona, Italy, 2004. ACM.
[RP06]
A. Rigo and S. Pedroni. PyPy’s approach to virtual machine construction. In
OOPSLA Companion, pages 944{953, 2006.
91
Documents you may be interested
Documents you may be interested