<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.r-consortium.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.r-consortium.org/index.php?action=history&amp;feed=atom&amp;title=R_Native_API_meeting_2016-06-30</id>
		<title>R Native API meeting 2016-06-30 - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.r-consortium.org/index.php?action=history&amp;feed=atom&amp;title=R_Native_API_meeting_2016-06-30"/>
		<link rel="alternate" type="text/html" href="https://wiki.r-consortium.org/index.php?title=R_Native_API_meeting_2016-06-30&amp;action=history"/>
		<updated>2026-05-31T06:58:47Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.15</generator>

	<entry>
		<id>https://wiki.r-consortium.org/index.php?title=R_Native_API_meeting_2016-06-30&amp;diff=36&amp;oldid=prev</id>
		<title>Lukasstadler at 01:41, 3 July 2016</title>
		<link rel="alternate" type="text/html" href="https://wiki.r-consortium.org/index.php?title=R_Native_API_meeting_2016-06-30&amp;diff=36&amp;oldid=prev"/>
				<updated>2016-07-03T01:41:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 01:41, 3 July 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Participants: Michael Sannella, Torsten Hothorn, Dirk Eddelbuettel, Karl Millar, Simon Urbanek, Mick Jordan, Lukas Stadler&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Participants: Michael Sannella, Torsten Hothorn, Dirk Eddelbuettel, Karl Millar, Simon Urbanek, Mick Jordan, Lukas Stadler&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Incomplete account of discussion &lt;/del&gt;topics:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Discussion &lt;/ins&gt;topics:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* (Dirk) From the POV of Rcpp, lots of useful functionality is hidden and not part of the official API. It hasn't changed in a long time, why not make available?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* (Dirk) From the POV of Rcpp, lots of useful functionality is hidden and not part of the official API. It hasn't changed in a long time, why not make available?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:* It's not uncommon that people copy out code to make it available.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:* It's not uncommon that people copy out code to make it available.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lukasstadler</name></author>	</entry>

	<entry>
		<id>https://wiki.r-consortium.org/index.php?title=R_Native_API_meeting_2016-06-30&amp;diff=34&amp;oldid=prev</id>
		<title>Lukasstadler: Created page with &quot;Informal meeting after the end of the useR! 2016 conference.  Participants: Michael Sannella, Torsten Hothorn, Dirk Eddelbuettel, Karl Millar, Simon Urbanek, Mick Jordan, Luka...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.r-consortium.org/index.php?title=R_Native_API_meeting_2016-06-30&amp;diff=34&amp;oldid=prev"/>
				<updated>2016-07-03T01:35:52Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;Informal meeting after the end of the useR! 2016 conference.  Participants: Michael Sannella, Torsten Hothorn, Dirk Eddelbuettel, Karl Millar, Simon Urbanek, Mick Jordan, Luka...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Informal meeting after the end of the useR! 2016 conference.&lt;br /&gt;
