freenode/#lisp - IRC Chatlog
Search
22:48:15
jmercouris
yes, I could have chained them in one long function, but package maintainers from different packages will not expect that
22:48:51
jmercouris
I see no other magical mechanism, unless they are to override every single function in some sort of chain
22:50:57
stacksmith
If there is a class you expose, say 'browser', an advanced user can subclass it and make modifications - minor or major.
22:52:07
jmercouris
you may be right, I might strip the hook functionality out later in favor of your design
22:52:47
jmercouris
that's not the point, I just want them to be able to hook into any point in my program
22:52:49
stacksmith
Including writing complicated systems to make sure that the limited functionality does not interfere with other parts of itself.
22:53:04
_death
hooks tends to be just a simple mechanism where the hook functions are usually independent of each other.. for more elaborate mechanisms there's advice (say in emacs, where they have depth) or indeed generic functions, or event systems like Shinmera's
22:53:57
stacksmith
By jail I mean limit to something reasonable perhaps. Providing a set of hooks is a way of limiting the user to those hooks instead of rewriting...
22:54:48
stacksmith
jmercouris: I've been doing a lot of rewrites! not worthy of pull-requests if that
22:55:41
jmercouris
I'm just saying, you have some opinions, if you think you can do it better, I would be glad to accept your code
22:56:05
jmercouris
I'm not a good developer, at least not in Lisp, I know that, so I'm always interested in other takes
22:57:17
jmercouris
It was just a friendly suggestion, if you are interested, I am open to PRs, and always looking for contributors, that is all
22:58:08
stacksmith
I've been breaking my brain with my own code... I'll take a look when I get a chance.
22:58:46
jmercouris
Don't worry about it, if you like it you find the time, if you don't, I won't be offended, I understand that our own projects are always most interesting
22:59:43
jmercouris
I found a porter-stemming implementaiton already, but now I'm looking for lemmatization to do a more sohpisticated semantic matching
23:00:52
jmercouris
I see this: https://github.com/eslick/cl-langutils looks pretty abandoned though
23:04:39
shrdlu68
i.e (loop with n fixnum = 0...) works but (loop with n (unsigned-byte 64) = 0...) doesn't work.
23:25:54
phoe
...geez, I types "actually useful" and immediately though of #'ARRAY-ACTUAL-USEFULNESS
23:51:59
stacksmith
Hey, is anyone using defconstant? I keep trying every so often but it always ends with tears.
23:54:19
_death
alexandria has define-constant which may work better for your needs, as it takes a :test argument
23:54:27
stacksmith
I invariably get into a shit-state with slime with restarts and babble about redefining...
23:55:40
stacksmith
I suppose nothing to do with emacs, just a million restarts screwing up my windows and making me feel less hopeful about life.
23:58:45
_death
stacksmith: yes, it allows you to define what "same" means.. in CL parlance, and defconstant, "same" is EQL
0:15:25
stacksmith
_death: premature optimization aside, constants lead to much tighter code with sbcl...
0:28:18
Bike
but it (probably) lets the compiler use a known location, so it should be about as fast as a constant for things that can't be inlined into the actual code, like compound structures
0:37:04
pillton
I'm struggling to understand this optimization. Can you give an example where that optimization is useful? Why is it different then (let ((x *var*)) ...)?
0:46:15
pierpa
a local lexical variable is just a memory location at a fixed address. A special requires access to a symbol value slot, i.e. one indirection, one more memory access.
0:49:31
stacksmith
pillton: sbcl encodes constants as immediates. And more complicated forms, like ash or ldb benefit as well.
0:55:28
Bike
it boils down to setting the symbol-value and setting the info db entry for the variable to :constant
1:09:08
porky11
I'm working on a language in lisp, which is possible to use without brackets and is intended to be used as programming lanugage or language for speaking/writing
1:10:48
porky11
the parser of the fundamental grammar into sexpressions and functions/macros to simplify the declaration of how to expand everything, already is defined https://gitlab.com/porky11/setlang
1:11:41
porky11
the language was intendet to be based on set theory, but I'm not sure, if that's a good approach even for programming language
1:16:41
porky11
there are words, that represend functions, which implicitely open parentheses, and words, that represent objects/sets, which implicitely close parentheses,
1:18:10
porky11
here some small example for lisp https://gist.github.com/porky11/2bb359f62d96822e8c25b1a3b2fc14f2
1:19:26
porky11
that's just a working example, documentation is somewhere different, but most of it are just unfinished drafts
1:20:49
porky11
for examle to sum multiple objects, you would write, when having the identity function `id` `sum id 1 id 2 3
1:21:32
White_Flame
would that be (+ 1 2 3), or (+ 1 (+ 2 3)) or what? impossible to know just from the output example
1:24:17
porky11
for math this concept is not perfect, but for natural language things, this seems useful in many cases
1:26:05
White_Flame
I do like end delimiters, because there's only 1 to deal with, instead of per-element delimiters, like commas in most other languages' lists
1:30:46
stacksmith
Forth is pretty usable, although it becomes convoluted. by optimizing away braces, you lose clarity.
1:30:48
White_Flame
yes, (1 2 3 4 5) vs "1, 2, 3, 4, 5" or "1 and 2 and 3 and 4 and 5" where the latter 2 delimit the list on every element
1:32:52
White_Flame
my example was giving a function name, and then saying that we're going to be using it with a list of parameters
1:35:44
White_Flame
right, does "function with blah blah blah done" sound more natural to you than "function start blah blah blah end"
1:37:06
White_Flame
but in any case, all programming languages are about tracking very specific operations & data paths. Natural language is all about communicating within assumption & implied context, so they're never going to mesh well
1:38:28
porky11
would also be nice, if it's just usable as a language for a game, where you can tell computer players what to do
1:39:59
White_Flame
I think there's many lessons to be learned from SQL and COBOL, both of which were intended to be "like natural english"
1:40:22
White_Flame
and both of which ended up still being specific, fiddly, engineering tasks to write, just like any programming language
1:41:07
Zhivago
I'm not sure about never -- natural language presumes a dialogue between intelligent agents.
1:41:09
porky11
they are pretty stupid languages, expecially SQL just seems like a complicated version of the underlying logic
1:41:38
Zhivago
As we move toward negotiating with intelligent agents rather than specifying dumb machines, natural language will probably come to dominate programming.
1:41:58
White_Flame
Zhivago: right, if we get machine agents to understand English, then we won't have a mesh of programming language & natural language. We'll just have natural language :)
2:01:48
rme
Summary results from my Clozure CL platform survey: https://lists.clozure.com/pipermail/openmcl-devel/2018-February/011797.html
2:06:25
welle
Hi, newbie to Lisp here. There are some instructions for running nEXT Browser in Linux, and they work when I run them one after another in a SBCL repl. When I put them in a progn statement and try to compile them to a binary with save-lisp-and-die, it returns a thread error. Help?
2:09:00
Bike
you shouldn't save-lisp-and-die from slime, it doesn't work well if multiple threads are running
2:14:00
Bike
that's not the usual mode of interacting with lisp. does nEXT not have build instructions?
2:15:48
welle
No, it currently has to be built from source on Linux. I want to use it for browsing so I learn Emacs-style keybinds.
2:17:07
White_Flame
save-lisp-and-die should be given the instructions to start up the system post-restore
2:17:25
White_Flame
you shouldn't try to save a running system wiht threads, open files/sockets/etc, because that's not meaningful to capture
2:17:48
Bike
i think the usual practice with save lisp and die is to write a script system that gets the system into the state you want it to start up in.
2:18:37
Bike
http://sbcl.org/manual/index.html#Function-sb_002dext_003asave_002dlisp_002dand_002ddie here's the docs. i think basically you want to specify the filename, :executable t, and :toplevel set to whatever function should run when the browser starts.
2:22:55
welle
I wrote (sb-ext:save-lisp-and-die "nEXT-Browser" :toplevel #'(progn(require :asdf)(asdf:load-asd "/home/welle/next/next/next.asd")(ql:quickload :next/gtk)(next:start)) :executable t)
2:24:24
Bike
write a file like this: (require :asdf) (asdf:load-asd "~/next/next.asd") (ql:quickload :next/gtk) (sb-ext:save-lisp-and-die "nEXT-Browser" :executable t :toplevel #'next:start)
2:24:30
welle
Do I need to do (defun start-browser () (progn(require :asdf)(asdf:load-asd "/home/welle/next/next/next.asd")(ql:quickload :next/gtk))) ?
2:30:02
welle
Bike: It appears to have created a file, but it flashes a screen and dies when I double-click on it.
2:31:25
Bike
it's possible next:start is written to just start the system, but expects the system to remain up afterward. i wouldn't know.
5:33:26
krwq
How do you create an int and get pointer to it with cffi? I've tried this: (cffi:with-foreign-object (user-data :int) (setf user-data 123) (cffi:mem-aptr user-data :int 0)) but it gives me a value and not a pointer to that value
5:46:45
krwq
thanks pillton - so what does mem-aptr do then and why didn't it complain about type when setfing?
5:47:50
pillton
The value bound to user-data is a system area pointer i.e. it is an object representing an address in memory.
5:51:43
pillton
(cffi:mem-aptr user-data :int 1) <=> (cffi:inc-pointer user-data (* 1 (cffi:foreign-type-size :int)))
5:52:36
aeth
Could someone make a C->CL compiler in CL using CFFI? Or does CFFI not let you do everything that C can do?
5:55:29
aeth
Would it be more efficient than other C->CL approaches? Afaik, Mezzano (or was it another LispOS?) uses a C->CL compiler for Doom.
5:56:53
aeth
Ah, the Mezzano Doom port used an LLVM IR to CL compiler. https://news.ycombinator.com/item?id=14120802
5:58:37
aeth
k-hos: Programming as art is all about using things in cool ways they're not supposed to be used (as long as such ways are legal and ethical)
6:02:11
aeth
iqubic: Imo it's worthwhile to know enough assembly that you can read the output of #'disassemble
6:03:45
aeth
disassemble is implementation-specific (and can also be architecture specific, obviously)
10:01:36
Shinmera
iqubic: Learning ASM is worth it, though there's not just one assembly, and they can differ significantly in details.
10:02:10
Shinmera
iqubic: I'd recommend learning a very simple RISC-like first, and then learning x86. The former because it'll be easier to get started with and get an idea of what it's about, and the latter because it's actively useful.