[Top][All Lists]

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

Re: C and Emacs Lisp code parts

From: Andreas Röhler
Subject: Re: C and Emacs Lisp code parts
Date: Sat, 2 Jul 2016 08:34:43 +0200
User-agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Icedove/45.1.0

On 01.07.2016 22:31, Davis Herring wrote:
BTW think at the fate of bazaar. Here Python was at stake and for a time
it growed quickly. Assume the easiness of Python as a factor of success.
But finally a C-based tool won the race, while bazaar went into bigger
and bigger issues. Why? :-)

This has officially gotten ridiculous beyond the reach of emoticons.

$ cd /usr/libexec/git-core
$ file * | grep text
git-add--interactive:    a /usr/bin/perl -w script text executable
git-am:                  POSIX shell script text executable
git-bisect:              POSIX shell script text executable
git-difftool:            a /usr/bin/perl script text executable
git-difftool--helper:    POSIX shell script text executable
git-filter-branch:       POSIX shell script text executable
git-instaweb:            POSIX shell script text executable
git-lost-found:          POSIX shell script text executable
git-merge-octopus:       POSIX shell script text executable
git-merge-one-file:      POSIX shell script text executable
git-merge-resolve:       POSIX shell script text executable
git-mergetool:           POSIX shell script text executable
git-mergetool--lib:      POSIX shell script text executable
git-parse-remote:        POSIX shell script text executable
git-pull:                POSIX shell script text executable
git-quiltimport:         POSIX shell script text executable
git-rebase:              POSIX shell script text executable
git-rebase--interactive: POSIX shell script text executable
git-relink:              a /usr/bin/perl script text executable
git-repack:              POSIX shell script text executable
git-request-pull:        POSIX shell script text executable
git-sh-setup:            POSIX shell script text executable
git-stash:               POSIX shell script text executable
git-submodule:           POSIX shell script text executable
git-web--browse:         POSIX shell script text executable

Git, like init (and /etc/init.d), Emacs, NumPy, and basically every other non-trivial software system in existence, consists of a mix of compiled and interpreted code according to the strengths and weaknesses of each. Everyone knows this.

So why you tell that?

My suggestion is about re-considerating, reversing a kind of dogmatic pro-elisp policy - as I felt it. While completely agree with Clément's posts here --stressing the benefits of Lisp debugging etc.--
these strength is less important WRT lifetime of core functions.

The idea is about reflecting the reasons which part to keep in C, which in Lisp. Don't have a quick answer for that. Roughly would favor to look what belongs to user-space, what not. Also stuff which is used seldom probably doesn't deserve C, etc.

Everyone also knows that no practical benefit is to be had from the (substantial!) effort of rewriting all the high-level code in C (or why not hand-tuned assembler?) because of <https://en.wikipedia.org/wiki/Amdahl's_law>. The numbers that govern your life in that law are the ones that, erm, everyone has told you need to be measured in order to make any kind of useful decisions.

Amdahl is about processing power raised by number of kernels, no idea what the example should contribute here.

Git is widely celebrated for its efficiency. Much of that comes from the design of its (on-disk) data structures; minimizing the cost of disk access is rather more important than the language that is used to search them.


Still don't understand why qualifying git "C-based" should be wrong.

$ cd git
$ ls

