<oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
  <dc:contributor>Hauswirth, Matthias</dc:contributor>
  <dc:contributor>Nystrom, Nathaniel</dc:contributor>
  <dc:creator>Mastrangelo, Luis</dc:creator>
  <dc:date>2019-06-13</dc:date>
  <dc:description xmlns:ns0="xml" ns0:lang="en">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. Besides detecting these kinds of errors,  a static type system can be an invaluable maintenance tool, can be useful for documentation purposes, and can aid in generating  more efficient machine code. However, there are situations when the developer has more information about the program that is too  complex to explain in terms of typing constraints. To that end, programming languages often provide mechanisms that make the  typing constraints less strict to permit more programs to be valid, at the expense of causing more errors at run time. These  mechanisms are essentially two: Unsafe Intrinsics and Reflective Capabilities. We want to understand how and when developers  give up these static constraints. This knowledge can be useful as: 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. In this dissertation, we focus on the Unsafe API and cast operator---a subset of unsafe intrinsics and reflective  capabilities respectively---in Java. We report two empirical studies to understand how these mechanisms---Unsafe API and cast  operator---are used by Java developers when the static type system becomes too strict. We have devised usage patterns for both  the Unsafe API and cast operator. Usage patterns are recurrent programming idioms to solve a specific issue. We believe that  having usage patterns can help us to better categorize use cases and thus understand how those features are used.</dc:description>
  <dc:format>application/pdf</dc:format>
  <dc:identifier>https://n2t.net/ark:/12658/srd1319069</dc:identifier>
  <dc:identifier>https://susi.usi.ch/global/documents/319069</dc:identifier>
  <dc:identifier>https://susi.usi.ch/documents/319069/files/2019INFO008.pdf</dc:identifier>
  <dc:language>eng</dc:language>
  <dc:relation>info:eu-repo/semantics/altIdentifier/urn/urn:nbn:ch:rero-006-118732</dc:relation>
  <dc:relation>info:eu-repo/semantics/altIdentifier/ark/12658/srd1319069</dc:relation>
  <dc:rights>info:eu-repo/semantics/openAccess</dc:rights>
  <dc:rights>License undefined</dc:rights>
  <dc:subject xmlns:ns1="xml" ns1:lang="en">Unsafe</dc:subject>
  <dc:subject xmlns:ns2="xml" ns2:lang="en">Cast</dc:subject>
  <dc:subject xmlns:ns3="xml" ns3:lang="en">Patterns</dc:subject>
  <dc:subject xmlns:ns4="xml" ns4:lang="en">Mining</dc:subject>
  <dc:subject xmlns:ns5="xml" ns5:lang="en">Java</dc:subject>
  <dc:subject xmlns:ns6="xml" ns6:lang="en">Type safety</dc:subject>
  <dc:subject>info:eu-repo/classification/udc/004</dc:subject>
  <dc:title xmlns:ns7="xml" ns7:lang="en">When and how java developers give up static type safety</dc:title>
  <dc:type>http://purl.org/coar/resource_type/c_db06</dc:type>
</oai_dc:dc>
