I had originally assumed that the following style of ATS template 
implementation
could also be done in C++. But I realized that this is* not *the case after 
studying
C++ templates tonight.

fun
<a:type>
g_print(x: a): void

impltmp
{a:type}
g_print<list(a)>(xs) = ...

Did I miss something about C++ templates? It seems that the template 
parameters
of a template implementation in C++ must be variables.

--Hongwei

On Tuesday, June 30, 2020 at 4:04:29 PM UTC-4, gmhwxi wrote:
>
> Hi Artyom,
>
> I will try to answer other questions later.
>
> >>Why are ATS3 templates more powerful than C++ templates? Could you 
> contrast the two in some way?
>
> I have to say that I do not use C++ on a regular basis.
> C++ used to be C + classes + templates. By the way, I often jokingly tell 
> others this is what the two plusses in
> C++ stand for :)
>
> C does not support inner functions. C++ used to support no inner 
> functions. Now C++ support 'lambdas', with
> which you can implement inner functions. But can you implement inner 
> templates in C++?
>
> ATS supports embedded templates (that is, inner templates). I don't know 
> whether C++ supports inner templates.
> If it doesn't. then ATS is more powerful in this regard. This is a big 
> deal because inner templates are used ubiquitously
> in ATS library code.
>
> Also, with dependent types and linear types, you can do a great deal more 
> of static checking on templates,
> flushing out potential bugs. The introduction of features like concepts in 
> C++ tells me that template-related
> bugs can be quite nasty, cutting big into the benefits from using 
> templates.
>
> Maybe "powerful" is not the right word. There is raw power and there is 
> controlled power. Kind of like nuclear
> bombs versus nuclear power plants. I was mostly talking about the latter.
>
>
>
>
>
>
>
>
>
> On Tue, Jun 30, 2020 at 2:55 PM Artyom Shalkhakov <...> wrote:
>
>> Hi Hongwei,
>>
>> Thank you very much for this work!
>>
>> On Monday, June 29, 2020 at 9:40:33 PM UTC+3, gmhwxi wrote:
>>>
>>>
>>> For those interested in ATS3.
>>>
>>> Before I take a break, I would like to give you an update on the
>>> implementation of ATS3.
>>>
>>> To put things into some sort of perspective, let me first say a few
>>> words on the motivation behind ATS3.
>>>
>>> Advised by Prof. Frank Pfenning, I did my PhD thesis on PROGRAM
>>> VERIFICATION during my years at CMU, designing and implementing DML
>>> (Dependently Typed ML), a programming language that extends ML with a
>>> restricted form of dependent types. Note that DML is the predecessor of 
>>> ATS.
>>> These days, the dependent types in DML are often referred to as DML-style
>>> dependent types in the literature (in contrast to Martin-Lof's dependent 
>>> types
>>> that were originally invented for creating a type-theoretic foundation 
>>> for Mathematics).
>>>
>>> As you can see, there are two words in PROGRAM VERIFICATION. One must
>>> talk about program construction when talking about program
>>> verification. Originally, the kind of programs I intended to verify
>>> were supposedly written in an ML-like language. But it soon (even
>>> before 2008) became very clear to me that such a language badly lacks
>>> meta-programming support. And I immediately started to improvise. I
>>> first added some support for templates into ATS1 and then strengthened
>>> it in ATS2.  Unfortunately, the kind of support for templates in ATS2
>>> was in direct conflict with the support for dependent types. The
>>> original primary motivation for ATS3 was to eliminate this (crippling)
>>> conflict.
>>>
>>> Up to ATS2, I mostly did language implementation for the purpose of
>>> experimenting with a variety of programming features. At this point, I
>>> no longer feel that I have time and/or energy to continue
>>> experimenting. Compared to ATS2, I re-designed the implementation of
>>> ATS3 to make it much more modular so as to better support future
>>> changes and additions. I intend for ATS3 to eventually become a language
>>> of production quality.
>>>
>>> ATS3 is implemented in ATS2. There are three big components planned
>>> for ATS3: program construction (Part I), program compilation (Part 2),
>>> and program verification (Part 3).
>>>
>>> ######
>>>
>>> Part 1:
>>>
>>> At this moment, I have nearly finished Part I.
>>>
>>> This part covers type inference (involving only ML-style algebraic
>>> types) and template resolution (this is, replacing template instances
>>> with proper template-free code).  There is currently a rudimentary
>>> interpreter available for interpreting programs constructed in ATS3. I
>>> have also being implementing a template-based prelude library for
>>> ATS3.
>>>
>>
>> I'm wondering how are ATS3 templates different from ATS2 templates?
>>
>>
>>> Part 2:
>>>
>>> I will soon be starting to work on Part 2 after taking a break, hoping
>>> to finish something that can be tested at the end of the Summer.
>>>
>>> Part 3:
>>>
>>> This part essentially does type-checking involving linear types and
>>> dependent types. Hopefully, I will be able to get a running 
>>> implementation
>>> by the Spring next year.
>>>
>>> ######
>>>
>>> Based on what I have experimented so far, I find the current support
>>> for templates in ATS3 to be a game-changing programming feature that
>>> can greatly increase one's programming productivity. I am a bit amazed
>>> by it :) If you think that the templates in C++ are powerful, then you
>>> will find that the templates in ATS3 are even more powerful in many
>>> aspects. Actually, not only just more powerful but also a great deal
>>> safer. Keep tuned.
>>>
>>>
>> Why are ATS3 templates more powerful than C++ templates? Could you 
>> contrast the two in some way?
>>  
>>
>>> Cheers!
>>>
>>> --Hongwei
>>>
>>>
>>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "ats-lang-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to ats-lang-users+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ats-lang-users/8fb6bfae-872a-416a-8ad2-4e1281161ebfo%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ats-lang-users/8fb6bfae-872a-416a-8ad2-4e1281161ebfo%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ats-lang-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/503d7a16-7ae4-4a6d-94ad-9ef51fd35a22o%40googlegroups.com.

Reply via email to