Hi Robert, thanks for letting me know. I searched Github for projects
called "Apex" and found nothing similar, so I didn't learn about yours
until now. My compiler is now called April, which could stand for "Array
Programming Re-Imagined in Lisp." Best,
Andrew
On 02/20/2018 07:55 AM, rbe wrote:
> On Monday, January 29, 2018 at 11:05:05 AM UTC-5, Andrew Sengul wrote:
>> Hi everyone, I've written a new implementation of APL in Common Lisp.
>> Called Apex, it compiles APL expressions into Common Lisp code and
>> executes them. Lisp can ingest and transform many different types of
>> data, and now you can bring APL's algorithmic power into the equation.
>> This also means that you can compile binaries from APL code.
>>
>> The code is here:
>>
>> https://github.com/phantomics/apex
>>
>> Here are some examples:
>>
>> * (apex "⍳12")
>>
>> #(1 2 3 4 5 6 7 8 9 10 11 12)
>>
>> * (apex "3 4⍴⍳12")
>>
>> #2A((1 2 3 4) (5 6 7 8) (9 10 11 12))
>>
>> * (apex "+/3 4⍴⍳12")
>>
>> #(10 26 42)
>>
>> * (apex "+⌿3 4⍴⍳12")
>>
>> #(15 18 21 24)
>>
>> * (apex "⌽3 4⍴⍳12")
>>
>> #2A((4 3 2 1) (8 7 6 5) (12 11 10 9))
>>
>> Why Lisp? Lisp has immense semantic power but can be verbose and hard to
>> follow when building complex algorithms. I find that APL perfectly fills
>> the gap where Lisp can fall short in crunching numbers and working with
>> arrays. APL brings many array processing functions to the table that
>> Common Lisp lacks, while Lisp makes it easier to communicate with
>> databases, APIs and other sources of data.
>>
>> I've implemented just about every function and operator that exists in
>> APL, aside from the pretty-printing functions and the system-level
>> functions like branch, spawn and character input. The statements like
>> :access and :implements are also not implemented, since control flow
>> statements are easy to implement in Lisp outside of the APL code. You
>> can see the full list of what is and isn't implemented at the repo.
>>
>> In Apex, the APL language is defined in the form of a spec. You can see
>> the spec here:
>>
>> https://github.com/phantomics/apex/blob/28fd2d8986e497f034188ca8bc8eb18cdf052da5/apex.lisp#L574
>>
>> Each function and operator are listed along with other language
>> properties and tests for each. This means that it's easy to customize
>> and extend the spec to create custom variations of APL with new
>> functions and glyphs. You'll notice that there's a software package
>> inside Apex called Vex, which is intended to be a general framework for
>> creating vector languages. Eventually it may be possible to implement
>> other languages like J or K using it. Apex isn't yet as fast as other
>> APL implementations, but at about 3000 lines it's quite compact
>> comparing to 80,000 for GNU APL and who knows how many for Dyalog.
>>
>> Running Apex requires a Common Lisp environment. So far it's been
>> verified to work with SBCL and the LispWorks GUI. If you haven't used
>> Lisp it may be a bit of a challenge getting one up and running, you can
>> search for tutorials on using SBCL with Slime and Emacs to get started.
>> I'm also working on an improved means of distributing the system that
>> should lower the barrier to entry.
>>
>> Apex is alpha software and bugs are guaranteed. I look forward to
>> hearing your thoughts and feedback. Best,
>>
>> Andrew
>>
>> Email: ml<<.At>>imagegardenphoto<<.d0t>>com
>
> Hi. I am pleased to hear that other people are working in the
> area of compiling functional array languages.
>
> I heard about your project from one of my clients, a European
> software developer.
>
> However, you should consider another name for your compiler,
> as my company's APL compiler, originally written in 1987, is also called APEX:
>
> http://www.snakeisland.com/apexup.htm
>
> Issues of precedence and copyright aside for the moment, using the same name
> is going to cause marketplace confusion, especially as
> both compilers are solving, essentially, the same problems.
> Please let me know how you propose to resolve this issue.
>
> Regards,
> Robert Bernecky
> bernecky@snakeisland.com
>
>
|
|