- added configure option for supporting large files.
This commit is contained in:
parent
bdda213120
commit
122f4f1663
|
@ -177,6 +177,12 @@
|
||||||
/* Version number of package */
|
/* Version number of package */
|
||||||
#undef VERSION
|
#undef VERSION
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
#undef _FILE_OFFSET_BITS
|
||||||
|
|
||||||
|
/* Define for large files, on AIX-style hosts. */
|
||||||
|
#undef _LARGE_FILES
|
||||||
|
|
||||||
/* Define to empty if `const' does not conform to ANSI C. */
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
#undef const
|
#undef const
|
||||||
|
|
||||||
|
|
|
@ -740,6 +740,7 @@ ac_subst_files=''
|
||||||
ac_user_opts='
|
ac_user_opts='
|
||||||
enable_option_checking
|
enable_option_checking
|
||||||
enable_dependency_tracking
|
enable_dependency_tracking
|
||||||
|
enable_largefile
|
||||||
enable_libffi
|
enable_libffi
|
||||||
'
|
'
|
||||||
ac_precious_vars='build_alias
|
ac_precious_vars='build_alias
|
||||||
|
@ -1386,6 +1387,7 @@ Optional Features:
|
||||||
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
||||||
--disable-dependency-tracking speeds up one-time build
|
--disable-dependency-tracking speeds up one-time build
|
||||||
--enable-dependency-tracking do not reject slow dependency extractors
|
--enable-dependency-tracking do not reject slow dependency extractors
|
||||||
|
--disable-largefile omit support for large files
|
||||||
--enable-libffi enable support for libffi.
|
--enable-libffi enable support for libffi.
|
||||||
|
|
||||||
Some influential environment variables:
|
Some influential environment variables:
|
||||||
|
@ -5614,6 +5616,362 @@ _ACEOF
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check whether --enable-largefile was given.
|
||||||
|
if test "${enable_largefile+set}" = set; then
|
||||||
|
enableval=$enable_largefile;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$enable_largefile" != no; then
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
|
||||||
|
$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
|
||||||
|
if test "${ac_cv_sys_largefile_CC+set}" = set; then
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
ac_cv_sys_largefile_CC=no
|
||||||
|
if test "$GCC" != yes; then
|
||||||
|
ac_save_CC=$CC
|
||||||
|
while :; do
|
||||||
|
# IRIX 6.2 and later do not support large files by default,
|
||||||
|
# so use the C compiler's -n32 option if that helps.
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <sys/types.h>
|
||||||
|
/* Check that off_t can represent 2**63 - 1 correctly.
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (ac_try="$ac_compile"
|
||||||
|
case "(($ac_try" in
|
||||||
|
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||||
|
*) ac_try_echo=$ac_try;;
|
||||||
|
esac
|
||||||
|
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
|
||||||
|
$as_echo "$ac_try_echo") >&5
|
||||||
|
(eval "$ac_compile") 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && {
|
||||||
|
test -z "$ac_c_werror_flag" ||
|
||||||
|
test ! -s conftest.err
|
||||||
|
} && test -s conftest.$ac_objext; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
$as_echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f core conftest.err conftest.$ac_objext
|
||||||
|
CC="$CC -n32"
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (ac_try="$ac_compile"
|
||||||
|
case "(($ac_try" in
|
||||||
|
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||||
|
*) ac_try_echo=$ac_try;;
|
||||||
|
esac
|
||||||
|
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
|
||||||
|
$as_echo "$ac_try_echo") >&5
|
||||||
|
(eval "$ac_compile") 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && {
|
||||||
|
test -z "$ac_c_werror_flag" ||
|
||||||
|
test ! -s conftest.err
|
||||||
|
} && test -s conftest.$ac_objext; then
|
||||||
|
ac_cv_sys_largefile_CC=' -n32'; break
|
||||||
|
else
|
||||||
|
$as_echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f core conftest.err conftest.$ac_objext
|
||||||
|
break
|
||||||
|
done
|
||||||
|
CC=$ac_save_CC
|
||||||
|
rm -f conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
|
||||||
|
$as_echo "$ac_cv_sys_largefile_CC" >&6; }
|
||||||
|
if test "$ac_cv_sys_largefile_CC" != no; then
|
||||||
|
CC=$CC$ac_cv_sys_largefile_CC
|
||||||
|
fi
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
|
||||||
|
$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
|
||||||
|
if test "${ac_cv_sys_file_offset_bits+set}" = set; then
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
while :; do
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <sys/types.h>
|
||||||
|
/* Check that off_t can represent 2**63 - 1 correctly.
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (ac_try="$ac_compile"
|
||||||
|
case "(($ac_try" in
|
||||||
|
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||||
|
*) ac_try_echo=$ac_try;;
|
||||||
|
esac
|
||||||
|
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
|
||||||
|
$as_echo "$ac_try_echo") >&5
|
||||||
|
(eval "$ac_compile") 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && {
|
||||||
|
test -z "$ac_c_werror_flag" ||
|
||||||
|
test ! -s conftest.err
|
||||||
|
} && test -s conftest.$ac_objext; then
|
||||||
|
ac_cv_sys_file_offset_bits=no; break
|
||||||
|
else
|
||||||
|
$as_echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#define _FILE_OFFSET_BITS 64
|
||||||
|
#include <sys/types.h>
|
||||||
|
/* Check that off_t can represent 2**63 - 1 correctly.
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (ac_try="$ac_compile"
|
||||||
|
case "(($ac_try" in
|
||||||
|
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||||
|
*) ac_try_echo=$ac_try;;
|
||||||
|
esac
|
||||||
|
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
|
||||||
|
$as_echo "$ac_try_echo") >&5
|
||||||
|
(eval "$ac_compile") 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && {
|
||||||
|
test -z "$ac_c_werror_flag" ||
|
||||||
|
test ! -s conftest.err
|
||||||
|
} && test -s conftest.$ac_objext; then
|
||||||
|
ac_cv_sys_file_offset_bits=64; break
|
||||||
|
else
|
||||||
|
$as_echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
ac_cv_sys_file_offset_bits=unknown
|
||||||
|
break
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
|
||||||
|
$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
|
||||||
|
case $ac_cv_sys_file_offset_bits in #(
|
||||||
|
no | unknown) ;;
|
||||||
|
*)
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
|
||||||
|
_ACEOF
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
rm -rf conftest*
|
||||||
|
if test $ac_cv_sys_file_offset_bits = unknown; then
|
||||||
|
{ $as_echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
|
||||||
|
$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
|
||||||
|
if test "${ac_cv_sys_large_files+set}" = set; then
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
while :; do
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <sys/types.h>
|
||||||
|
/* Check that off_t can represent 2**63 - 1 correctly.
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (ac_try="$ac_compile"
|
||||||
|
case "(($ac_try" in
|
||||||
|
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||||
|
*) ac_try_echo=$ac_try;;
|
||||||
|
esac
|
||||||
|
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
|
||||||
|
$as_echo "$ac_try_echo") >&5
|
||||||
|
(eval "$ac_compile") 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && {
|
||||||
|
test -z "$ac_c_werror_flag" ||
|
||||||
|
test ! -s conftest.err
|
||||||
|
} && test -s conftest.$ac_objext; then
|
||||||
|
ac_cv_sys_large_files=no; break
|
||||||
|
else
|
||||||
|
$as_echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#define _LARGE_FILES 1
|
||||||
|
#include <sys/types.h>
|
||||||
|
/* Check that off_t can represent 2**63 - 1 correctly.
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (ac_try="$ac_compile"
|
||||||
|
case "(($ac_try" in
|
||||||
|
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||||
|
*) ac_try_echo=$ac_try;;
|
||||||
|
esac
|
||||||
|
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
|
||||||
|
$as_echo "$ac_try_echo") >&5
|
||||||
|
(eval "$ac_compile") 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && {
|
||||||
|
test -z "$ac_c_werror_flag" ||
|
||||||
|
test ! -s conftest.err
|
||||||
|
} && test -s conftest.$ac_objext; then
|
||||||
|
ac_cv_sys_large_files=1; break
|
||||||
|
else
|
||||||
|
$as_echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
ac_cv_sys_large_files=unknown
|
||||||
|
break
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
|
||||||
|
$as_echo "$ac_cv_sys_large_files" >&6; }
|
||||||
|
case $ac_cv_sys_large_files in #(
|
||||||
|
no | unknown) ;;
|
||||||
|
*)
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define _LARGE_FILES $ac_cv_sys_large_files
|
||||||
|
_ACEOF
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
rm -rf conftest*
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
{ $as_echo "$as_me:$LINENO: checking for library containing dlsym" >&5
|
{ $as_echo "$as_me:$LINENO: checking for library containing dlsym" >&5
|
||||||
|
@ -7402,6 +7760,7 @@ _ACEOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
{ $as_echo "$as_me:$LINENO: checking for pid_t" >&5
|
{ $as_echo "$as_me:$LINENO: checking for pid_t" >&5
|
||||||
$as_echo_n "checking for pid_t... " >&6; }
|
$as_echo_n "checking for pid_t... " >&6; }
|
||||||
|
|
|
@ -34,6 +34,7 @@ if test "$ac_cv_sizeof_void_p" = 4; then
|
||||||
[use flat segment and dirty vectors (not used yet)])
|
[use flat segment and dirty vectors (not used yet)])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
AC_SEARCH_LIBS(dlsym, dl,, [AC_MSG_ERROR([Cannot find libdl])])
|
AC_SEARCH_LIBS(dlsym, dl,, [AC_MSG_ERROR([Cannot find libdl])])
|
||||||
|
@ -97,6 +98,7 @@ AC_TYPE_SIZE_T
|
||||||
AC_HEADER_TIME
|
AC_HEADER_TIME
|
||||||
AC_STRUCT_TM
|
AC_STRUCT_TM
|
||||||
|
|
||||||
|
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
AC_FUNC_FORK
|
AC_FUNC_FORK
|
||||||
AC_FUNC_MALLOC
|
AC_FUNC_MALLOC
|
||||||
|
|
Binary file not shown.
|
@ -138,7 +138,7 @@
|
||||||
\noindent Ikarus Scheme\\ User's Guide\\ }
|
\noindent Ikarus Scheme\\ User's Guide\\ }
|
||||||
\noindent \rule{\textwidth}{6pt}
|
\noindent \rule{\textwidth}{6pt}
|
||||||
{\fontsize{18}{18} \fstpagefont{}
|
{\fontsize{18}{18} \fstpagefont{}
|
||||||
\hfill{} (Preliminary Document) \hfill Version~0.0.3 }
|
\hfill{} (Preliminary Document) \hfill Version~0.0.4 }
|
||||||
\vfill
|
\vfill
|
||||||
{ \fontsize{24}{24} \fstpagefont{}
|
{ \fontsize{24}{24} \fstpagefont{}
|
||||||
\hfill{} Abdulaziz Ghuloum}
|
\hfill{} Abdulaziz Ghuloum}
|
||||||
|
@ -203,10 +203,8 @@ of the features found in the current standard, the
|
||||||
Revised$^\mathrm{6}$ report on the algorithmic language
|
Revised$^\mathrm{6}$ report on the algorithmic language
|
||||||
Scheme\cite{r6rs} including full \rnrs{6} library and script syntax,
|
Scheme\cite{r6rs} including full \rnrs{6} library and script syntax,
|
||||||
syntax-case, unicode strings, bytevectors, user-defined record
|
syntax-case, unicode strings, bytevectors, user-defined record
|
||||||
types, exception handling, conditions, and enumerations. More than
|
types, exception handling, conditions, and enumerations.
|
||||||
94\% of the \rnrs{6} procedures and keywords are currently
|
|
||||||
implemented and subsequent releases will proceed towards brining
|
|
||||||
Ikarus to full \rnrs{6} conformance.
|
|
||||||
|
|
||||||
The main purpose behind releasing Ikarus early is to give Scheme
|
The main purpose behind releasing Ikarus early is to give Scheme
|
||||||
programmers the opportunity to experiment with the various new
|
programmers the opportunity to experiment with the various new
|
||||||
|
@ -258,11 +256,12 @@ GNU/Linux, FreeBSD, NetBSD, and Microsoft Windows.
|
||||||
|
|
||||||
\subsection{Hardware}
|
\subsection{Hardware}
|
||||||
|
|
||||||
Ikarus Scheme runs on the IA-32 (\emph{x86}) architecture
|
Ikarus Scheme runs in 32-bit mode on the IA-32 (\emph{x86})
|
||||||
supporting SSE2 extensions. This includes the Athlon 64,
|
architecture supporting SSE2 extensions. It also runs in 64-bit
|
||||||
Sempron 64, and Turion 64 processors from AMD and the Pentium 4, Xeon,
|
mode on platforms supporing the AMD-64 architecture. This includes
|
||||||
Celeron, Pentium M, Core, and Core2 processors from Intel. The
|
the Athlon 64, Sempron 64, and Turion 64 processors from AMD and the
|
||||||
system does not run on Intel Pentium III or earlier
|
Pentium 4, Xeon, Celeron, Pentium M, Core, and Core2 processors from
|
||||||
|
Intel. The system does not run on Intel Pentium III or earlier
|
||||||
processors.
|
processors.
|
||||||
|
|
||||||
The Ikarus compiler generates SSE2 instructions to handle Scheme's
|
The Ikarus compiler generates SSE2 instructions to handle Scheme's
|
||||||
|
@ -292,10 +291,21 @@ available for most operating systems. Alternatively, GMP can be
|
||||||
downloaded from \\
|
downloaded from \\
|
||||||
\url{http://gmplib.org/}.
|
\url{http://gmplib.org/}.
|
||||||
|
|
||||||
\BoxedText{Note:}{Ikarus runs in 32-bit mode only.
|
|
||||||
To run it in 64-bit environments, you will have to obtain the 32-bit
|
\item\textbf{FFI:}
|
||||||
version of GMP, or compile it yourself after adding \texttt{ABI=32}
|
The \texttt{libffi} library (version \texttt{3.0.6}) can be utilized
|
||||||
to its configuration options.}
|
to enable Scheme procedures to call and be called from native
|
||||||
|
procedure (see Chapter~\ref{chapter:foreign} for details).
|
||||||
|
To enable
|
||||||
|
\texttt{libffi} while building Ikarus, one must pass
|
||||||
|
\texttt{--enable-ffi} to the \texttt{configure} script along with
|
||||||
|
the paths to \texttt{libffi}'s include and lib directory.
|
||||||
|
The \texttt{libffi} library can be obtained from
|
||||||
|
\url{http://sourceware.org/libffi/}.
|
||||||
|
FFI support is optional. It is not required if all one needs is
|
||||||
|
writing pure Scheme code.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\item\textbf{GCC:} The GNU C Compiler is required to build the Ikarus
|
\item\textbf{GCC:} The GNU C Compiler is required to build the Ikarus
|
||||||
|
@ -420,7 +430,7 @@ need to have administrator privileges (use the \texttt{sudo} or
|
||||||
\item Test that Ikarus runs from the command line.
|
\item Test that Ikarus runs from the command line.
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
$ ikarus
|
$ ikarus
|
||||||
Ikarus Scheme version 0.0.3
|
Ikarus Scheme version 0.0.4
|
||||||
Copyright (c) 2006-2008 Abdulaziz Ghuloum
|
Copyright (c) 2006-2008 Abdulaziz Ghuloum
|
||||||
|
|
||||||
>
|
>
|
||||||
|
@ -474,15 +484,17 @@ The rest of the command-line arguments are recognized by the
|
||||||
standard Scheme run time system. They are processed after the
|
standard Scheme run time system. They are processed after the
|
||||||
boot file is loaded.
|
boot file is loaded.
|
||||||
|
|
||||||
\item \texttt{ikarus --r6rs-script script-file-name [arguments ...]}
|
\item \texttt{ikarus files ... --r6rs-script script-file arguments ...}
|
||||||
|
|
||||||
\index{R6RS Script@\rnrs{6} Script} The \texttt{--r6rs-script} argument
|
\index{R6RS Script@\rnrs{6} Script} The \texttt{--r6rs-script}
|
||||||
instructs Ikarus that the supplied file is an \rnrs{6} script. See
|
argument instructs Ikarus that the supplied file is an \rnrs{6}
|
||||||
Section~\ref{sec:scripts} for a short introduction to writing \rnrs{6}
|
script. The optional list of \texttt{files} must be paths to files,
|
||||||
scripts. The script file name and any additional optional
|
each containing a set of libraries that Ikarus must load,
|
||||||
\texttt{arguments}
|
sequentially, before running the \rnrs{6} script
|
||||||
can be obtained by calling the
|
\texttt{script-file}. See Section~\ref{sec:scripts} for a short
|
||||||
\idxtt{command-line} procedure.
|
introduction to writing \rnrs{6} scripts. The script file name and
|
||||||
|
any additional optional \texttt{arguments} can be obtained by
|
||||||
|
calling the \idxtt{command-line} procedure.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
$ cat test.ss
|
$ cat test.ss
|
||||||
|
@ -512,10 +524,7 @@ string \texttt{"*interactive*"}, corresponding to the script name in
|
||||||
\BoxedText{Note:}{The interactive mode is intended for quickly
|
\BoxedText{Note:}{The interactive mode is intended for quickly
|
||||||
experimenting with the built-in features. It is intended neither
|
experimenting with the built-in features. It is intended neither
|
||||||
for developing applications nor for writing any substantial pieces
|
for developing applications nor for writing any substantial pieces
|
||||||
of code. The main reason for this is that the interaction between
|
of code.}
|
||||||
\rnrs{6} libraries and the interactive environment is not well
|
|
||||||
understood. We hope to achieve better interaction between the two
|
|
||||||
subsystems in the future.}
|
|
||||||
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
@ -561,7 +570,6 @@ by double-clicking on it. This brings up a terminal window in which
|
||||||
the script is executed. The \texttt{.command} extension can be
|
the script is executed. The \texttt{.command} extension can be
|
||||||
hidden from the \emph{Get Info} item from the Finder's File menu.}
|
hidden from the \emph{Get Info} item from the Finder's File menu.}
|
||||||
|
|
||||||
\newpage
|
|
||||||
|
|
||||||
\section{Mapping library names to file names}
|
\section{Mapping library names to file names}
|
||||||
|
|
||||||
|
@ -689,6 +697,61 @@ of the package would look like:
|
||||||
foo/compat.mzscheme.ss : {\textrm{specific for MzScheme}}
|
foo/compat.mzscheme.ss : {\textrm{specific for MzScheme}}
|
||||||
\end{Code}
|
\end{Code}
|
||||||
|
|
||||||
|
|
||||||
|
By default, running the \texttt{configure} script
|
||||||
|
installs a set of contributed libraries into the
|
||||||
|
\verb|/usr/local/lib/ikarus| directory. If a \verb|--prefix DIR|
|
||||||
|
argument was supplied to \texttt{configure}, then the libraries are
|
||||||
|
installed in the \verb|DIR/ikarus/lib| directory.
|
||||||
|
|
||||||
|
You may install additional libraries into the Ikarus library
|
||||||
|
directory. Doing so makes them available for \texttt{import} into
|
||||||
|
other libraries and script regardless of where the importing code is
|
||||||
|
located or the current directory in which it is executed.
|
||||||
|
|
||||||
|
\section{Defining \texttt{IKARUS\_LIBRARY\_PATH}}
|
||||||
|
\index{ikarus library path@\texttt{IKARUS\_LIBRARY\_PATH}}
|
||||||
|
|
||||||
|
There may be situations in which you may wish to install your own
|
||||||
|
libraries into a different location. For example, you may not have
|
||||||
|
sufficient administrative privileges to write to the system
|
||||||
|
directory, or you may wish to keep your own libraries separate from
|
||||||
|
the standard libraries. Whatever the reason is, your can store your
|
||||||
|
library files in any location you want and set up the
|
||||||
|
\verb|IKARUS_LIBRARY_PATH| environment variable to point to these
|
||||||
|
locations. The value of \verb|IKARUS_LIBRARY_PATH| is a
|
||||||
|
colon-separated list of directories in which Ikarus will search.
|
||||||
|
|
||||||
|
For example, suppose your script imports the
|
||||||
|
\texttt{(streams~derived)} library. First, Ikarus will map the
|
||||||
|
library name to the file path \verb|streams/derived.ss|. Suppose
|
||||||
|
that Ikarus was installed using the \verb|--prefix /usr/local|
|
||||||
|
configuration option, and suppose further that the value of
|
||||||
|
\verb|IKARUS_LIBRARY_PATH| is set by the user to be
|
||||||
|
\verb|/home/john/ikarus-libraries:/home/john/srfis|. Ikarus will
|
||||||
|
search in the following locations in sequence until it finds the
|
||||||
|
file it is looking for.
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
./streams/derived.ss
|
||||||
|
/home/john/ikarus-libraries/streams/derived.ss
|
||||||
|
/home/john/srfis/streams/derived.ss
|
||||||
|
/usr/local/lib/ikarus/streams/derived.ss
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
The method in which the value of \verb|IKARUS_LIBRARY_PATH| is
|
||||||
|
defined is typically shell dependant. If you use GNU Bash, you
|
||||||
|
typically set the values of environment variables in the
|
||||||
|
\verb|~/.bash_profile| or \verb|~/.bashrc| file by adding the
|
||||||
|
following lines:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
IKARUS_LIBRARY_PATH=/path/to/some/directory:/and/another
|
||||||
|
export IKARUS_LIBRARY_PATH
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
\chapter{\rnrs{6} Crash Course}
|
\chapter{\rnrs{6} Crash Course}
|
||||||
|
|
||||||
The major difference between \rnrs{5} and \rnrs{6} is the way
|
The major difference between \rnrs{5} and \rnrs{6} is the way
|
||||||
|
@ -2107,6 +2170,130 @@ displayed.
|
||||||
12
|
12
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
\defun{system}{procedure}
|
||||||
|
\texttt{(system string)}
|
||||||
|
|
||||||
|
The \texttt{system} procedure takes a string represeting an external
|
||||||
|
shell command and arguments and invokes the shell (typically
|
||||||
|
\texttt{sh} on Unix systems) on this command. The returned value
|
||||||
|
from \texttt{system} is the exit status of the external command.
|
||||||
|
|
||||||
|
Ikarus's \texttt{system} procedure is a thin wrapper around the
|
||||||
|
\texttt{system} procedure in the Standard C Library \texttt{libc}.
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
> (system "ls M*")
|
||||||
|
Makefile Makefile.am Makefile.in
|
||||||
|
0
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
\defun{process}{procedure}
|
||||||
|
\texttt{(process program-name args ...)}
|
||||||
|
|
||||||
|
The \texttt{process} procedure takes as input a string representing
|
||||||
|
the path to an external program and a set of strings that are the
|
||||||
|
arguments to the external program. It invokes the program with the
|
||||||
|
given arguments, and returns four values: (1) a process identifier
|
||||||
|
(\texttt{pid}),
|
||||||
|
(2) an output port which pipes to the process's \texttt{stdin}, (3)
|
||||||
|
an input port wired to the process's \texttt{stdout}, and (4) an
|
||||||
|
input port wired to the process's \texttt{stderr}. All three ports
|
||||||
|
are blocking: reading and writing to any one of them blocks Ikarus
|
||||||
|
until the some bytes are available for reading or writing.
|
||||||
|
Attempting to read from the process's \texttt{stdout} port may block
|
||||||
|
indefinitely if the external program does not write anything
|
||||||
|
(e.g.,~if it attempts to read from \texttt{stdin} instead).
|
||||||
|
Communicating with an external process must therefore be done
|
||||||
|
according to the protocol in which the external process
|
||||||
|
communicates.
|
||||||
|
|
||||||
|
|
||||||
|
\defun{waitpid}{procedure}
|
||||||
|
\texttt{(waitpid)}\\
|
||||||
|
\texttt{(waitpid pid)}\\
|
||||||
|
\texttt{(waitpid pid block?)}\\
|
||||||
|
\texttt{(waitpid pid block? want-error?)}
|
||||||
|
|
||||||
|
The \texttt{waitpid} procedure waits for the process with the given
|
||||||
|
\texttt{pid} to terminate and, if successful, returns a
|
||||||
|
\texttt{wstatus} object encapsulating the wait status of the
|
||||||
|
process. Without arguments, \texttt{waitpid} defaults the
|
||||||
|
\texttt{pid} to \texttt{-1} which allows one to wait for any child
|
||||||
|
process to exit. If the \texttt{block?} argument is true (the
|
||||||
|
default), \texttt{waitpid} blocks indefinitely waiting for a child
|
||||||
|
process to exit. When \texttt{block?} is false, \texttt{waitpid}
|
||||||
|
returns immediately regardless of whether or not a child process has
|
||||||
|
exited. The \texttt{want-error?} controls what happens if
|
||||||
|
\texttt{block?} was specified to be \texttt{\#f} and no child had
|
||||||
|
exited. If \texttt{want-error?} is true (the default), an error is
|
||||||
|
signaled. Otherwise, \texttt{waitpid} returns \texttt{\#f} if no
|
||||||
|
process has exited. Operations on the wait status result are listed
|
||||||
|
below.
|
||||||
|
|
||||||
|
\defun{wstatus-pid}{procedure}
|
||||||
|
\texttt{(wstatus-pid wstatus)}
|
||||||
|
|
||||||
|
The \texttt{wstatus-pid} returns the \texttt{pid} of the process
|
||||||
|
whose status is recorded in the \texttt{wstatus} object. This
|
||||||
|
\texttt{pid} is most useful when the default \texttt{pid} of
|
||||||
|
\texttt{-1} is given to \texttt{waitpid} and thus the pid of the
|
||||||
|
exiting process is not known beforehand.
|
||||||
|
|
||||||
|
|
||||||
|
\defun{wstatus-exit-status}{procedure}
|
||||||
|
\texttt{(wstatus-exit-status wstatus)}
|
||||||
|
|
||||||
|
The procedure \texttt{wstatus-exit-status} returns the exit status
|
||||||
|
of the child process. It is typically \texttt{0} if the child
|
||||||
|
exited normally and has other numeric values if the child process
|
||||||
|
encountered an error.
|
||||||
|
|
||||||
|
\defun{wstatus-received-signal}{procedure}
|
||||||
|
\texttt{(wstatus-received-signal wstatus)}
|
||||||
|
|
||||||
|
The procedure \texttt{wstatus-received-signal} returns the
|
||||||
|
name of the signal (or the number of the signal if the name is not
|
||||||
|
known) that caused the child process to exit.
|
||||||
|
|
||||||
|
The signal name is one of the following symbols:
|
||||||
|
\begin{verbatim}
|
||||||
|
SIGABRT SIGALRM SIGBUS SIGCHLD SIGCONT SIGFPE SIGHUP
|
||||||
|
SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP
|
||||||
|
SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIGPOLL
|
||||||
|
SIGPROF SIGSYS SIGTRAP SIGURG SIGVTALRM SIGXCPU SIGXFSZ
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
\defun{kill}{procedure}
|
||||||
|
\texttt{(kill pid signal-name)}
|
||||||
|
|
||||||
|
The \texttt{kill} procedure takes a \texttt{pid} and a signal name
|
||||||
|
(a symbol from the list above) and asks the operating system to send
|
||||||
|
the signal to the given process.
|
||||||
|
|
||||||
|
|
||||||
|
\defun{process-nonblocking}{procedure}
|
||||||
|
\texttt{(process-nonblocking program-name args ...)}
|
||||||
|
|
||||||
|
The procedure \texttt{process-nonblocking} is similar to the
|
||||||
|
\texttt{process} procedure except that the three returned ports are
|
||||||
|
put in nonblocking mode. Attempting to perform a read or write
|
||||||
|
operation on a nonblocking port in which bytes are not available for
|
||||||
|
reading or writing causes Ikarus to enqueue the port with the
|
||||||
|
continuation in which the read/write operation occurs and attempt to
|
||||||
|
dispatch previously enqueued ports on which some bytes are ready for
|
||||||
|
read or write.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% [kill i]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\chapter{\label{chapter:foreign}The \texttt{(ikarus foreign)} Library}
|
\chapter{\label{chapter:foreign}The \texttt{(ikarus foreign)} Library}
|
||||||
|
|
||||||
This chapter describes the facilities through which Ikarus
|
This chapter describes the facilities through which Ikarus
|
||||||
|
@ -2780,247 +2967,6 @@ procedure leaks a small amount of memory. This is because the
|
||||||
system cannot track such pointers that go into native code
|
system cannot track such pointers that go into native code
|
||||||
(which may retain such pointers indefinitely). Use judiciously.}
|
(which may retain such pointers indefinitely). Use judiciously.}
|
||||||
|
|
||||||
% \chapter{\label{chapter:objc}The \texttt{(ikarus~objc)} Library}
|
|
||||||
% \newpage
|
|
||||||
|
|
||||||
\chapter{\label{chapter:contributed}Contributed Libraries}
|
|
||||||
|
|
||||||
We try to keep Ikarus Scheme small and its complexity manageable.
|
|
||||||
Libraries that are not an essential part of Ikarus are not included
|
|
||||||
in the Ikarus proper, instead, they are distributed with Ikarus in
|
|
||||||
source form. Such libraries may be written specifically
|
|
||||||
for Ikarus, or they may be portable libraries that can be used in
|
|
||||||
Ikarus. SRFIs or other libraries contributed by members of the
|
|
||||||
Scheme community belong to this section.
|
|
||||||
|
|
||||||
Using contributed libraries is no different from using any of the
|
|
||||||
built-in libraries---all one has to do is add the library name to
|
|
||||||
the \texttt{import} clause and the rest is done by the system.
|
|
||||||
|
|
||||||
If you have written a useful \rnrs{6} library and wish for it to be
|
|
||||||
available for a wider audience, contact us and we would be delighted
|
|
||||||
to include information about it in the next release of Ikarus.
|
|
||||||
% High
|
|
||||||
% quality SRFIs with \rnrs{6} reference implementations will be
|
|
||||||
% distributed with Ikarus as they become available.
|
|
||||||
|
|
||||||
\BoxedText{Note:}{Contributed libraries may have bugs on their own
|
|
||||||
or may exhibit bugs in Ikarus itself. If you have a problem using
|
|
||||||
any of these libraries, please try to resolve the issue by
|
|
||||||
contacting the library author first. Do not hesitate to file a bug
|
|
||||||
on Ikarus if you believe that Ikarus is at fault.}
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
\section*{Library files}
|
|
||||||
|
|
||||||
The contributed libraries are installed in your system when Ikarus
|
|
||||||
was installed. By default, running the \texttt{configure} script
|
|
||||||
installs the contributed libraries into the
|
|
||||||
\verb|/usr/local/lib/ikarus| directory. If a \verb|--prefix DIR|
|
|
||||||
argument was supplied to \texttt{configure}, then the libraries are
|
|
||||||
installed in the \verb|DIR/ikarus/lib| directory.
|
|
||||||
|
|
||||||
You may install additional libraries into the Ikarus library
|
|
||||||
directory. Doing so makes them available for \texttt{import} into
|
|
||||||
other libraries and script regardless of where the importing code is
|
|
||||||
located or the current directory in which it is executed.
|
|
||||||
|
|
||||||
\section*{Defining \texttt{IKARUS\_LIBRARY\_PATH}}
|
|
||||||
\index{ikarus library path@\texttt{IKARUS\_LIBRARY\_PATH}}
|
|
||||||
|
|
||||||
There may be situations in which you may wish to install your own
|
|
||||||
libraries into a different location. For example, you may not have
|
|
||||||
sufficient administrative privileges to write to the system
|
|
||||||
directory, or you may wish to keep your own libraries separate from
|
|
||||||
the standard libraries. Whatever the reason is, your can store your
|
|
||||||
library files in any location you want and set up the
|
|
||||||
\verb|IKARUS_LIBRARY_PATH| environment variable to point to these
|
|
||||||
locations. The value of \verb|IKARUS_LIBRARY_PATH| is a
|
|
||||||
colon-separated list of directories in which Ikarus will search.
|
|
||||||
|
|
||||||
For example, suppose your script imports the
|
|
||||||
\texttt{(streams~derived)} library. First, Ikarus will map the
|
|
||||||
library name to the file path \verb|streams/derived.ss|. Suppose
|
|
||||||
that Ikarus was installed using the \verb|--prefix /usr/local|
|
|
||||||
configuration option, and suppose further that the value of
|
|
||||||
\verb|IKARUS_LIBRARY_PATH| is set by the user to be
|
|
||||||
\verb|/home/john/ikarus-libraries:/home/john/srfis|. Ikarus will
|
|
||||||
search in the following locations in sequence until it finds the
|
|
||||||
file it is looking for.
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
./streams/derived.ss
|
|
||||||
/home/john/ikarus-libraries/streams/derived.ss
|
|
||||||
/home/john/srfis/streams/derived.ss
|
|
||||||
/usr/local/lib/ikarus/streams/derived.ss
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
\BoxedText{Warning:}{The current behavior of Ikarus regarding the
|
|
||||||
\texttt{IKARUS\_LIBRARY\_PATH} is preliminary and is likely to change
|
|
||||||
in future releases.}
|
|
||||||
|
|
||||||
The method in which the value of \verb|IKARUS_LIBRARY_PATH| is
|
|
||||||
defined is typically shell dependant. If you use GNU Bash, you
|
|
||||||
typically set the values of environment variables in the
|
|
||||||
\verb|~/.bash_profile| or \verb|~/.bashrc| file by adding the
|
|
||||||
following lines:
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
IKARUS_LIBRARY_PATH=/path/to/some/directory:/and/another
|
|
||||||
export IKARUS_LIBRARY_PATH
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
|
|
||||||
|
|
||||||
\section{\label{sec:aux-opengl}\texttt{(gl)} and \texttt{(glut)}}
|
|
||||||
FIXME
|
|
||||||
\newpage
|
|
||||||
|
|
||||||
|
|
||||||
\section{\texttt{(srfi *)}}
|
|
||||||
|
|
||||||
Ported by: Derick Eddington
|
|
||||||
|
|
||||||
Scheme Requests For Implementation (SRFIs) for R6RS/Ikarus can be found
|
|
||||||
at:
|
|
||||||
\url{https://code.launchpad.net/~ikarus-srfi-team/ikarus-libraries/srfi}
|
|
||||||
|
|
||||||
Currently provided:
|
|
||||||
\begin{itemize}
|
|
||||||
\item SRFI-0: \verb|(srfi feature-expand)|
|
|
||||||
\item SRFI-1: \verb|(srfi lists)|
|
|
||||||
\item SRFI-2: \verb|(srfi and-let)|
|
|
||||||
\item SRFI-6: \verb|(srfi string-ports)|
|
|
||||||
\item SRFI-8: \verb|(srfi receive)|
|
|
||||||
\item SRFI-9: \verb|(srfi records)|
|
|
||||||
\item SRFI-11: \verb|(srfi let-values)|
|
|
||||||
\item SRFI-13: \verb|(srfi strings)|
|
|
||||||
\item SRFI-14: \verb|(srfi char-set)|
|
|
||||||
\item SRFI-16: \verb|(srfi case-lambda)|
|
|
||||||
\item SRFI-19: \verb|(srfi time)|
|
|
||||||
\item SRFI-23: \verb|(srfi error-reporting)|
|
|
||||||
\item SRFI-26: \verb|(srfi specialize-procedures)|
|
|
||||||
\item SRFI-27: \verb|(srfi random)|
|
|
||||||
\item SRFI-31: \verb|(srfi rec)|
|
|
||||||
\item SRFI-37: \verb|(srfi args-fold)|
|
|
||||||
\item SRFI-39: \verb|(srfi parameters)|
|
|
||||||
\item SRFI-41: \verb|(srfi streams)| \hspace{.5in}by Phil Bewig
|
|
||||||
\item SRFI-42: \verb|(srfi eager-comprehensions)|
|
|
||||||
\item SRFI-43: \verb|(srfi vectors)|
|
|
||||||
\item SRFI-67: \verb|(srfi compare)|
|
|
||||||
\item SRFI-78: \verb|(srfi lightweight-testing)|
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
To install (you'll need a new version of the Bazaar revision
|
|
||||||
control system):
|
|
||||||
\begin{verbatim}
|
|
||||||
$ bzr checkout --lightweight http://bazaar.launchpad.net/
|
|
||||||
~ikarus-srfi-team/ikarus-libraries/srfi
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
After you do the above, you'll get a new \verb|srfi/| directory in the
|
|
||||||
directory you ran the checkout command, and that parent directory of the
|
|
||||||
new srfi/ directory needs to be in your
|
|
||||||
\verb|IKARUS_LIBRARY_PATH|, so that
|
|
||||||
attempts to import \verb|(srfi ---)| will look in the directory containing the
|
|
||||||
\verb|srfi/| directory.
|
|
||||||
|
|
||||||
You can stay up-to-date by changing directory into your
|
|
||||||
\verb|srfi/| and doing:
|
|
||||||
\begin{verbatim}
|
|
||||||
$ bzr update
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
\section{\texttt{(math number-theory)}}
|
|
||||||
Provided by: Jens Axel Søgaard
|
|
||||||
|
|
||||||
URL: \url{https://code.launchpad.net/~soegaard/ikarus-libraries/soegaard}
|
|
||||||
|
|
||||||
|
|
||||||
This library contains number theory code that I have written
|
|
||||||
over a long period. The code began as an experiment. I
|
|
||||||
grabbed a book on number theory from the shelve (\emph{``Elementary
|
|
||||||
Number Theory''} by Gareth A. Jones and J. Mary Jones) and began
|
|
||||||
illustrating each definition and each theorem with Scheme
|
|
||||||
code. The first half of the surce code is thus a well
|
|
||||||
commented mix of definitions, theorems and code.
|
|
||||||
|
|
||||||
The second half contains more sophisticated algorithms mostly
|
|
||||||
of from the excellent book \emph{``Modern Computer Algebra''} by
|
|
||||||
Joachim von zur Gathen and Jürgen Gerhard. The algorithms for
|
|
||||||
factorizing large integers come from this book.
|
|
||||||
|
|
||||||
Finally there are some definitions of special functions,
|
|
||||||
mostly inspired by the problems of the Euler Project.
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
\section{\texttt{(r6rs-clos)}}
|
|
||||||
Provided by: Christian Sloma
|
|
||||||
|
|
||||||
URL: \url{https://launchpad.net/r6rs-clos}
|
|
||||||
|
|
||||||
|
|
||||||
\rnrs{6}-clos is a port of tiny-clos to the latest
|
|
||||||
(6$^{\mathrm{th}}$) revision of the language standard for scheme. It
|
|
||||||
uses the library system that is new in \rnrs{6} to structure the
|
|
||||||
code based on functionality (bootstrap of core classes and generic
|
|
||||||
functions, actual implementation of the standard protocols, class
|
|
||||||
layout and slot access \ldots).
|
|
||||||
|
|
||||||
The homepage for now is \url{https://launchpad.net/r6rs-clos}, where
|
|
||||||
my current development branch can be found.
|
|
||||||
|
|
||||||
% Currently the code in my repository will only work with the
|
|
||||||
% 0.0.2 release of Ikarus and uses a private copy of two
|
|
||||||
% SRFIs, but after the 0.0.3 release I intend to fix these so
|
|
||||||
% that installing should be as simple as putting the r6rs-clos
|
|
||||||
% files into the ikarus library load path and installing the
|
|
||||||
% srfi's accordingly.
|
|
||||||
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
\section{SRFI-41: \texttt{(streams)}}
|
|
||||||
\index{SRFI-41: Streams}
|
|
||||||
\index{SRFI-41: Streams!1@\texttt{(streams)}}
|
|
||||||
\index{SRFI-41: Streams!2@\texttt{(streams primitive)}}
|
|
||||||
\index{SRFI-41: Streams!3@\texttt{(streams derived)}}
|
|
||||||
The \texttt{(streams)}, \texttt{(streams~primitive)}, and
|
|
||||||
\texttt{(streams~derived)} libraries are written by Philip L.~Bewig
|
|
||||||
as the reference implementation for SRFI-41.
|
|
||||||
See \url{http://srfi.schemers.org/srfi-41/srfi-41.html} for more
|
|
||||||
details. The following abstract is excerpted from the SRFI document.
|
|
||||||
\nocite{srfi41}
|
|
||||||
|
|
||||||
\begin{center}
|
|
||||||
\rule{\textwidth}{1pt}
|
|
||||||
Abstract
|
|
||||||
\end{center}
|
|
||||||
|
|
||||||
Streams, sometimes called lazy lists, are a sequential data
|
|
||||||
structure containing elements computed only on demand. A stream is
|
|
||||||
either null or is a pair with a stream in its cdr. Since elements of
|
|
||||||
a stream are computed only when accessed, streams can be infinite.
|
|
||||||
Once computed, the value of a stream element is cached in case it is
|
|
||||||
needed again.
|
|
||||||
|
|
||||||
Streams without memoization were first described by Peter Landin in
|
|
||||||
1965. Memoization became accepted as an essential feature of streams
|
|
||||||
about a decade later. Today, streams are the signature data type of
|
|
||||||
functional programming languages such as Haskell.
|
|
||||||
|
|
||||||
This Scheme Request for Implementation describes two libraries for
|
|
||||||
operating on streams: a canonical set of stream primitives and a set
|
|
||||||
of procedures and syntax derived from those primitives that permits
|
|
||||||
convenient expression of stream operations. They rely on facilities
|
|
||||||
provided by \rnrs{6}, including libraries, records, and error reporting.
|
|
||||||
To load both stream libraries, say:
|
|
||||||
|
|
||||||
\texttt{(import (streams))}
|
|
||||||
|
|
||||||
\chapter{Missing Features}
|
\chapter{Missing Features}
|
||||||
|
|
||||||
Ikarus does not fully conform to \rnrs{6} yet. Although it
|
Ikarus does not fully conform to \rnrs{6} yet. Although it
|
||||||
|
@ -3052,7 +2998,7 @@ fxreverse-bit-field fxrotate-bit-field
|
||||||
|
|
||||||
\item The following procedures are missing from \texttt{(rnrs hashtables)}:
|
\item The following procedures are missing from \texttt{(rnrs hashtables)}:
|
||||||
\begin{Verbatim}
|
\begin{Verbatim}
|
||||||
make-eqv-hashtable equal-hash
|
equal-hash
|
||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
|
|
||||||
\item The following procedures are missing from \texttt{(rnrs io ports)}:
|
\item The following procedures are missing from \texttt{(rnrs io ports)}:
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
1662
|
1663
|
||||||
|
|
Loading…
Reference in New Issue