&lt;br /&gt;
Participants: Michael Sannella, Torsten Hothorn, Dirk Eddelbuettel, Karl Millar, Simon Urbanek, Mick Jordan, Lukas Stadler&lt;br /&gt;
&lt;br /&gt;
Incomplete account of discussion topics:&lt;br /&gt;
* (Dirk) From the POV of Rcpp, lots of useful functionality is hidden and not part of the official API. It hasn't changed in a long time, why not make available?&lt;br /&gt;
:* It's not uncommon that people copy out code to make it available.&lt;br /&gt;
:* comment on data.table: it has a tiny dependency trail, and keeps working with very old R versions.&lt;br /&gt;
* (Torsten) Packages like stats do not export their functionality at the native level (or there are problems with dependency resolution).&lt;br /&gt;
:* Another case where people start copying out code.&lt;br /&gt;
:* Is it possible to get symbols from specific package? yes...&lt;br /&gt;
* &amp;quot;eval&amp;quot; could be much more efficient if it had a &amp;quot;prepare&amp;quot; and an &amp;quot;execute&amp;quot; step, like prepared DB statements.&lt;br /&gt;
:* Combined with a concise API, this would allow much more R functions to be reused on the native side, without a need for explicit C API.&lt;br /&gt;
::* Or have simple C wrappers, which can be replaced with a direct implementation in case of performance problems.&lt;br /&gt;
::* Do connection functions, e.g., have to be efficient?&lt;br /&gt;
::* Makes for good documentation - &amp;quot;behaves like as.integer&amp;quot; (maybe &amp;quot;sans S3/S4 dispatch&amp;quot;)&lt;br /&gt;
* Is it &amp;quot;future proofing the API&amp;quot; or &amp;quot;future proofing packages&amp;quot;?&lt;br /&gt;
* Discussions related to CRAN:&lt;br /&gt;
:* Abandoned but popular packages sometimes get fixed by CRAN maintainers.&lt;br /&gt;
:* How could a larger set of changes produced by API renamings be handled?&lt;br /&gt;
::* Hard in the current system...&lt;br /&gt;
::* Having &amp;quot;master&amp;quot; versions of all packages on github would help.&lt;br /&gt;
::* Licensing / openness concerns with github?&lt;br /&gt;
:* Testing of GNUR with modified API?&lt;br /&gt;
::* Many packages require additional steps, installed libraries, etc.&lt;br /&gt;
::* Maybe r-hub could help? (Lukas will contact Gabor Csardi)&lt;br /&gt;
::* Two levels where changes can cause packages to fail: installing (compiling) and testing (where examples exist)&lt;br /&gt;
* What's the reason for the different prefixes?&lt;br /&gt;
:* Rf_..., R..., or no prefix, camel case, upper case, underscores, etc.&lt;br /&gt;
:* Historical reasons - cleanup could be done with tools or sed scripts.&lt;br /&gt;
* USE_RINTERNALS does two things: additional functionality and better performance&lt;br /&gt;
:* the former could be achieved by different include files&lt;br /&gt;
:* the latter should not be necessary (why not have everything at top speed, but leave the API in a state that can be verified?)&lt;br /&gt;
:* it should be possible to create a wrapper around the API that checks the (documented) contract as tightly as possible&lt;br /&gt;
* The manual still explains functionality that is generally considered to be wrong (e.g., &amp;quot;TYPE(x) = LANGSXP;&amp;quot;)&lt;br /&gt;
* There should be no global variables, only functions (or at least a contract that allows them to be implemented as functions)&lt;br /&gt;
:* Not only CRAN - we need to describe the universe of (important?) packages.&lt;br /&gt;
:* Dependencies between functions? (sic!)&lt;br /&gt;
&lt;br /&gt;
* General steps this WG should/could take:&lt;br /&gt;
:* Tighten API - remove stuff that is not used&lt;br /&gt;
::* Remove altogether, or deprecate (or hide behind a #define USE_DEPRECATED_API)&lt;br /&gt;
:* Renaming functions?&lt;br /&gt;
::* Maybe we want to introduce a new naming scheme?&lt;br /&gt;
::* Maybe have a period with both naming schemes&lt;br /&gt;
:* Document the functions&lt;br /&gt;
::* Describe the arguments and its contract.&lt;br /&gt;
::* Who could do that? For some functions only core R developers can give a real account of their intended contract.&lt;br /&gt;
::* Some functions are tightly related to R functions - maybe describe them in relation to these?&lt;br /&gt;
:* Breaking packages is ok, to a certain degree&lt;br /&gt;
:* You could do a lot via eval if the details of its behavior were defined well and non-surprising&lt;br /&gt;
::* Getting proper error context at the C level?&lt;br /&gt;
::* Java solved this with the Java Virtual Machine Tooling API (JVMTI)&lt;br /&gt;
:* Maybe create shims of R functions as a new API? docs?&lt;br /&gt;
&lt;br /&gt;
* Immediate next step:&lt;br /&gt;
:* (Lukas) Define the &amp;quot;tighten API&amp;quot; task, what it entails, as a (student?) project, and find a &amp;quot;volunteer&amp;quot;&lt;/div&gt;</summary>
		<author><name>Lukasstadler</name></author>	</entry>

	</feed>