bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-apl] erlang APL NIF


From: Rowan Cannaday
Subject: Re: [Bug-apl] erlang APL NIF
Date: Wed, 5 Jun 2019 11:23:44 +0000

Hah, I hadn't fixed it yet - but I tracked down the same issue in the
last few minutes. There was no init_macros in libapl. I was wondering
why ALL the macros had null pointers, but it would have taken me a bit
longer to implement a fix.

Thank you for your help. I'll update my repo and test.

On 6/5/19, Dr. Jürgen Sauermann <address@hidden> wrote:
> Hi Rowan,
>
> I think I fixed the problem (SVN 1166):
>
> address@hidden:~/projects/juergen/apl-1.7/erlang$ erl
> Erlang/OTP 19 [erts-8.2] [source] [smp:4:4] [async-threads:10] [hipe]
> [kernel-poll:false]
>
> Eshell V8.2  (abort with ^G)
> 1> apl:init().
> load called.
> libapl initialized.
> ok
> 2> apl:statement("∘.,/(1 2)(1 2)").
>   1 1  1 2
>   2 1  2 2
> [committed_value,committed_value,committed_value,
>  committed_value,committed_value,committed_value,
>  committed_value,committed_value,
>  {value,[],
>         [{value,[2,2],
>                 [{value,[2],[1,1]},
>                  {value,[2],[1,2]},
>                  {value,[2],[2,1]},
>                  {value,[2],[2,2]}]}]},
>  committed_value]
> 3>
>
>
> There was a missing initialization of the Macro subsystem in libapl.cc.
>
> Macros were introduced after libapl, so I forgot to add that initialization.
>
> Now Erlang works again (of course only on my machine).
>
> Best Regards,
> Jürgen Sauermann
>
>
> On 6/4/19 11:04 PM, Rowan Cannaday wrote:
>>
>> Thats unfortunate re: the feedback you received. I personally think an
>> embedded APL in C/erlang is a fantastic idea - the distributed toolkit
>> of beam with the symbolic math of APL I find very appealing.
>>
>> I'll give it an effort.
>>
>> Appreciative of the help, I'll likely be bugging you in the near future.
>>
>> - Rowan
>>
>> On Tue, Jun 4, 2019, 4:32 PM Dr. Jürgen Sauermann
>> <address@hidden> wrote:
>>>
>>> Hi Rowan,
>>>
>>> see below.
>>>
>>> BR, Jürgen
>>>
>>>
>>> On 6/4/19 5:00 PM, Rowan Cannaday wrote:
>>>>
>>>> Hello again,
>>>>
>>>> Trying out the erlang/APL interface (its building now!), running into
>>>> a few issues.
>>>>
>>>> BTW I'm pretty new to FOSS mailing lists so if in the future you'd
>>>> prefer I'd start these as different threads, or use a different syntax
>>>> for distinguishing shell output just let me know.
>>>
>>> Don't worry, everything is just fine.
>>>>
>>>> First issue:
>>>> ```
>>>> ldd /usr/local/lib/apl/erlang_APL_nif.so
>>>>     libapl.so => not found
>>>> ```
>>>> I fixed by adding "/usr/local/lib/apl" to my LD_LIBRARY_PATH.
>>>>
>>>> 2nd issue:
>>>> ```
>>>> 1> apl:init().
>>>> load called.
>>>> Executable /usr/lib/erlang/erts-10.2.4/bin/APs/APserver not found.
>>>>                                                                   This
>>>> could means that 'apl' was not installed ('make install') or that it
>>>>                                                                   was
>>>> started in a non-standard way. The expected location of APserver is
>>>>
>>>> either the same directory as the binary 'apl' or the subdirectory
>>>> 'APs' of
>>>>                                                                   that
>>>> directory (the directory should also be in $PATH).
>>>>                                                 libapl initialized.
>>>> ok
>>>> 2>
>>>> ```
>>>
>>> I have added a note at the end of erlang/README regarding this.
>>>>
>>>>
>>>> This seems related to the following previous bug report:
>>>> SVN 595
>>>> https://lists.gnu.org/archive/html/bug-apl/2015-04/msg00032.html
>>>> The function still returns 'OK'.
>>>>
>>>> Third Issue (including entire session for context):
>>>> ```
>>>> PATH=$PATH:/usr/local/bin:/usr/local/lib/apl
>>>> LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/apl erl
>>>> Erlang/OTP 21 [erts-10.2.4] [source] [64-bit] [smp:4:4] [ds:4:4:10]
>>>> [async-threads:1]
>>>>
>>>> Eshell V10.2.4  (abort with ^G)
>>>> 1> c("/usr/local/lib/apl/apl").
>>>> {ok,apl}
>>>> 2> apl:init().
>>>> load called.
>>>> Executable /usr/lib/erlang/erts-10.2.4/bin/APs/APserver not found.
>>>>                                                                   This
>>>> could means that 'apl' was not installed ('make install') or that it
>>>>                                                                   was
>>>> started in a non-standard way. The expected location of APserver is
>>>>
>>>> either the same directory as the binary 'apl' or the subdirectory
>>>> 'APs' of
>>>>                                                                   that
>>>> directory (the directory should also be in $PATH).
>>>>                                                 libapl initialized.
>>>> ok
>>>> 3> apl:statement("1 2 3 + 4 5 6").
>>>> 5 7 9
>>>> [{value,[3],[5,7,9]}]
>>>> 4> apl:statement("(1 2 3)∘.+(1 2 3)").
>>>> 2 3 4
>>>> 3 4 5
>>>> 4 5 6
>>>> [{value,[3,3],[2,3,4,3,4,5,4,5,6]}]
>>>> 5> apl:statement("∘.,/(1 2)(1 2)").
>>>> Segmentation fault
>>>> ```
>>>
>>> Yes. I can confirm the segfault. It also happens on my machine. It looks
>>> like
>>> The erlang interface as such is working, but fails in this particular
>>> case. The
>>> same statement entered directly in APL works as expected.
>>>
>>> The real problem is this:
>>>
>>> When I published the Erlang interface back in 2017, the feedback that
>>> I received from different communities was ranging from total lack of
>>> interest
>>> (Erlang community) to derogative (Elixir community). For that reason I am
>>> inclined to remove the Erlang interface from GNU APL in the next GNU APL
>>> release 1.8.
>>>
>>> On the other hand I suspect that the problem with the statement above is
>>> not
>>> related to the Erlang interface in the first place, but to libapl. In
>>> that case
>>> removing the Erlang Interface would not help. The way Erlang works makes
>>> it quite complicated to troubleshoot the case. If the problem is in
>>> libapl,
>>> however, one can replace Erlang by a simple C/C++ main() program that
>>> initializes libapl and then calls the same functions in libapl that
>>> Erlang calls
>>> in erlang_APL_nif.c. I was able to track down the segfault to occur in
>>> Prefix.cc line 935:
>>>
>>> Token result = at0().get_function()->eval_B(at1().get_apl_val());
>>>
>>> This line calls a user-defined Function (probably Macro Z__LO_REDUCE_X4_B
>>> in Macro.def line 147).
>>>
>>> If you would like to help, then please try your luck troubleshooting
>>> this.
>>> I can help you with the details that you may need.
>>>
>>> I have attached a file test_libapl.c that I use to test libapl. You
>>> can use your failing apl expression instead of ⎕←2 3⍴⍳6 in that file.
>>>>
>>>> And the output of `strings apl.beam`:
>>>> ```
>>>> FOR1
>>>>         pBEAMAtU8
>>>> init
>>>> erlang
>>>> load_nif
>>>> command_utf8
>>>> command_utf8__not_loaded
>>>> exit
>>>> command_ucs
>>>> command_ucs__not_loaded
>>>> statement_utf8
>>>> statement_utf8__not_loaded
>>>> statement_ucs
>>>> statement_ucs__not_loaded
>>>> fix_function_ucs
>>>> fix_function_ucs__not_loaded
>>>> set_variable
>>>> set_variable___not_loaded
>>>> eval_mux
>>>> eval_mux__not_loaded
>>>> eval_
>>>> eval_B
>>>> eval_AB
>>>> eval_XB
>>>> eval_AXB
>>>> eval_LB
>>>> eval_ALB
>>>> eval_LXB        eval_ALXB
>>>> eval_LRB        eval_ALRB       eval_LRXB
>>>> eval_ALRXB
>>>> true
>>>> false
>>>> length
>>>> value
>>>> lists
>>>> foldl
>>>> reverse
>>>> error
>>>> Invalid eterm
>>>> command statement
>>>> module_info
>>>> get_module_info
>>>> -e2a/1-fun-0-
>>>> Code
>>>> @address@hidden@
>>>> @#3@
>>>> @1C@
>>>> @QC@
>>>> @address@hidden@
>>>>  @#3@
>>>> @qC@
>>>> &@#3@
>>>> (@#3@
>>>> F0#G
>>>> address@hidden
>>>> F0#G
>>>> StrT
>>>> ImpT
>>>> ExpT
>>>> FunT
>>>> ]LitT
>>>> c```f``Pm
>>>> `Na`-K
>>>> LocT
>>>> BAttr
>>>> vsnl
>>>> C3jjCInf
>>>> versionk
>>>> 7.3.1h
>>>> optionsjh
>>>> sourcek
>>>> /usr/local/lib/apl/apl.erljDbgi
>>>> debug_info_v1d
>>>> erl_abstract_codeh
>>>> nonej
>>>> Line
>>>>         '       +       ,       -       .       /       0       1
>>>>  56       7       8       9       :       ;       <       =       >
>>>>    ?@       A       E       I       O       T       W       X       S
>>>> /usr/local/lib/apl/apl.erl
>>>> ```
>>>>
>>>> It doesn't seem to be producing a core dump, haven't figured out why
>>>> yet.
>>>>
>>>> Thanks y'all.
>>>> Let me know how I can help!
>>>>
>>>> - Rowan
>>>>
>>>>
>>>
>>
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]