Many thanks for taking the time to write such detailed answers. I will think about all this as I continue learning ATS, and hopefully understand better how all this can can be implemented and put together in practice.
On Wednesday, January 26, 2022 at 8:07:19 AM UTC+1 gmhwxi wrote: > After reading and re-reading your message, I think that what you need is > some kind of extension of ATS. > > >> It's a big pile of questions, I just want to know if learning ATS could > make those features possible. > > I feel that ATS and these programming features are kind of orthogonal. > > Say you want some code in a language called XYZ. For instance, XYZ can be > C, Javascript or some assembly. > You can build a compiler from ATS to XYZ so that *some* (not all) code in > XYZ that you need can be generated > from ATS source. By taking such an approach, you get the chance to use the > type system of ATS to flush out a > large variety of potential bugs in your code. Also, the hope is that you > can be a lot more productive at writing code > by making extensive use of the templates in ATS library. > > While we all love concise and elegant syntax, the syntax of ATS (as of > now) is quite verbose. One big reason for this > is that ATS aims to provide extensive debugging support at compile-time. > Say you have just finished writing a Python > program. Then it is only logical that you test it by running it. After > finishing writing an ATS program, you could run it or > you could find ways strength the types used in it so as to flush out > potential bugs. > > Now let me say a few words about the following syntax: > > `for i,j: C.i.j = A.i.k * B.k.j` > > Clearly, this syntax indicates that the sizes (nrow and ncol) of a matrix > needs to be attached to the matrix. This would > cause serious problems if you want to process submatrices (e.g., when > implementing Strassen's matrix multiplication). > In order to process arrays efficiently, the sizes of arrays really need to > be detached from the arrays themselves. > > Another issue with "elegant" syntax is that it does not go well with > debugging. Often, "elegant" code is only obtained at > the end of a "messy" debugging process. > > Hope this can clarify a few things on ATS for you. > > --Hongwei > > On Sunday, January 23, 2022 at 12:46:12 PM UTC-5 Yann Le Du wrote: > >> Dear ATSites, >> >> First, impressed by the power of ATS which unfortunately for me is still >> inaccessible even after spending the typical time I spend overviewing other >> languages. For sure, I've listened to many people saying how hard it was, >> so that didn't help ;-) Maybe they want to keep ATS for themselves and >> frighten away potential new users ? >> >> I'm a physicist, cosmologist, currently working on setting up a project >> involving image reconstruction, around what the Chebfun matlab toolbox >> implements. Now, I've been looking at Dex, he new google research language, >> because that's typically what I need,for exactly the same reason the >> designers made Dex (escape Matlab and go for more than its clone on juice, >> Julia) but it looks very experimental and doesn't really have all I need, >> especially interfacing with C. >> >> So first, would I be able to massage ATS into allowing some nice syntax, >> I mean can I code a library (using whatever tools I totally don't >> understand today) that would allow me to write >> >> `for i,j: C.i.j = A.i.k * B.k.j` >> >> In a very similar way to Dex (who has ranged integer type for the >> indices), i.e. which would be interpreted as : >> >> ``` >> for i in rows range of A: >> for j in colums range of B: >> for k in cols of A == rows of B: >> C[i,j] = A[i,k] * B[k,j] >> ``` >> >> or whatever equivalent in ATS. >> >> You will notice that it loops implicitly on k (Einstein summation), thus >> without me specifying k, and all the indices getting checked like in Dex at >> compile time, with inference wherever needed. This means I want to be able >> to write M.2.3 = 25 (meaning M[2,3]=5) without casting overhead like in Dex >> (they have to cast from integers to ranged ordinals if I remember). >> >> I would also need support for 128 bit integers and all for cryptographic >> uses, the possibility of defining >> >> foo(m `Matrix[12 rows, any u32 in [0,23] columns, any float type for the >> elements, unknown variance]`) >> >> and then call foo with `foo(b)` and b is checked to fit the type declared >> for foo's arguments, so it wold tell me if I try to put in a matrix with >> too many rows, but accept a matrix with 12 rows and 21 columns filled with >> f32, the possibility of defining a set of accepted types, including >> constants, and check if what I use belongs to that set, abstractions like >> OO to better contain the math abstractions we manipulate. >> >> Also, the possibility to implement the right structures for SIMD and all >> that, SOA, etc. This organizing my memory as I want, perhaps not from the >> start, but as the project progresses. >> >> The possibility of multicores, and distributed computing. >> >> Proving that some functions are right. >> >> And last but not least, how much will I have to [un|re]learn when ATS3 is >> released ? >> >> And maybe other questions will follow if the above receives positive >> answers... >> >> By the way, why no Discord channel ? It's so helpful for a community. >> >> It's a big pile of questions, I just want to know if learning ATS could >> make those features possible. My other path is to go to Rust and hope I can >> massage the macros to handle my syntax, but Rust doesn't have true range >> types for the tensor indices I want to use, although some crate imitates >> them, and ATS looks much more powerful to me. >> >> That's it, I hope ATS can do all that. >> >> Best, >> >> Yann >> > -- 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/5b1fc243-4349-4e73-964f-2382eaba39d3n%40googlegroups.com.