abspath.c                   mailinfo.h
aclocal.m4                  mailmap.c
advice.c                    mailmap.h
advice.h                    Makefile
alias.c                     match-trees.c
alloc.c                     merge-blobs.c
archive.c                   merge-blobs.h
archive.h                   merge.c
archive-tar.c               merge-recursive.c
archive-zip.c               merge-recursive.h
argv-array.c                mergesort.c
argv-array.h                mergesort.h
attr.c                      mergetools
attr.h                      name-hash.c
base85.c                    notes.c
bisect.c                    notes-cache.c
bisect.h                    notes-cache.h
blob.c                      notes.h
blob.h                      notes-merge.c
block-sha1                  notes-merge.h
branch.c                    notes-utils.c
branch.h                    notes-utils.h
builtin                     object.c
builtin.h                   object.h
bulk-checkin.c              pack-bitmap.c
bulk-checkin.h              pack-bitmap.h
bundle.c                    pack-bitmap-write.c
bundle.h                    pack-check.c
cache.h                     pack.h
cache-tree.c                pack-objects.c
cache-tree.h                pack-objects.h
check_bindir                pack-revindex.c
check-builtins.sh           pack-revindex.h
check-racy.c                pack-write.c
ci                          pager.c
color.c                     parse-options.c
color.h                     parse-options-cb.c
column.c                    parse-options.h
column.h                    patch-delta.c
combine-diff.c              patch-ids.c
command-list.txt            patch-ids.h
commit.c                    path.c
commit.h                    pathspec.c
commit-slab.h               pathspec.h
compat                      perl
config.c                    pkt-line.c
config.mak.in               pkt-line.h
config.mak.uname            po
configure.ac                ppc
connect.c                   preload-index.c
connected.c                 pretty.c
connected.h                 prio-queue.c
connect.h                   prio-queue.h
contrib                     progress.c
convert.c                   progress.h
convert.h                   prompt.c
copy.c                      prompt.h
COPYING                     quote.c
credential.c                quote.h
credential-cache.c          reachable.c
credential-cache--daemon.c  reachable.h
credential.h                read-cache.c
credential-store.c          README.md
csum-file.c                 ref-filter.c
csum-file.h                 ref-filter.h
ctype.c                     reflog-walk.c
daemon.c                    reflog-walk.h
date.c                      refs
decorate.c                  refs.c
decorate.h                  refs.h
delta.h                     RelNotes
diff.c                      remote.c
diffcore-break.c            remote-curl.c
diffcore-delta.c            remote.h
diffcore.h                  remote-testsvn.c
diffcore-order.c            replace_object.c
diffcore-pickaxe.c          rerere.c
diffcore-rename.c           rerere.h
diff-delta.c                resolve-undo.c
diff.h                      resolve-undo.h
diff-lib.c                  revision.c
diff-no-index.c             revision.h
dir.c                       run-command.c
dir.h                       run-command.h
Documentation               send-pack.c
editor.c                    send-pack.h
entry.c                     sequencer.c
environment.c               sequencer.h
ewah                        server-info.c
exec_cmd.c                  setup.c
exec_cmd.h                  sha1-array.c
fast-import.c               sha1-array.h
fetch-pack.c                sha1_file.c
fetch-pack.h                sha1-lookup.c
fmt-merge-msg.h             sha1-lookup.h
fsck.c                      sha1_name.c
fsck.h                      shallow.c
generate-cmdlist.sh         shell.c
gettext.c                   sh-i18n--envsubst.c
gettext.h                   shortlog.h
git-add--interactive.perl   show-index.c
git-archimport.perl         sideband.c
git-bisect.sh               sideband.h
git.c                       sigchain.c
git-compat-util.h           sigchain.h
git-cvsexportcommit.perl    split-index.c
git-cvsimport.perl          split-index.h
git-cvsserver.perl          strbuf.c
git-difftool--helper.sh     strbuf.h
git-difftool.perl           streaming.c
git-filter-branch.sh        streaming.h
git-gui                     string-list.c
git-instaweb.sh             string-list.h
gitk-git                    submodule.c
git-merge-octopus.sh        submodule-config.c
git-merge-one-file.sh       submodule-config.h
git-merge-resolve.sh        submodule.h
git-mergetool--lib.sh       symlinks.c
git-mergetool.sh            t
git-p4.py                   tag.c
git-parse-remote.sh         tag.h
git-quiltimport.sh          tar.h
git.rc                      tempfile.c
git-rebase--am.sh           tempfile.h
git-rebase--interactive.sh  templates
git-rebase--merge.sh        thread-utils.c
git-rebase.sh               thread-utils.h
git-relink.perl             trace.c
git-remote-testgit.sh       trace.h
git-request-pull.sh         trailer.c
git-send-email.perl         trailer.h
git-sh-i18n.sh              transport.c
git-sh-setup.sh             transport.h
git-stash.sh                transport-helper.c
git-submodule.sh            tree.c
git-svn.perl                tree-diff.c
GIT-VERSION-GEN             tree.h
gitweb                      tree-walk.c
git-web--browse.sh          tree-walk.h
gpg-interface.c             unicode_width.h
gpg-interface.h             unimplemented.sh
graph.c                     unix-socket.c
graph.h                     unix-socket.h
grep.c                      unpack-trees.c
grep.h                      unpack-trees.h
hashmap.c                   update_unicode.sh
hashmap.h                   upload-pack.c
help.c                      url.c
help.h                      url.h
hex.c                       urlmatch.c
http-backend.c              urlmatch.h
http.c                      usage.c
http-fetch.c                userdiff.c
http.h                      userdiff.h
http-push.c                 utf8.c
http-walker.c               utf8.h
ident.c                     varint.c
imap-send.c                 varint.h
INSTALL                     vcs-svn
khash.h                     version.c
kwset.c                     versioncmp.c
kwset.h                     version.h
levenshtein.c               walker.c
levenshtein.h               walker.h
LGPL-2.1                    wildmatch.c
line-log.c                  wildmatch.h
line-log.h                  worktree.c
line-range.c                worktree.h
line-range.h                wrap-for-bin.sh
list-objects.c              wrapper.c
list-objects.h              write_or_die.c
ll-merge.c                  ws.c
ll-merge.h                  wt-status.c
lockfile.c                  wt-status.h
lockfile.h                  xdiff
log-tree.c                  xdiff-interface.c
log-tree.h                  xdiff-interface.h
mailinfo.c                  zlib.c

reply via email to

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