skip to main content

Casting about in the dark: an empirical study of cast operations in Java programs

Published:10 October 2019Publication History
Skip Abstract Section

Abstract

The main goal of a static type system is to prevent certain kinds of errors from happening at run time. A type system is formulated as a set of constraints that gives any expression or term in a program a well-defined type. Yet mainstream programming languages are endowed with type systems that provide the means to circumvent their constraints through casting.

We want to understand how and when developers escape the static type system to use dynamic typing. We empirically study how casting is used by developers in more than seven thousand Java projects. We find that casts are widely used (8.7% of methods contain at least one cast) and that 50% of casts we inspected are not guarded locally to ensure against potential run-time errors.

To help us better categorize use cases and thus understand how casts are used in practice, we identify 25 cast-usage patterns---recurrent programming idioms using casts to solve a specific issue. This knowledge can be: (a) a recommendation for current and future language designers to make informed decisions (b) a reference for tool builders, e.g., by providing more precise or new refactoring analyses, (c) a guide for researchers to test new language features, or to carry out controlled programming experiments, and (d) a guide for developers for better practices.

Skip Supplemental Material Section

Supplemental Material

a158-mastrangelo

Presentation at OOPSLA '19

References

  1. Miltiadis Allamanis and Charles Sutton. 2013. Mining Source Code Repositories at Massive Scale Using Language Modeling. In 2013 10th Working Conference on Mining Software Repositories (MSR). IEEE, San Francisco, CA, USA, 207ś216. Google ScholarGoogle ScholarCross RefCross Ref
  2. John Altidor, Shan Shan Huang, and Yannis Smaragdakis. 2011. Taming the Wildcards: Combining Definition- and Use-Site Variance. In Proceedings of the 32Nd ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI ’11). ACM, New York, NY, USA, 602ś613. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Pavel Avgustinov, Oege de Moor, Michael Peyton Jones, and Max Schäfer. 2016. QL: Object-Oriented Queries on Relational Data. In 30th European Conference on Object-Oriented Programming (ECOOP 2016) (Leibniz International Proceedings in Informatics (LIPIcs)), Shriram Krishnamurthi and Benjamin S. Lerner (Eds.), Vol. 56. Schloss DagstuhlśLeibniz-Zentrum fuer Informatik, Dagstuhl, Germany, 2:1ś2:25. Google ScholarGoogle ScholarCross RefCross Ref
  4. S. Bajracharya, J. Ossher, and Cristina Lopes. 2009. Sourcerer: An Internet-Scale Software Repository. In Tools and Evaluation 2009 ICSE Workshop on Search-Driven Development-Users, Infrastructure. 1ś4. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Gavin Bierman. 2019. JEP 354: Switch Expressions. (2019). https://openjdk.java.net/jeps/354Google ScholarGoogle Scholar
  6. Martin Bravenboer and Yannis Smaragdakis. 2009. Exception Analysis and Points-to Analysis: Better Together. (2009), 11.Google ScholarGoogle Scholar
  7. Kim B. Bruce. 2003. Some Challenging Typing Issues in Object-Oriented Languages. Electronic Notes in Theoretical Computer Science 82, 8 (Oct. 2003), 1ś29. Google ScholarGoogle ScholarCross RefCross Ref
  8. Oscar Callaú, Romain Robbes, Éric Tanter, and David Röthlisberger. 2013. How (and Why) Developers Use the Dynamic Features of Programming Languages: The Case of Smalltalk. Empirical Software Engineering 18, 6 (Dec. 2013), 1156ś1194. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Peter Canning, William Cook, Walter Hill, Walter Olthoff, and John C. Mitchell. 1989. F-bounded polymorphism for object-oriented programming. In Proceedings of the Fourth International Conference on Functional Programming Languages and Computer Architecture (FPCA ’89). 273ś280. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Manuel M. T. Chakravarty, Gabriele Keller, and Simon Peyton Jones. 2005. Associated Type Synonyms. In Proceedings of the Tenth ACM SIGPLAN International Conference on Functional Programming (ICFP ’05). ACM, New York, NY, USA, 241ś253. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Roberta Coelho, Lucas Almeida, Georgios Gousios, and Arie van Deursen. 2015. Unveiling Exception Handling Bug Hazards in Android Based on GitHub and Google Code Issues. In Proceedings of the 12th Working Conference on Mining Software Repositories (MSR ’15). IEEE Press, Piscataway, NJ, USA, 134ś145.Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. Tal Cohen, Joseph (Yossi) Gil, and Itay Maman. 2006. JTL: The Java Tools Language. In Proceedings of the 21st Annual ACM SIGPLAN Conference on Object-oriented Programming Systems, Languages, and Applications (OOPSLA ’06). ACM, New York, NY, USA, 89ś108. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. Diego Costa, Artur Andrzejak, Janos Seboek, and David Lo. 2017. Empirical Study of Usage and Performance of Java Collections. In Proceedings of the 8th ACM/SPEC on International Conference on Performance Engineering (ICPE ’17). ACM, New York, NY, USA, 389ś400. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. Johannes Dahse and Thorsten Holz. 2015. Experience Report: An Empirical Study of PHP Security Mechanism Usage. In Proceedings of the 2015 International Symposium on Software Testing and Analysis (ISSTA 2015). ACM, New York, NY, USA, 60ś70. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Oege de Moor, M. Verbaere, E. Hajiyev, P. Avgustinov, T. Ekman, N. Ongkingco, D. Sereni, and J. Tibble. 2007. Keynote Address: .QL for Source Code Analysis. In Seventh IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM 2007). 3ś16. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Coen De Roover, Carlos Noguera, Andy Kellens, and Vivane Jonckers. 2011. The SOUL Tool Suite for Querying Programs in Symbiosis with Eclipse. In Proceedings of the 9th International Conference on Principles and Practice of Programming in Java (PPPJ ’11). ACM, New York, NY, USA, 71ś80. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. J. Dietrich, K. Jezek, and P. Brada. 2014. Broken Promises: An Empirical Study into Evolution Problems in Java Programs Caused by Library Upgrades. In 2014 Software Evolution Week - IEEE Conference on Software Maintenance, Reengineering, and Reverse Engineering (CSMR-WCRE). 64ś73. Google ScholarGoogle ScholarCross RefCross Ref
  18. Jens Dietrich, David J. Pearce, Kamil Jezek, and Premek Brada. 2017a. Contracts in the Wild: A Study of Java Programs. In 31st European Conference on Object-Oriented Programming (ECOOP 2017) (Leibniz International Proceedings in Informatics (LIPIcs)), Peter Müller (Ed.), Vol. 74. Schloss DagstuhlśLeibniz-Zentrum fuer Informatik, Dagstuhl, Germany, 9:1ś9:29. Google ScholarGoogle ScholarCross RefCross Ref
  19. Jens Dietrich, Henrik Schole, Li Sui, and Ewan Tempero. 2017b. XCorpus ś An Executable Corpus of Java Programs. The Journal of Object Technology 16, 4 (2017), 1:1. Google ScholarGoogle ScholarCross RefCross Ref
  20. M. Doyle and J. Walden. 2011. An Empirical Study of the Evolution of PHP Web Application Security. In 2011 Third International Workshop on Security Measurements and Metrics. 11ś20. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. R. Dyer, H. A. Nguyen, H. Rajan, and T. N. Nguyen. 2013a. Boa: A Language and Infrastructure for Analyzing UltraLarge-Scale Software Repositories. In 2013 35th International Conference on Software Engineering (ICSE). 422ś431. Google ScholarGoogle ScholarCross RefCross Ref
  22. Robert Dyer, Hridesh Rajan, Hoan Anh Nguyen, and Tien N. Nguyen. 2014. Mining Billions of AST Nodes to Study Actual and Potential Usage of Java Language Features. In Proceedings of the 36th International Conference on Software Engineering (ICSE 2014). ACM, New York, NY, USA, 779ś790. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Robert Dyer, Hridesh Rajan, and Tien N. Nguyen. 2013b. Declarative Visitors to Ease Fine-Grained Source Code Mining with Full History on Billions of AST Nodes. In Proceedings of the 12th International Conference on Generative Programming: Concepts & Experiences (GPCE ’13). ACM, New York, NY, USA, 23ś32. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. Erik Ernst. 2000. gbeta - a Language with Virtual Attributes, Block Structure, and Propagating, Dynamic Inheritance. DAIMI Report Series 29, 549 (May 2000). Google ScholarGoogle ScholarCross RefCross Ref
  25. Erik Ernst. 2001. Family Polymorphism. In ECOOP 2001 Ð Object-Oriented Programming (Lecture Notes in Computer Science). Springer, Berlin, Heidelberg, 303ś326. Google ScholarGoogle ScholarCross RefCross Ref
  26. George Fourtounis, George Kastrinis, and Yannis Smaragdakis. 2018. Static Analysis of Java Dynamic Proxies. In Proceedings of the 27th ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA 2018). ACM, New York, NY, USA, 209ś220. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Brian Goetz. 2017a. JEP 305: Pattern Matching for instanceof (Preview). (2017). https://openjdk.java.net/jeps/305Google ScholarGoogle Scholar
  28. Brian Goetz. 2017b. JEP 325: Switch Expressions (Preview). (2017). https://openjdk.java.net/jeps/325Google ScholarGoogle Scholar
  29. Brian Goetz. 2018. JEP 286: Local-Variable Type Inference. (2018). https://openjdk.java.net/jeps/286Google ScholarGoogle Scholar
  30. Alessandra Gorla, Ilaria Tavecchia, Florian Gross, and Andreas Zeller. 2014. Checking App Behavior Against App Descriptions. In Proceedings of the 36th International Conference on Software Engineering (ICSE 2014). ACM, New York, NY, USA, 1025ś 1035. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Mark Grechanik, Collin McMillan, Luca DeFerrari, Marco Comi, Stefano Crespi, Denys Poshyvanyk, Chen Fu, Qing Xie, and Carlo Ghezzi. 2010. An Empirical Investigation into a Large-Scale Java Open Source Code Repository. In Proceedings of the 2010 ACM-IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM ’10). ACM, New York, NY, USA, 11:1ś11:10. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Ben Greenman, Fabian Muehlboeck, and Ross Tate. 2014. Getting F-bounded Polymorphism into Shape. In Proceedings of the 35th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI ’14). 89ś99. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Mark Hills, Paul Klint, and Jurgen Vinju. 2013. An Empirical Study of PHP Feature Usage: A Static Analysis Perspective. In Proceedings of the 2013 International Symposium on Software Testing and Analysis (ISSTA 2013). ACM, New York, NY, USA, 325ś335. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Dongseok Jang, Ranjit Jhala, Sorin Lerner, and Hovav Shacham. 2010. An Empirical Study of Privacy-Violating Information Flows in JavaScript Web Applications. In Proceedings of the 17th ACM Conference on Computer and Communications Security (CCS ’10). ACM, New York, NY, USA, 270ś283. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. Maria Kechagia and Diomidis Spinellis. 2014. Undocumented and Unchecked: Exceptions That Spell Trouble. In Proceedings of the 11th Working Conference on Mining Software Repositories (MSR 2014). ACM, New York, NY, USA, 312ś315. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Oleg Kiselyov, Ralf Lämmel, and Keean Schupke. 2004. Strongly Typed Heterogeneous Collections. In Proceedings of the ACM SIGPLAN Workshop on Haskell - Haskell ’04. ACM Press, Snowbird, Utah, USA, 96. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. Oleg Kiselyov, Simon Peyton Jones, and Chung-chieh Shan. 2009. Fun with type functions. https://www.microsoft.com/enus/research/publication/fun-type-functions/Google ScholarGoogle Scholar
  38. P. Klint, T. v d Storm, and J. Vinju. 2009. RASCAL: A Domain Specific Language for Source Code Analysis and Manipulation. In 2009 Ninth IEEE International Working Conference on Source Code Analysis and Manipulation. 168ś177. Google ScholarGoogle ScholarDigital LibraryDigital Library
  39. D. Landman, A. Serebrenik, and J. J. Vinju. 2017. Challenges for Static Analysis of Java Reflection - Literature Review and Empirical Study. In 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE). 507ś518. Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. Benjamin Livshits. 2006. Improving Software Security with Precise Static and Runtime Analysis. Ph.D. Dissertation. Stanford University, Stanford, California.Google ScholarGoogle Scholar
  41. Benjamin Livshits, John Whaley, and Monica S. Lam. 2005. Reflection Analysis for Java. In Programming Languages and Systems (Lecture Notes in Computer Science). Springer, Berlin, Heidelberg, 139ś160. Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. Cristina V. Lopes, Petr Maj, Pedro Martins, Vaibhav Saini, Di Yang, Jakub Zitny, Hitesh Sajnani, and Jan Vitek. 2017. DéJàVu: A Map of Code Duplicates on GitHub. Proc. ACM Program. Lang. 1, OOPSLA (Oct. 2017), 84:1ś84:28. Google ScholarGoogle ScholarDigital LibraryDigital Library
  43. Magnus Madsen and Esben Andreasen. 2014. String Analysis for Dynamic Field Access. In Compiler Construction, David Hutchison, Takeo Kanade, Josef Kittler, Jon M. Kleinberg, Friedemann Mattern, John C. Mitchell, Moni Naor, Oscar Nierstrasz, C. Pandu Rangan, Bernhard Steffen, Madhu Sudan, Demetri Terzopoulos, Doug Tygar, Moshe Y. Vardi, Gerhard Weikum, and Albert Cohen (Eds.). Vol. 8409. Springer Berlin Heidelberg, Berlin, Heidelberg, 197ś217. Google ScholarGoogle Scholar
  44. Luis Mastrangelo. 2019. When and How Java Developers Give Up Static Type Safety. Ph.D. Dissertation. Università della Svizzera italiana.Google ScholarGoogle Scholar
  45. Luis Mastrangelo, Luca Ponzanelli, Andrea Mocci, Michele Lanza, Matthias Hauswirth, and Nathaniel Nystrom. 2015. Use at Your Own Risk: The Java Unsafe API in the Wild. In Proceedings of the 2015 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA 2015). ACM, New York, NY, USA, 695ś710. Google ScholarGoogle ScholarDigital LibraryDigital Library
  46. Davood Mazinanian, Ameya Ketkar, Nikolaos Tsantalis, and Danny Dig. 2017. Understanding the Use of Lambda Expressions in Java. Proc. ACM Program. Lang. 1, OOPSLA (Oct. 2017), 85:1ś85:31. Google ScholarGoogle ScholarDigital LibraryDigital Library
  47. Robin Milner. 1984. A Proposal for Standard ML. In Proceedings of the 1984 ACM Symposium on LISP and Functional Programming (LFP ’84). ACM, New York, NY, USA, 184ś197. Google ScholarGoogle ScholarDigital LibraryDigital Library
  48. Meiyappan Nagappan, Romain Robbes, Yasutaka Kamei, Éric Tanter, Shane McIntosh, Audris Mockus, and Ahmed E. Hassan. 2015. An Empirical Study of Goto in C Code from GitHub Repositories. In Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering (ESEC/FSE 2015). ACM, New York, NY, USA, 404ś414. Google ScholarGoogle ScholarDigital LibraryDigital Library
  49. Nathaniel Nystrom, Michael R. Clarkson, and Andrew C. Myers. 2003. Polyglot: An Extensible Compiler Framework for Java. In Compiler Construction (Lecture Notes in Computer Science). Springer, Berlin, Heidelberg, 138ś152. Google ScholarGoogle ScholarCross RefCross Ref
  50. Nathaniel Nystrom, Xin Qi, and Andrew C. Myers. 2006. J&: Nested Intersection for Scalable Software Composition. In Proceedings of the 21st Annual ACM SIGPLAN Conference on Object-oriented Programming Systems, Languages, and Applications (OOPSLA ’06). ACM, 21ś36. Google ScholarGoogle ScholarDigital LibraryDigital Library
  51. Martin Odersky and Matthias Zenger. 2005. Independently Extensible Solutions to the Expression Problem. In Proceedings of the Twelth International Workshop on Foundations of Object-Oriented Languages (FOOL ’05). http://homepages.inf.ed.ac.uk/wadler/fool.Google ScholarGoogle Scholar
  52. Bruno C. d. S. Oliveira and William R. Cook. 2012. Extensibility for the Masses. In ECOOP 2012 ś Object-Oriented Programming, David Hutchison, Takeo Kanade, Josef Kittler, Jon M. Kleinberg, Friedemann Mattern, John C. Mitchell, Moni Naor, Oscar Nierstrasz, C. Pandu Rangan, Bernhard Steffen, Madhu Sudan, Demetri Terzopoulos, Doug Tygar, Moshe Y. Vardi, Gerhard Weikum, and James Noble (Eds.). Vol. 7313. Springer Berlin Heidelberg, Berlin, Heidelberg, 2ś27. Google ScholarGoogle ScholarDigital LibraryDigital Library
  53. Bruno C. d. S. Oliveira, Zhiyuan Shi, and João Alpuim. 2016. Disjoint Intersection Types. In Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming (ICFP 2016). ACM, New York, NY, USA, 364ś377. Google ScholarGoogle ScholarDigital LibraryDigital Library
  54. Nathalie Oostvogels, Joeri De Koster, and Wolfgang De Meuter. 2018. Static Typing of Complex Presence Constraints in Interfaces. In 32nd European Conference on Object-Oriented Programming (ECOOP 2018) (Leibniz International Proceedings in Informatics (LIPIcs)), Todd Millstein (Ed.), Vol. 109. Schloss DagstuhlśLeibniz-Zentrum fuer Informatik, Dagstuhl, Germany, 14:1ś14:27. Google ScholarGoogle ScholarCross RefCross Ref
  55. Fabio Palomba, Gabriele Bavota, Massimiliano Di Penta, Rocco Oliveto, Andrea De Lucia, and Denys Poshyvanyk. 2013. Detecting Bad Smells in Source Code Using Change History Information. In 2013 28th IEEE/ACM International Conference on Automated Software Engineering (ASE). IEEE, Silicon Valley, CA, USA, 268ś278. Google ScholarGoogle ScholarDigital LibraryDigital Library
  56. F. Palomba, D. Di Nucci, M. Tufano, G. Bavota, R. Oliveto, D. Poshyvanyk, and A. De Lucia. 2015. Landfill: An Open Dataset of Code Smells with Public Evaluation. In 2015 IEEE/ACM 12th Working Conference on Mining Software Repositories. 482ś485. Google ScholarGoogle ScholarCross RefCross Ref
  57. Chris Parnin, Christian Bird, and Emerson Murphy-Hill. 2011. Java Generics Adoption: How New Features Are Introduced, Championed, or Ignored. In Proceedings of the 8th Working Conference on Mining Software Repositories (MSR ’11). ACM, New York, NY, USA, 3ś12. Google ScholarGoogle ScholarDigital LibraryDigital Library
  58. Chris Parnin, Christian Bird, and Emerson Murphy-Hill. 2013. Adoption and Use of Java Generics. Empirical Software Engineering 18, 6 (Dec. 2013), 1047ś1089. Google ScholarGoogle ScholarDigital LibraryDigital Library
  59. Simon Peyton Jones, Dimitrios Vytiniotis, Stephanie Weirich, and Geoffrey Washburn. 2006. Simple unification-based type inference for GADTs. In Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP’06). ACM Press, 50ś61. https://www.microsoft.com/en-us/research/publication/simple-unification-based-type-inferencefor-gadts/Google ScholarGoogle Scholar
  60. M. Rebouças, G. Pinto, F. Ebert, W. Torres, A. Serebrenik, and F. Castor. 2016. An Empirical Study on the Usage of the Swift Programming Language. In 2016 IEEE 23rd International Conference on Software Analysis, Evolution, and Reengineering (SANER), Vol. 1. 634ś638. Google ScholarGoogle ScholarCross RefCross Ref
  61. Gregor Richards, Christian Hammer, Brian Burg, and Jan Vitek. 2011. The Eval That Men Do: A Large-Scale Study of the Use of Eval in Javascript Applications. In Proceedings of the 25th European Conference on Object-Oriented Programming (ECOOP’11). Springer-Verlag, Berlin, Heidelberg, 52ś78.Google ScholarGoogle ScholarDigital LibraryDigital Library
  62. Gregor Richards, Sylvain Lebresne, Brian Burg, and Jan Vitek. 2010. An Analysis of the Dynamic Behavior of JavaScript Programs. In Proceedings of the 31st ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI ’10). ACM, New York, NY, USA, 1ś12. Google ScholarGoogle ScholarDigital LibraryDigital Library
  63. Jeremy G. Siek and Walid Taha. 2006. Gradual Typing for Functional Languages. In Scheme and functional programming workshop. 81ś92.Google ScholarGoogle Scholar
  64. Andreas Stuchlik and Stefan Hanenberg. 2011. Static vs. Dynamic Type Systems: An Empirical Study About the Relationship Between Type Casts and Development Time. In Proceedings of the 7th Symposium on Dynamic Languages (DLS ’11). ACM, New York, NY, USA, 97ś106. Google ScholarGoogle ScholarDigital LibraryDigital Library
  65. E. Tempero, C. Anslow, J. Dietrich, T. Han, J. Li, M. Lumpe, H. Melton, and J. Noble. 2010. The Qualitas Corpus: A Curated Collection of Java Code for Empirical Studies. In 2010 Asia Pacific Software Engineering Conference. 336ś345. Google ScholarGoogle ScholarDigital LibraryDigital Library
  66. N. Tsantalis, T. Chaikalis, and A. Chatzigeorgiou. 2008. JDeodorant: Identification and Removal of Type-Checking Bad Smells. In 2008 12th European Conference on Software Maintenance and Reengineering. 329ś331. Google ScholarGoogle ScholarDigital LibraryDigital Library
  67. Michele Tufano, Fabio Palomba, Gabriele Bavota, Rocco Oliveto, Massimiliano Di Penta, Andrea De Lucia, and Denys Poshyvanyk. 2015. When and Why Your Code Starts to Smell Bad. In Proceedings of the 37th International Conference on Software Engineering - Volume 1 (ICSE ’15). IEEE Press, Piscataway, NJ, USA, 403ś414.Google ScholarGoogle ScholarCross RefCross Ref
  68. Michele Tufano, Fabio Palomba, Gabriele Bavota, Rocco Oliveto, Massimiliano Di Penta, Andrea De Lucia, and Denys Poshyvanyk. 2017. When and Why Your Code Starts to Smell Bad (and Whether the Smells Go Away). IEEE Transactions on Software Engineering 43, 11 (Nov. 2017), 1063ś1088. Google ScholarGoogle ScholarCross RefCross Ref
  69. Phillip Merlin Uesbeck, Andreas Stefik, Stefan Hanenberg, Jan Pedersen, and Patrick Daleiden. 2016. An Empirical Study on the Impact of C++ Lambdas and Programmer Experience. In Proceedings of the 38th International Conference on Software Engineering (ICSE ’16). ACM, New York, NY, USA, 760ś771. Google ScholarGoogle ScholarDigital LibraryDigital Library
  70. Raoul-Gabriel Urma and Alan Mycroft. 2012. Programming Language Evolution via Source Code Query Languages. In Proceedings of the ACM 4th Annual Workshop on Evaluation and Usability of Programming Languages and Tools - PLATEAU ’12. ACM Press, Tucson, Arizona, USA, 35. Google ScholarGoogle ScholarDigital LibraryDigital Library
  71. Mandana Vaziri, Frank Tip, Stephen Fink, and Julian Dolby. 2007. Declarative Object Identity Using Relation Types. In ECOOP 2007 ś Object-Oriented Programming (Lecture Notes in Computer Science). Springer, Berlin, Heidelberg, 54ś78. Google ScholarGoogle ScholarCross RefCross Ref
  72. Jurgen Vinju and James R. Cordy. 2006. How to Make a Bridge between Transformation and Analysis Technologies?. In Transformation Techniques in Software Engineering (Dagstuhl Seminar Proceedings), James R. Cordy, Ralf Lämmel, and Andreas Winter (Eds.). Internationales Begegnungs- und Forschungszentrum für Informatik (IBFI), Schloss Dagstuhl, Germany, Dagstuhl, Germany.Google ScholarGoogle Scholar
  73. Kris De Volder. 2006. Jquery: A Generic Code Browser with a Declarative Configuration Language. In In Practical Aspects of Declarative Languages, 8th International Symposium, PADL 2006. Springer, 88ś102.Google ScholarGoogle Scholar
  74. Philip Wadler. 1998. The Expression Problem. https://homepages.inf.ed.ac.uk/wadler/papers/expression/expression.txt.Google ScholarGoogle Scholar
  75. Philip Wadler and Robert Bruce Findler. 2009. Well-Typed Programs Can’t Be Blamed. In Programming Languages and Systems (Lecture Notes in Computer Science), Giuseppe Castagna (Ed.). Springer Berlin Heidelberg, 1ś16.Google ScholarGoogle Scholar
  76. Yanlin Wang and Bruno C. d. S. Oliveira. 2016. The Expression Problem, Trivially!. In Proceedings of the 15th International Conference on Modularity (MODULARITY 2016). ACM, New York, NY, USA, 37ś41. Google ScholarGoogle ScholarDigital LibraryDigital Library
  77. Shiyi Wei, Franceska Xhakaj, and Barbara G. Ryder. 2016. Empirical Study of the Dynamic Behavior of JavaScript Objects. Software: Practice and Experience 46, 7 (July 2016), 867ś889. Google ScholarGoogle ScholarDigital LibraryDigital Library
  78. Johnni Winther. 2011. Guarded Type Promotion: Eliminating Redundant Casts in Java. In Proceedings of the 13th Workshop on Formal Techniques for Java-Like Programs (FTfJP ’11). ACM, New York, NY, USA, 6:1ś6:8. Google ScholarGoogle ScholarDigital LibraryDigital Library
  79. Yizhou Zhang, Matthew C. Loring, Guido Salvaneschi, Barbara Liskov, and Andrew C. Myers. 2015. Lightweight, Flexible Object-oriented Generics. In Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI ’15). 436ś445. Google ScholarGoogle ScholarDigital LibraryDigital Library
  80. Yizhou Zhang and Andrew C. Myers. 2017. Familia: Unifying Interfaces, Type Classes, and Family Polymorphism. Proc. ACM Program. Lang. 1, OOPSLA, Article 70 (Oct. 2017), 31 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  81. Alex Zhitnitsky. 2016. The Top 10 Exception Types in Production Java Applications - Based on 1B Events. https://blog.takipi.com/the-top-10-exceptions-types-in-production-java-applications-based-on-1b-events/.Google ScholarGoogle Scholar

Index Terms

  1. Casting about in the dark: an empirical study of cast operations in Java programs

      Recommendations

      Comments

      Login options

      Check if you have access through your login credentials or your institution to get full access on this article.

      Sign in

      Full Access

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader
      About Cookies On This Site

      We use cookies to ensure that we give you the best experience on our website.

      Learn more

      Got it!