<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Adam's Continuity at BlackAcid &#187; PHP</title>
	<atom:link href="http://blogs.blackacid.org/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.blackacid.org</link>
	<description>Experiments in Real Time</description>
	<lastBuildDate>Tue, 27 Jan 2009 23:24:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>Dynamic Scalar Type Hinting on PHP6</title>
		<link>http://blogs.blackacid.org/2007/11/20/dynamic-scalar-type-hinting-on-php6/</link>
		<comments>http://blogs.blackacid.org/2007/11/20/dynamic-scalar-type-hinting-on-php6/#comments</comments>
		<pubDate>Wed, 21 Nov 2007 03:02:40 +0000</pubDate>
		<dc:creator>aballai</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[compilers]]></category>
		<category><![CDATA[dynamic scalar type hinting]]></category>
		<category><![CDATA[interpreters]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blogs.blackacid.org/2007/11/20/dynamic-scalar-type-hinting-on-php6/</guid>
		<description><![CDATA[I was recently following a thread on the php-dev list that intrigued me enough to write about a new syntax feature for PHP. Sam Barrow recently posted a patch about optional scalar value type hinting that got me thinking that &#8230; <a href="http://blogs.blackacid.org/2007/11/20/dynamic-scalar-type-hinting-on-php6/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was recently following a thread on the php-dev list that intrigued me enough to write about a new syntax feature for PHP.</p>
<p><a href="http://sambarrow.com/blog">Sam Barrow</a> recently posted a patch about optional scalar value type hinting that got me thinking that it was a smart approach to making php even more structured, but using a dynamic approach, since PHP has given us flexibility, let&#8217;s keep moving forward with it.</p>
<p>I propose a Dynamic Scalar Type Hinting syntax where we can declare data-types and our boundary checking callbacks during runtime.</p>
<p>We always have to do boundary checking and type checking on our functions, even though we already know the type to be used in context.</p>
<ol class="codelist">
<li class="tab0 odd"><code><span style="color: #000000; font-weight: bold;">&lt;?php</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code><span style="color: #000000; font-weight: bold;">function</span> bounds_check_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$d</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab2 even"><code><span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$d</span> &lt; <span style="color: #cc66cc;">0</span> &amp;&amp; <span style="color: #0000ff;">$d</span> &lt;= <span style="color: #cc66cc;">65535</span><span style="color: #66cc66;">&#41;</span></code></li>
<li class="tab4 odd"><code>throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Value out of range'</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="even">&nbsp;</li>
<li class="tab2 odd"><code><span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span>;</code></li>
<li class="tab0 even"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code><span style="color: #000000; font-weight: bold;">function</span> mul_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$a1</span>, <span style="color: #0000ff;">$a2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab2 even"><code>try <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab4 odd"><code>bounds_check_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$a1</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="tab4 even"><code>bound_check_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$a2</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="tab2 odd"><code><span style="color: #66cc66;">&#125;</span> catch<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$e</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab4 even"><code><a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #0000ff;">$e</span>-&gt;<span style="color: #006600;">getMessage</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="tab2 odd"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab2 odd"><code><span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$a1</span> * <span style="color: #0000ff;">$a2</span>;</code></li>
<li class="tab0 even"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code><span style="color: #000000; font-weight: bold;">function</span> sub_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$a1</span>, <span style="color: #0000ff;">$a2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab2 odd"><code>try <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab4 even"><code>bounds_check_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$a1</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="tab4 odd"><code>bound_check_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$a2</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="tab2 even"><code><span style="color: #66cc66;">&#125;</span> catch<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$e</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab4 odd"><code><a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #0000ff;">$e</span>-&gt;<span style="color: #006600;">getMessage</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="tab2 even"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code><span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$a1</span> - <span style="color: #0000ff;">$a2</span>;</code></li>
<li class="tab0 odd"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code><span style="color: #000000; font-weight: bold;">function</span> add_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$a1</span>, <span style="color: #0000ff;">$a2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab2 even"><code>try <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab4 odd"><code>bounds_check_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$a1</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="tab4 even"><code>bound_check_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$a2</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="tab2 odd"><code><span style="color: #66cc66;">&#125;</span> catch<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$e</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab4 even"><code><a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #0000ff;">$e</span>-&gt;<span style="color: #006600;">getMessage</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="tab2 odd"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab2 odd"><code><span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$a1</span> + <span style="color: #0000ff;">$a2</span>;</code></li>
<li class="tab0 even"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="tab0 odd"><code><span style="color: #000000; font-weight: bold;">?&gt;</span></code></li>
</ol>
<p>Let&#8217;s propose the following syntax:</p>
<ol class="codelist">
<li class="tab0 odd"><code><span style="color: #000000; font-weight: bold;">&lt;?php</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code><span style="color: #000000; font-weight: bold;">function</span> bounds_check_uint<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$d</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab2 even"><code><span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$d</span> &lt; <span style="color: #cc66cc;">0</span> &amp;&amp; <span style="color: #0000ff;">$d</span> &lt;= <span style="color: #cc66cc;">65535</span><span style="color: #66cc66;">&#41;</span></code></li>
<li class="tab4 odd"><code>throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="even">&nbsp;</li>
<li class="tab2 odd"><code><span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span>;</code></li>
<li class="tab0 even"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>define_scalar<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'uint'</span>, <span style="color: #ff0000;">'bounds_check_uint'</span><span style="color: #66cc66;">&#41;</span>;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code><span style="color: #000000; font-weight: bold;">function</span> mul_uint<span style="color: #66cc66;">&#40;</span>&lt;uint&gt; <span style="color: #0000ff;">$a1</span>, &lt;uint&gt; <span style="color: #0000ff;">$a2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab3 odd"><code><span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$a1</span> * <span style="color: #0000ff;">$a2</span>;</code></li>
<li class="tab0 even"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code><span style="color: #000000; font-weight: bold;">function</span> sub_uint<span style="color: #66cc66;">&#40;</span>&lt;uint&gt; <span style="color: #0000ff;">$a1</span>, &lt;uint&gt; <span style="color: #0000ff;">$a2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab3 odd"><code><span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$a1</span> - <span style="color: #0000ff;">$a2</span>;</code></li>
<li class="tab0 even"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="tab0 odd"><code><span style="color: #000000; font-weight: bold;">function</span> add_uint<span style="color: #66cc66;">&#40;</span>&lt;uint&gt; <span style="color: #0000ff;">$a1</span>, &lt;uint&gt; <span style="color: #0000ff;">$a2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></code></li>
<li class="tab2 even"><code><span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$a1</span> + <span style="color: #0000ff;">$a2</span>;</code></li>
<li class="tab0 odd"><code><span style="color: #66cc66;">&#125;</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code><span style="color: #000000; font-weight: bold;">?&gt;</span></code></li>
</ol>
<p>Here it appears that passing a scalar type reference via &#8216;<' + literal + '>&#8216; syntax just left adjacent from your parameter you can set an inline and possibly an internal type check.</p>
<p>Some might say why not use Java?  This is what non-dynamic based languages such as C++, Java, C#, etc. platforms of that caliber would bring to the table.  </p>
<p>They require that you declare your type ahead of time and don&#8217;t give you the option to define and adjust during runtime without an obscure mannerism.  Dynamic Scalar Type&#8217;s do not have to be defined at all or during runtime.  They can also be used as inline type hinting for runtime based performance optimizations in the execution engine.  They can be used by documentation tools to better generate phpdoc&#8217;s.</p>
<p>When all is said and done, I think this could be a fine addition to the PHP6 or possibly future versions beyond the platform.  Thanks for listening and feel free to share your comments.  As I continue to work on this patch to PHP6 CVS, I&#8217;ll need a sounding board.  </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.blackacid.org/2007/11/20/dynamic-scalar-type-hinting-on-php6/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
