[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] gawk branch, feature/pma2, updated. gawk-4.1.0-4755-g5c689dd7
From: |
Arnold Robbins |
Subject: |
[SCM] gawk branch, feature/pma2, updated. gawk-4.1.0-4755-g5c689dd7 |
Date: |
Fri, 17 Jun 2022 07:10:59 -0400 (EDT) |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".
The branch, feature/pma2 has been updated
via 5c689dd7da7f60228a78de3710e7d4f27c3a8eb5 (commit)
from e3e5bc101641ceda429d8d98b1558dcc8aad5b0b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=5c689dd7da7f60228a78de3710e7d4f27c3a8eb5
commit 5c689dd7da7f60228a78de3710e7d4f27c3a8eb5
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Fri Jun 17 14:10:34 2022 +0300
Doc fixes and small code fixes.
diff --git a/ChangeLog b/ChangeLog
index 4e6202a8..7729964c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2022-06-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * NEWS: Typo fix.
+ * main.c (main): Correct the return value check in the call
+ to pma_init(). Thanks to Terence Kelly for the report.
+
2022-06-15 Andrew J. Schorr <aschorr@telemetry-investments.com>
* main.c (load_environ): Init ENVIRON_node before filling
diff --git a/NEWS b/NEWS
index 447a4bc8..ca02c9df 100644
--- a/NEWS
+++ b/NEWS
@@ -44,7 +44,7 @@ for saving / restoring all of gawk's variables and arrays.
Wherever possible, details were replaced with references to the online
copy of the manual.
-9. Gawk now supports Terrence Kelley's "persistent malloc" (pma),
+9. Gawk now supports Terence Kelly's "persistent malloc" (pma),
allowing gawk to preserve the contents of its variables and arrays
between runs. THIS IS AN EXPERIMENTAL FEATURE! For more information,
see the manual.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index dacfabe4..9f1e3d3e 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,10 @@
+2022-06-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.1: Typo fix.
+ * wordlist, wordlist2, wordlist5: Updated.
+ * gawktexi.in (Persistent Memory): Updated after comments from
+ Terence Kelly.
+
2022-06-14 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in (Persistent Memory): Document --disable-pma.
diff --git a/doc/gawk.1 b/doc/gawk.1
index 6593e5b3..3eb3912a 100644
--- a/doc/gawk.1
+++ b/doc/gawk.1
@@ -270,7 +270,7 @@ This feature is
.IR deprecated .
It will be removed from
.I gawk
-in 2024 and its use produces a warning messge. Set
+in 2024 and its use produces a warning message. Set
.B GAWK_NO_MPFR_WARN
in the environment to silence the warning.
.TP
diff --git a/doc/gawk.info b/doc/gawk.info
index 58d9a353..715eef82 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -22131,20 +22131,20 @@ File: gawk.info, Node: Persistent Memory, Next:
Extension Philosophy, Prev: P
Starting with version 5.2, 'gawk' supports "persistent memory". This
experimental feature stores the values of all of 'gawk''s variables and
-arrays in a large, sparse file in the filesystem. When persistent
-memory is not in use (the normal case), 'gawk''s data resides in
-ephemeral system memory.
+arrays in a persistent heap, which resides in a file in the filesystem.
+When persistent memory is not in use (the normal case), 'gawk''s data
+resides in ephemeral system memory.
Persistent memory is enabled on systems supporting the 'mmap()' and
'munmap()' system calls. 'gawk' must be compiled as a non-PIE (Position
Independent Executable) binary, since the persistent store ends up
holding pointers to functions held within the 'gawk' executable. This
also means that to use the persistent memory, you must use the same
-executable from run to run.
+'gawk' executable from run to run.
As of this writing, persistent memory has only been tested on
-GNU/Linux systems. On others, your mileage may vary, and/or you may
-need to investigate how to make it work for you.
+GNU/Linux and Mac OS systems. On others, your mileage may vary, and/or
+you may need to investigate how to make it work for you.
To use persistent memory, follow these steps:
@@ -22174,7 +22174,22 @@ need to investigate how to make it work for you.
Interestingly, the program that you execute need not be the same from
run to run; the persistent store only maintains the values of variables
-and arrays, not the totality of 'gawk''s internal state.
+and arrays, not the totality of 'gawk''s internal state. This lets you
+share data between unrelated programs, eliminating the need for scripts
+to communicate via text files.
+
+ Terence Kelly provides the following advice about the backing file:
+
+ Regarding backing file size, I recommend making it far larger than
+ all of the data that will ever reside in it, assuming that the file
+ system supports sparse files. The "pay only for what you use"
+ aspect of sparse files ensures that the actual storage resource
+ footprint of the backing file will meet the application's needs but
+ will be as small as possible. If the file system does _not_
+ support sparse files, there's a dilemma: Making the backing file
+ too large is wasteful, but making it too small risks memory
+ exhaustion, i.e., 'pma_malloc()' returns 'NULL'. But persistent
+ 'gawk' should still work even without sparse files.
As noted earlier, support for persistent memory is _experimental_.
If it becomes burdensome,(1) then the feature will be removed.
@@ -22188,32 +22203,45 @@ persistent memory and why it's useful in a scripting
language like
'gawk'.
<https://web.eecs.umich.edu/~tpkelly/pma/>
- This is the canonical source for Terrence Kelly's Persistent Memory
- Allocator (PMA).
+ This is the canonical source for Terence Kelly's Persistent Memory
+ Allocator (PMA). Kelly may be reached directly at any of the
+ following email addresses: <tpkelly@acm.org>,
+ <tpkelly@cs.princeton.edu>, or <tpkelly@eecs.umich.edu>.
+
+'Persistent Memory Allocation'
+ Terence Kelly, Zi Fan Tan, Jianan Li, and Haris Volos, ACM 'Queue'
+ magazine, Vol. 20 No. 2 (March/April 2022), HTML
+ (https://queue.acm.org/DrillBits7/). PDF
+ (https://dl.acm.org/doi/pdf/10.1145/3534855), HTML
+ (https://queue.acm.org/detail.cfm?id=3534855). This paper explains
+ the design of the PMA allocator used in persistent 'gawk'.
+
+'Persistent Scripting'
+ Zi Fan Tan, Jianan Li, Haris Volos, and Terence Kelly, Non-Volatile
+ Memory Workshop (NVMW) 2022, <http://nvmw.ucsd.edu/program/>. This
+ paper motivates and describes a research prototype of persistent
+ 'gawk' and presents performance evaluations on Intel Optane
+ non-volatile memory; note that the interface differs slightly.
'Persistent Memory Programming on Conventional Hardware'
Terence Kelly, ACM 'Queue' magazine Vol. 17 No. 4 (July/Aug
2019), PDF (https://dl.acm.org/doi/pdf/10.1145/3358955.3358957),
- HTML (https://queue.acm.org/detail.cfm?id=3358957).
+ HTML (https://queue.acm.org/detail.cfm?id=3358957). This paper
+ describes simple techniques for persistent memory for C/C++ code on
+ conventional computers that lack non-volatile memory hardware.
'Is Persistent Memory Persistent?'
- Terence Kelly, ACM 'Queue_' magazine Vol. 18 No. 2 (March/April
+ Terence Kelly, ACM 'Queue' magazine Vol. 18 No. 2 (March/April
2020), PDF (https://dl.acm.org/doi/pdf/10.1145/3400899.3400902),
- HTML (https://queue.acm.org/detail.cfm?id=3400902).
+ HTML (https://queue.acm.org/detail.cfm?id=3400902). This paper
+ describes a simple and robust testbed for testing software against
+ real power failures.
'Crashproofing the Original NoSQL Key/Value Store'
Terence Kelly, ACM 'Queue' magazine Vol. 19 No. 4 (July/Aug
2021), PDF (https://dl.acm.org/doi/pdf/10.1145/3487019.3487353),
- HTML (https://queue.acm.org/detail.cfm?id=3487353).
-
-'Persistent Memory Allocation'
- Terence Kelly, Zi Fan Tan, Jianan Li, and Haris Volos, ACM 'Queue'
- magazine, Vol. 20 No. 2 (March/April 2022), HTML
- (https://queue.acm.org/DrillBits7/).
-
-'Persistent Scripting'
- Zi Fan Tan, Jianan Li, Haris Volos, and Terence Kelly, Non-Volatile
- Memory Workshop (NVMW) 2022, <http://nvmw.ucsd.edu/program/>.
+ HTML (https://queue.acm.org/detail.cfm?id=3487353). This paper
+ describes a crash-tolerance feature added to GNU DBM' ('gdbm').
---------- Footnotes ----------
@@ -39334,244 +39362,244 @@ Ref: Two-way I/O-Footnote-2884143
Node: TCP/IP Networking884225
Node: Profiling887301
Node: Persistent Memory896607
-Ref: Persistent Memory-Footnote-1900491
-Node: Extension Philosophy900618
-Node: Advanced Features Summary902105
-Node: Internationalization904277
-Node: I18N and L10N905951
-Node: Explaining gettext906638
-Ref: Explaining gettext-Footnote-1912530
-Ref: Explaining gettext-Footnote-2912715
-Node: Programmer i18n912880
-Ref: Programmer i18n-Footnote-1917829
-Node: Translator i18n917878
-Node: String Extraction918672
-Ref: String Extraction-Footnote-1919804
-Node: Printf Ordering919890
-Ref: Printf Ordering-Footnote-1922676
-Node: I18N Portability922740
-Ref: I18N Portability-Footnote-1925196
-Node: I18N Example925259
-Ref: I18N Example-Footnote-1928534
-Ref: I18N Example-Footnote-2928607
-Node: Gawk I18N928716
-Node: I18N Summary929338
-Node: Debugger930679
-Node: Debugging931679
-Node: Debugging Concepts932120
-Node: Debugging Terms933929
-Node: Awk Debugging936504
-Ref: Awk Debugging-Footnote-1937449
-Node: Sample Debugging Session937581
-Node: Debugger Invocation938115
-Node: Finding The Bug939501
-Node: List of Debugger Commands945975
-Node: Breakpoint Control947308
-Node: Debugger Execution Control951002
-Node: Viewing And Changing Data954364
-Node: Execution Stack957905
-Node: Debugger Info959542
-Node: Miscellaneous Debugger Commands963613
-Node: Readline Support968675
-Node: Limitations969571
-Node: Debugging Summary972125
-Node: Namespaces973404
-Node: Global Namespace974515
-Node: Qualified Names975913
-Node: Default Namespace976912
-Node: Changing The Namespace977653
-Node: Naming Rules979267
-Node: Internal Name Management981115
-Node: Namespace Example982157
-Node: Namespace And Features984719
-Node: Namespace Summary986154
-Node: Arbitrary Precision Arithmetic987631
-Node: Computer Arithmetic989118
-Ref: table-numeric-ranges992884
-Ref: table-floating-point-ranges993378
-Ref: Computer Arithmetic-Footnote-1994037
-Node: Math Definitions994094
-Ref: table-ieee-formats997070
-Node: MPFR features997638
-Node: MPFR Deprecated998084
-Ref: MPFR Deprecated-Footnote-1999014
-Node: MPFR Intro999169
-Node: FP Math Caution1000809
-Ref: FP Math Caution-Footnote-11001881
-Node: Inexactness of computations1002250
-Node: Inexact representation1003281
-Node: Comparing FP Values1004641
-Node: Errors accumulate1005882
-Node: Strange values1007338
-Ref: Strange values-Footnote-11009926
-Node: Getting Accuracy1010031
-Node: Try To Round1012741
-Node: Setting precision1013640
-Ref: table-predefined-precision-strings1014337
-Node: Setting the rounding mode1016168
-Ref: table-gawk-rounding-modes1016542
-Ref: Setting the rounding mode-Footnote-11020474
-Node: Arbitrary Precision Integers1020653
-Ref: Arbitrary Precision Integers-Footnote-11023828
-Node: Checking for MPFR1023977
-Node: POSIX Floating Point Problems1025451
-Ref: POSIX Floating Point Problems-Footnote-11030104
-Node: Floating point summary1030142
-Node: Dynamic Extensions1032332
-Node: Extension Intro1033885
-Node: Plugin License1035151
-Node: Extension Mechanism Outline1035948
-Ref: figure-load-extension1036387
-Ref: figure-register-new-function1037953
-Ref: figure-call-new-function1039046
-Node: Extension API Description1041109
-Node: Extension API Functions Introduction1042822
-Ref: table-api-std-headers1044658
-Node: General Data Types1048908
-Ref: General Data Types-Footnote-11057614
-Node: Memory Allocation Functions1057913
-Ref: Memory Allocation Functions-Footnote-11062414
-Node: Constructor Functions1062513
-Node: API Ownership of MPFR and GMP Values1066166
-Node: Registration Functions1067699
-Node: Extension Functions1068399
-Node: Exit Callback Functions1073721
-Node: Extension Version String1074971
-Node: Input Parsers1075634
-Node: Output Wrappers1088355
-Node: Two-way processors1092867
-Node: Printing Messages1095132
-Ref: Printing Messages-Footnote-11096303
-Node: Updating ERRNO1096456
-Node: Requesting Values1097195
-Ref: table-value-types-returned1097932
-Node: Accessing Parameters1099041
-Node: Symbol Table Access1100278
-Node: Symbol table by name1100790
-Ref: Symbol table by name-Footnote-11103815
-Node: Symbol table by cookie1103943
-Ref: Symbol table by cookie-Footnote-11108128
-Node: Cached values1108192
-Ref: Cached values-Footnote-11111728
-Node: Array Manipulation1111881
-Ref: Array Manipulation-Footnote-11112972
-Node: Array Data Types1113009
-Ref: Array Data Types-Footnote-11115667
-Node: Array Functions1115759
-Node: Flattening Arrays1120544
-Node: Creating Arrays1127520
-Node: Redirection API1132287
-Node: Extension API Variables1135120
-Node: Extension Versioning1135831
-Ref: gawk-api-version1136260
-Node: Extension GMP/MPFR Versioning1137992
-Node: Extension API Informational Variables1139620
-Node: Extension API Boilerplate1140693
-Node: Changes from API V11144667
-Node: Finding Extensions1146239
-Node: Extension Example1146798
-Node: Internal File Description1147596
-Node: Internal File Ops1151676
-Ref: Internal File Ops-Footnote-11163026
-Node: Using Internal File Ops1163166
-Ref: Using Internal File Ops-Footnote-11165549
-Node: Extension Samples1165823
-Node: Extension Sample File Functions1167352
-Node: Extension Sample Fnmatch1175001
-Node: Extension Sample Fork1176488
-Node: Extension Sample Inplace1177706
-Node: Extension Sample Ord1181332
-Node: Extension Sample Readdir1182168
-Ref: table-readdir-file-types1183057
-Node: Extension Sample Revout1184125
-Node: Extension Sample Rev2way1184714
-Node: Extension Sample Read write array1185454
-Node: Extension Sample Readfile1188619
-Node: Extension Sample Time1189714
-Node: Extension Sample API Tests1191466
-Node: gawkextlib1191958
-Node: Extension summary1194876
-Node: Extension Exercises1198578
-Node: Language History1199820
-Node: V7/SVR3.11201476
-Node: SVR41203628
-Node: POSIX1205062
-Node: BTL1206443
-Node: POSIX/GNU1207172
-Node: Feature History1212950
-Node: Common Extensions1230125
-Node: Ranges and Locales1231408
-Ref: Ranges and Locales-Footnote-11236024
-Ref: Ranges and Locales-Footnote-21236051
-Ref: Ranges and Locales-Footnote-31236286
-Node: Contributors1236509
-Node: History summary1242506
-Node: Installation1243886
-Node: Gawk Distribution1244830
-Node: Getting1245314
-Node: Extracting1246277
-Node: Distribution contents1247915
-Node: Unix Installation1254976
-Node: Quick Installation1255780
-Node: Compiling with MPFR1258200
-Node: Shell Startup Files1258890
-Node: Additional Configuration Options1259979
-Node: Configuration Philosophy1262294
-Node: Compiling from Git1264690
-Node: Building the Documentation1265245
-Node: Non-Unix Installation1266629
-Node: PC Installation1267089
-Node: PC Binary Installation1267927
-Node: PC Compiling1268800
-Node: PC Using1269917
-Node: Cygwin1273470
-Node: MSYS1274694
-Node: VMS Installation1275296
-Node: VMS Compilation1276015
-Ref: VMS Compilation-Footnote-11277244
-Node: VMS Dynamic Extensions1277302
-Node: VMS Installation Details1278987
-Node: VMS Running1281249
-Node: VMS GNV1285528
-Node: Bugs1286242
-Node: Bug definition1287154
-Node: Bug address1290090
-Node: Usenet1293278
-Node: Performance bugs1294467
-Node: Asking for help1297388
-Node: Maintainers1299355
-Node: Other Versions1300549
-Node: Installation summary1308819
-Node: Notes1310183
-Node: Compatibility Mode1310977
-Node: Additions1311759
-Node: Accessing The Source1312684
-Node: Adding Code1314121
-Node: New Ports1320936
-Node: Derived Files1325311
-Ref: Derived Files-Footnote-11330971
-Ref: Derived Files-Footnote-21331006
-Ref: Derived Files-Footnote-31331604
-Node: Future Extensions1331718
-Node: Implementation Limitations1332376
-Node: Extension Design1333586
-Node: Old Extension Problems1334730
-Ref: Old Extension Problems-Footnote-11336248
-Node: Extension New Mechanism Goals1336305
-Ref: Extension New Mechanism Goals-Footnote-11339669
-Node: Extension Other Design Decisions1339858
-Node: Extension Future Growth1341971
-Node: Notes summary1342577
-Node: Basic Concepts1343735
-Node: Basic High Level1344416
-Ref: figure-general-flow1344698
-Ref: figure-process-flow1345384
-Ref: Basic High Level-Footnote-11348686
-Node: Basic Data Typing1348871
-Node: Glossary1352199
-Node: Copying1384086
-Node: GNU Free Documentation License1421629
-Node: Index1446749
+Ref: Persistent Memory-Footnote-1902310
+Node: Extension Philosophy902437
+Node: Advanced Features Summary903924
+Node: Internationalization906096
+Node: I18N and L10N907770
+Node: Explaining gettext908457
+Ref: Explaining gettext-Footnote-1914349
+Ref: Explaining gettext-Footnote-2914534
+Node: Programmer i18n914699
+Ref: Programmer i18n-Footnote-1919648
+Node: Translator i18n919697
+Node: String Extraction920491
+Ref: String Extraction-Footnote-1921623
+Node: Printf Ordering921709
+Ref: Printf Ordering-Footnote-1924495
+Node: I18N Portability924559
+Ref: I18N Portability-Footnote-1927015
+Node: I18N Example927078
+Ref: I18N Example-Footnote-1930353
+Ref: I18N Example-Footnote-2930426
+Node: Gawk I18N930535
+Node: I18N Summary931157
+Node: Debugger932498
+Node: Debugging933498
+Node: Debugging Concepts933939
+Node: Debugging Terms935748
+Node: Awk Debugging938323
+Ref: Awk Debugging-Footnote-1939268
+Node: Sample Debugging Session939400
+Node: Debugger Invocation939934
+Node: Finding The Bug941320
+Node: List of Debugger Commands947794
+Node: Breakpoint Control949127
+Node: Debugger Execution Control952821
+Node: Viewing And Changing Data956183
+Node: Execution Stack959724
+Node: Debugger Info961361
+Node: Miscellaneous Debugger Commands965432
+Node: Readline Support970494
+Node: Limitations971390
+Node: Debugging Summary973944
+Node: Namespaces975223
+Node: Global Namespace976334
+Node: Qualified Names977732
+Node: Default Namespace978731
+Node: Changing The Namespace979472
+Node: Naming Rules981086
+Node: Internal Name Management982934
+Node: Namespace Example983976
+Node: Namespace And Features986538
+Node: Namespace Summary987973
+Node: Arbitrary Precision Arithmetic989450
+Node: Computer Arithmetic990937
+Ref: table-numeric-ranges994703
+Ref: table-floating-point-ranges995197
+Ref: Computer Arithmetic-Footnote-1995856
+Node: Math Definitions995913
+Ref: table-ieee-formats998889
+Node: MPFR features999457
+Node: MPFR Deprecated999903
+Ref: MPFR Deprecated-Footnote-11000833
+Node: MPFR Intro1000988
+Node: FP Math Caution1002628
+Ref: FP Math Caution-Footnote-11003700
+Node: Inexactness of computations1004069
+Node: Inexact representation1005100
+Node: Comparing FP Values1006460
+Node: Errors accumulate1007701
+Node: Strange values1009157
+Ref: Strange values-Footnote-11011745
+Node: Getting Accuracy1011850
+Node: Try To Round1014560
+Node: Setting precision1015459
+Ref: table-predefined-precision-strings1016156
+Node: Setting the rounding mode1017987
+Ref: table-gawk-rounding-modes1018361
+Ref: Setting the rounding mode-Footnote-11022293
+Node: Arbitrary Precision Integers1022472
+Ref: Arbitrary Precision Integers-Footnote-11025647
+Node: Checking for MPFR1025796
+Node: POSIX Floating Point Problems1027270
+Ref: POSIX Floating Point Problems-Footnote-11031923
+Node: Floating point summary1031961
+Node: Dynamic Extensions1034151
+Node: Extension Intro1035704
+Node: Plugin License1036970
+Node: Extension Mechanism Outline1037767
+Ref: figure-load-extension1038206
+Ref: figure-register-new-function1039772
+Ref: figure-call-new-function1040865
+Node: Extension API Description1042928
+Node: Extension API Functions Introduction1044641
+Ref: table-api-std-headers1046477
+Node: General Data Types1050727
+Ref: General Data Types-Footnote-11059433
+Node: Memory Allocation Functions1059732
+Ref: Memory Allocation Functions-Footnote-11064233
+Node: Constructor Functions1064332
+Node: API Ownership of MPFR and GMP Values1067985
+Node: Registration Functions1069518
+Node: Extension Functions1070218
+Node: Exit Callback Functions1075540
+Node: Extension Version String1076790
+Node: Input Parsers1077453
+Node: Output Wrappers1090174
+Node: Two-way processors1094686
+Node: Printing Messages1096951
+Ref: Printing Messages-Footnote-11098122
+Node: Updating ERRNO1098275
+Node: Requesting Values1099014
+Ref: table-value-types-returned1099751
+Node: Accessing Parameters1100860
+Node: Symbol Table Access1102097
+Node: Symbol table by name1102609
+Ref: Symbol table by name-Footnote-11105634
+Node: Symbol table by cookie1105762
+Ref: Symbol table by cookie-Footnote-11109947
+Node: Cached values1110011
+Ref: Cached values-Footnote-11113547
+Node: Array Manipulation1113700
+Ref: Array Manipulation-Footnote-11114791
+Node: Array Data Types1114828
+Ref: Array Data Types-Footnote-11117486
+Node: Array Functions1117578
+Node: Flattening Arrays1122363
+Node: Creating Arrays1129339
+Node: Redirection API1134106
+Node: Extension API Variables1136939
+Node: Extension Versioning1137650
+Ref: gawk-api-version1138079
+Node: Extension GMP/MPFR Versioning1139811
+Node: Extension API Informational Variables1141439
+Node: Extension API Boilerplate1142512
+Node: Changes from API V11146486
+Node: Finding Extensions1148058
+Node: Extension Example1148617
+Node: Internal File Description1149415
+Node: Internal File Ops1153495
+Ref: Internal File Ops-Footnote-11164845
+Node: Using Internal File Ops1164985
+Ref: Using Internal File Ops-Footnote-11167368
+Node: Extension Samples1167642
+Node: Extension Sample File Functions1169171
+Node: Extension Sample Fnmatch1176820
+Node: Extension Sample Fork1178307
+Node: Extension Sample Inplace1179525
+Node: Extension Sample Ord1183151
+Node: Extension Sample Readdir1183987
+Ref: table-readdir-file-types1184876
+Node: Extension Sample Revout1185944
+Node: Extension Sample Rev2way1186533
+Node: Extension Sample Read write array1187273
+Node: Extension Sample Readfile1190438
+Node: Extension Sample Time1191533
+Node: Extension Sample API Tests1193285
+Node: gawkextlib1193777
+Node: Extension summary1196695
+Node: Extension Exercises1200397
+Node: Language History1201639
+Node: V7/SVR3.11203295
+Node: SVR41205447
+Node: POSIX1206881
+Node: BTL1208262
+Node: POSIX/GNU1208991
+Node: Feature History1214769
+Node: Common Extensions1231944
+Node: Ranges and Locales1233227
+Ref: Ranges and Locales-Footnote-11237843
+Ref: Ranges and Locales-Footnote-21237870
+Ref: Ranges and Locales-Footnote-31238105
+Node: Contributors1238328
+Node: History summary1244325
+Node: Installation1245705
+Node: Gawk Distribution1246649
+Node: Getting1247133
+Node: Extracting1248096
+Node: Distribution contents1249734
+Node: Unix Installation1256795
+Node: Quick Installation1257599
+Node: Compiling with MPFR1260019
+Node: Shell Startup Files1260709
+Node: Additional Configuration Options1261798
+Node: Configuration Philosophy1264113
+Node: Compiling from Git1266509
+Node: Building the Documentation1267064
+Node: Non-Unix Installation1268448
+Node: PC Installation1268908
+Node: PC Binary Installation1269746
+Node: PC Compiling1270619
+Node: PC Using1271736
+Node: Cygwin1275289
+Node: MSYS1276513
+Node: VMS Installation1277115
+Node: VMS Compilation1277834
+Ref: VMS Compilation-Footnote-11279063
+Node: VMS Dynamic Extensions1279121
+Node: VMS Installation Details1280806
+Node: VMS Running1283068
+Node: VMS GNV1287347
+Node: Bugs1288061
+Node: Bug definition1288973
+Node: Bug address1291909
+Node: Usenet1295097
+Node: Performance bugs1296286
+Node: Asking for help1299207
+Node: Maintainers1301174
+Node: Other Versions1302368
+Node: Installation summary1310638
+Node: Notes1312002
+Node: Compatibility Mode1312796
+Node: Additions1313578
+Node: Accessing The Source1314503
+Node: Adding Code1315940
+Node: New Ports1322755
+Node: Derived Files1327130
+Ref: Derived Files-Footnote-11332790
+Ref: Derived Files-Footnote-21332825
+Ref: Derived Files-Footnote-31333423
+Node: Future Extensions1333537
+Node: Implementation Limitations1334195
+Node: Extension Design1335405
+Node: Old Extension Problems1336549
+Ref: Old Extension Problems-Footnote-11338067
+Node: Extension New Mechanism Goals1338124
+Ref: Extension New Mechanism Goals-Footnote-11341488
+Node: Extension Other Design Decisions1341677
+Node: Extension Future Growth1343790
+Node: Notes summary1344396
+Node: Basic Concepts1345554
+Node: Basic High Level1346235
+Ref: figure-general-flow1346517
+Ref: figure-process-flow1347203
+Ref: Basic High Level-Footnote-11350505
+Node: Basic Data Typing1350690
+Node: Glossary1354018
+Node: Copying1385905
+Node: GNU Free Documentation License1423448
+Node: Index1448568
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 585903e5..95b06ac5 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -30965,7 +30965,8 @@ code, it will appear that way in the output.
Starting with @value{PVERSION} 5.2, @command{gawk} supports
@dfn{persistent memory}. This experimental feature stores the values of
-all of @command{gawk}'s variables and arrays in a large, sparse file in
+all of @command{gawk}'s variables and arrays in a persistent heap,
+which resides in a file in
the filesystem. When persistent memory is not in use (the normal case),
@command{gawk}'s data resides in ephemeral system memory.
@@ -30974,27 +30975,28 @@ and @code{munmap()} system calls. @command{gawk}
must be compiled as a
non-PIE (Position Independent Executable) binary, since the persistent
store ends up holding pointers to functions held within the @command{gawk}
executable. This also means that to use the persistent memory, you must
-use the same executable from run to run.
+use the same @command{gawk} executable from run to run.
As of this writing, persistent memory has only been tested on GNU/Linux
-systems. On others, your mileage may vary, and/or you may need to
-investigate how to make it work for you.
+and Mac OS systems. On others, your mileage may vary, and/or you may
+need to investigate how to make it work for you.
To use persistent memory, follow these steps:
@enumerate 1
@item
-Create a new, empty sparse file of the desired size. For example, four
gigabytes.
-On a GNU/Linux system, you can use the @command{truncate} command:
+Create a new, empty sparse file of the desired size. For example, four
+gigabytes. On a GNU/Linux system, you can use the @command{truncate}
+command:
@example
$ @kbd{truncate -s 4G data.pma}
@end example
@item
-Provide the path to the data file in the @env{GAWK_PERSIST_FILE} environment
variable.
-This is best done by placing the value in the environment just for the run of
@command{gawk},
-like so:
+Provide the path to the data file in the @env{GAWK_PERSIST_FILE}
+environment variable. This is best done by placing the value in the
+environment just for the run of @command{gawk}, like so:
@example
$ @kbd{GAWK_PERSIST_FILE=data.pma ./gawk 'BEGIN @{ print ++i @}'}
@@ -31012,65 +31014,104 @@ $ @kbd{GAWK_PERSIST_FILE=data.pma ./gawk 'BEGIN @{
print ++i @}'}
@end example
@noindent
-As shown, in subsequent runs using the same data file, the values of
@command{gawk}'s
-variables are preserved.
+As shown, in subsequent runs using the same data file, the values of
+@command{gawk}'s variables are preserved.
@end enumerate
-Interestingly, the program that you execute need not be the same from run to
run;
-the persistent store only maintains the values of variables and arrays, not
-the totality of @command{gawk}'s internal state.
+Interestingly, the program that you execute need not be the same from
+run to run; the persistent store only maintains the values of variables
+and arrays, not the totality of @command{gawk}'s internal state.
+This lets you share data between unrelated programs, eliminating
+the need for scripts to communicate via text files.
+
+Terence Kelly provides the following advice about the backing file:
+
+@quotation
+Regarding backing file size, I recommend making it far larger
+than all of the data that will ever reside in it, assuming
+that the file system supports sparse files. The ``pay only
+for what you use'' aspect of sparse files ensures that the
+actual storage resource footprint of the backing file will
+meet the application's needs but will be as small as
+possible. If the file system does @emph{not} support sparse
+files, there's a dilemma: Making the backing file too large
+is wasteful, but making it too small risks memory exhaustion,
+i.e., @code{pma_malloc()} returns @code{NULL}.
+But persistent @command{gawk} should
+still work even without sparse files.
+@ignore
+Note also that if the
+file system is encrypted, sparsity is no longer meaningful,
+even if the file system would otherwise support sparse files.
+At least this is true for some combinations of FS and FS
+encryption. Not sure if we need to say that here.
+@end ignore
+@end quotation
-As noted earlier, support for persistent memory is @emph{experimental}. If it
-becomes burdensome,@footnote{Meaning, there are too many bug reports, or
-too many strange differences in behavior from when @command{gawk} is run
-normally.} then the feature will be removed.
+As noted earlier, support for persistent memory is @emph{experimental}.
+If it becomes burdensome,@footnote{Meaning, there are too many
+bug reports, or too many strange differences in behavior from when
+@command{gawk} is run normally.} then the feature will be removed.
-You can disable the use of the persistent memory allocator in @command{gawk}
-with the @option{--disable-pma} to the @command{configure} command at the
-time that you are building @command{gawk} (@pxref{Unix Installation}).
+You can disable the use of the persistent memory allocator in
+@command{gawk} with the @option{--disable-pma} to the @command{configure}
+command at the time that you are building @command{gawk} (@pxref{Unix
+Installation}).
-Here are articles and web links that provide more information
-about persistent memory and why it's useful in a scripting language
-like @command{gawk}.
+Here are articles and web links that provide more information about
+persistent memory and why it's useful in a scripting language like
+@command{gawk}.
@table @asis
@item @uref{https://web.eecs.umich.edu/~tpkelly/pma/}
-This is the canonical source for Terrence Kelly's Persistent
-Memory Allocator (PMA).
+This is the canonical source for Terence Kelly's Persistent Memory
+Allocator (PMA). Kelly may be reached directly at any of the following
+email addresses:
+@EMAIL{tpkelly@@acm.org, tpkelly AT acm.org},
+@EMAIL{tpkelly@@cs.princeton.edu, tpkelly AT cs.princeton.edu}, or
+@EMAIL{tpkelly@@eecs.umich.edu, tpkelly AT eecs.umich.edu}.
+
+@item @cite{Persistent Memory Allocation}
+Terence Kelly, Zi Fan Tan, Jianan Li, and Haris Volos,
+ACM @cite{Queue} magazine, Vol. 20 No. 2 (March/April 2022),
+@uref{https://queue.acm.org/DrillBits7/, HTML}.
+@uref{https://dl.acm.org/doi/pdf/10.1145/3534855, PDF},
+@uref{https://queue.acm.org/detail.cfm?id=3534855, HTML}.
+This paper explains the design of the PMA
+allocator used in persistent @command{gawk}.
+
+@item @cite{Persistent Scripting}
+Zi Fan Tan, Jianan Li, Haris Volos, and Terence Kelly,
+Non-Volatile Memory Workshop (NVMW) 2022,
+@uref{http://nvmw.ucsd.edu/program/}.
+This paper motivates and describes a research prototype of persistent
+@command{gawk} and presents performance evaluations on Intel Optane
+non-volatile memory; note that the interface differs slightly.
@item @cite{Persistent Memory Programming on Conventional Hardware}
Terence Kelly,
ACM @cite{Queue} magazine Vol. 17 No. 4 (July/Aug 2019),
@uref{https://dl.acm.org/doi/pdf/10.1145/3358955.3358957, PDF},
@uref{https://queue.acm.org/detail.cfm?id=3358957, HTML}.
+This paper describes simple techniques for persistent memory for C/C++
+code on conventional computers that lack non-volatile memory hardware.
@item @cite{Is Persistent Memory Persistent?}
Terence Kelly,
-ACM @cite{Queue_} magazine Vol. 18 No. 2 (March/April 2020),
+ACM @cite{Queue} magazine Vol. 18 No. 2 (March/April 2020),
@uref{https://dl.acm.org/doi/pdf/10.1145/3400899.3400902, PDF},
@uref{https://queue.acm.org/detail.cfm?id=3400902, HTML}.
+This paper describes a simple and robust testbed for testing software
+against real power failures.
@item @cite{Crashproofing the Original NoSQL Key/Value Store}
Terence Kelly,
ACM @cite{Queue} magazine Vol. 19 No. 4 (July/Aug 2021),
@uref{https://dl.acm.org/doi/pdf/10.1145/3487019.3487353, PDF},
@uref{https://queue.acm.org/detail.cfm?id=3487353, HTML}.
-
-@item @cite{Persistent Memory Allocation}
-Terence Kelly, Zi Fan Tan, Jianan Li, and Haris Volos,
-ACM @cite{Queue} magazine, Vol. 20 No. 2 (March/April 2022),
-@uref{https://queue.acm.org/DrillBits7/, HTML}.
-
-@item @cite{Persistent Scripting}
-Zi Fan Tan, Jianan Li, Haris Volos, and Terence Kelly,
-Non-Volatile Memory Workshop (NVMW) 2022,
-@uref{http://nvmw.ucsd.edu/program/}.
-@c [NVMW URLs are not stable, so this one might change after the 2022 event is
over]
-
-@c Persistent gawk (pm-gawk):
-@c https://github.com/ucy-coast/pmgawk
-@c https://coast.cs.ucy.ac.cy/projects/pmgawk/
+This paper describes a crash-tolerance feature added to GNU DBM'
+(@code{gdbm}).
@end table
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 5ef981c5..765b83e3 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -29847,7 +29847,8 @@ code, it will appear that way in the output.
Starting with @value{PVERSION} 5.2, @command{gawk} supports
@dfn{persistent memory}. This experimental feature stores the values of
-all of @command{gawk}'s variables and arrays in a large, sparse file in
+all of @command{gawk}'s variables and arrays in a persistent heap,
+which resides in a file in
the filesystem. When persistent memory is not in use (the normal case),
@command{gawk}'s data resides in ephemeral system memory.
@@ -29856,7 +29857,7 @@ and @code{munmap()} system calls. @command{gawk} must
be compiled as a
non-PIE (Position Independent Executable) binary, since the persistent
store ends up holding pointers to functions held within the @command{gawk}
executable. This also means that to use the persistent memory, you must
-use the same executable from run to run.
+use the same @command{gawk} executable from run to run.
As of this writing, persistent memory has only been tested on GNU/Linux
and Mac OS systems. On others, your mileage may vary, and/or you may
@@ -29903,6 +29904,32 @@ As shown, in subsequent runs using the same data file,
the values of
Interestingly, the program that you execute need not be the same from
run to run; the persistent store only maintains the values of variables
and arrays, not the totality of @command{gawk}'s internal state.
+This lets you share data between unrelated programs, eliminating
+the need for scripts to communicate via text files.
+
+Terence Kelly provides the following advice about the backing file:
+
+@quotation
+Regarding backing file size, I recommend making it far larger
+than all of the data that will ever reside in it, assuming
+that the file system supports sparse files. The ``pay only
+for what you use'' aspect of sparse files ensures that the
+actual storage resource footprint of the backing file will
+meet the application's needs but will be as small as
+possible. If the file system does @emph{not} support sparse
+files, there's a dilemma: Making the backing file too large
+is wasteful, but making it too small risks memory exhaustion,
+i.e., @code{pma_malloc()} returns @code{NULL}.
+But persistent @command{gawk} should
+still work even without sparse files.
+@ignore
+Note also that if the
+file system is encrypted, sparsity is no longer meaningful,
+even if the file system would otherwise support sparse files.
+At least this is true for some combinations of FS and FS
+encryption. Not sure if we need to say that here.
+@end ignore
+@end quotation
As noted earlier, support for persistent memory is @emph{experimental}.
If it becomes burdensome,@footnote{Meaning, there are too many
@@ -29920,41 +29947,53 @@ persistent memory and why it's useful in a scripting
language like
@table @asis
@item @uref{https://web.eecs.umich.edu/~tpkelly/pma/}
-This is the canonical source for Terrence Kelly's Persistent
-Memory Allocator (PMA).
+This is the canonical source for Terence Kelly's Persistent Memory
+Allocator (PMA). Kelly may be reached directly at any of the following
+email addresses:
+@EMAIL{tpkelly@@acm.org, tpkelly AT acm.org},
+@EMAIL{tpkelly@@cs.princeton.edu, tpkelly AT cs.princeton.edu}, or
+@EMAIL{tpkelly@@eecs.umich.edu, tpkelly AT eecs.umich.edu}.
+
+@item @cite{Persistent Memory Allocation}
+Terence Kelly, Zi Fan Tan, Jianan Li, and Haris Volos,
+ACM @cite{Queue} magazine, Vol. 20 No. 2 (March/April 2022),
+@uref{https://queue.acm.org/DrillBits7/, HTML}.
+@uref{https://dl.acm.org/doi/pdf/10.1145/3534855, PDF},
+@uref{https://queue.acm.org/detail.cfm?id=3534855, HTML}.
+This paper explains the design of the PMA
+allocator used in persistent @command{gawk}.
+
+@item @cite{Persistent Scripting}
+Zi Fan Tan, Jianan Li, Haris Volos, and Terence Kelly,
+Non-Volatile Memory Workshop (NVMW) 2022,
+@uref{http://nvmw.ucsd.edu/program/}.
+This paper motivates and describes a research prototype of persistent
+@command{gawk} and presents performance evaluations on Intel Optane
+non-volatile memory; note that the interface differs slightly.
@item @cite{Persistent Memory Programming on Conventional Hardware}
Terence Kelly,
ACM @cite{Queue} magazine Vol. 17 No. 4 (July/Aug 2019),
@uref{https://dl.acm.org/doi/pdf/10.1145/3358955.3358957, PDF},
@uref{https://queue.acm.org/detail.cfm?id=3358957, HTML}.
+This paper describes simple techniques for persistent memory for C/C++
+code on conventional computers that lack non-volatile memory hardware.
@item @cite{Is Persistent Memory Persistent?}
Terence Kelly,
-ACM @cite{Queue_} magazine Vol. 18 No. 2 (March/April 2020),
+ACM @cite{Queue} magazine Vol. 18 No. 2 (March/April 2020),
@uref{https://dl.acm.org/doi/pdf/10.1145/3400899.3400902, PDF},
@uref{https://queue.acm.org/detail.cfm?id=3400902, HTML}.
+This paper describes a simple and robust testbed for testing software
+against real power failures.
@item @cite{Crashproofing the Original NoSQL Key/Value Store}
Terence Kelly,
ACM @cite{Queue} magazine Vol. 19 No. 4 (July/Aug 2021),
@uref{https://dl.acm.org/doi/pdf/10.1145/3487019.3487353, PDF},
@uref{https://queue.acm.org/detail.cfm?id=3487353, HTML}.
-
-@item @cite{Persistent Memory Allocation}
-Terence Kelly, Zi Fan Tan, Jianan Li, and Haris Volos,
-ACM @cite{Queue} magazine, Vol. 20 No. 2 (March/April 2022),
-@uref{https://queue.acm.org/DrillBits7/, HTML}.
-
-@item @cite{Persistent Scripting}
-Zi Fan Tan, Jianan Li, Haris Volos, and Terence Kelly,
-Non-Volatile Memory Workshop (NVMW) 2022,
-@uref{http://nvmw.ucsd.edu/program/}.
-@c [NVMW URLs are not stable, so this one might change after the 2022 event is
over]
-
-@c Persistent gawk (pm-gawk):
-@c https://github.com/ucy-coast/pmgawk
-@c https://coast.cs.ucy.ac.cy/projects/pmgawk/
+This paper describes a crash-tolerance feature added to GNU DBM'
+(@code{gdbm}).
@end table
diff --git a/doc/wordlist b/doc/wordlist
index 90bc5aec..abb631eb 100644
--- a/doc/wordlist
+++ b/doc/wordlist
@@ -102,10 +102,12 @@ Coprocess
Coprocesses
Coreutils
Corinna
+Crashproofing
Ctrl
Curreli
Cygwin
DARKCORNER
+DBM
DCL
DCLTABLES
DD
@@ -128,6 +130,7 @@ Deifik
Demaille
Dinline
Drepper
+DrillBits
Duman
Dupword
EAGAIN
@@ -210,6 +213,7 @@ HURD
Haible
Hankerson
Haque
+Haris
Hartholz
Hasegawa
Hermann
@@ -257,6 +261,7 @@ Jaegermann
Jannick
Jawk
Jeroen
+Jianan
Johansen's
Jul
Jun
@@ -331,6 +336,7 @@ NOMATCH
NR
NT
NUMCUR
+NVMW
NaN
NaNs
Nachum
@@ -340,6 +346,7 @@ NetBSD
Newsreader
Nextfile
Nlines
+NoSQL
Nof
Nonalphabetic
Nonconstant
@@ -367,6 +374,7 @@ OpenBSD
OpenSolaris
OpenVMS
Ops
+Optane
Optarg
Opterr
Optind
@@ -383,6 +391,7 @@ PCPU
PCSI
PDF
PEBKAC
+PMA
PNG
POS
PQgetvalue
@@ -500,6 +509,7 @@ VER
VT
Versioning
Vinschen
+Volos
WIPO
WONTFIX
Walamazoo
@@ -532,6 +542,7 @@ Zaretskii
Zaretskii's
Zeichen
Zeichenkette
+Zi
Zoulas
aB
aCa
@@ -565,6 +576,7 @@ ac
aca
acbfoo
aclocal
+acm
addrs
adm
adminprog
@@ -730,6 +742,7 @@ cd
cde
cdot
ce
+cfm
cgi
cgit
cgiwrap
@@ -855,6 +868,7 @@ dlopen
dlsym
dn
docbook
+doi
dom
dont
dorking
@@ -873,6 +887,7 @@ dx
ebcdic
eca
edu
+eecs
eg
egid
egrep
@@ -1010,6 +1025,7 @@ gawktexi
gawkworkflow
gcc
gdb
+gdbm
gdef
ge
gecos
@@ -1272,6 +1288,7 @@ mkbool
mkdir
mkinstalldirs
mktime
+mmap
mmk
mms
mo
@@ -1296,6 +1313,7 @@ multiline
multispan
multitable
multitranslation
+munmap
murphy
mv
mydata
@@ -1388,6 +1406,7 @@ numfields
nums
nusers
nvalue
+nvmw
nwords
ny
nyah
@@ -1472,6 +1491,7 @@ pival
pkgdatadir
pkgextensiondir
pm
+pma
pmode
png
po
@@ -1486,6 +1506,7 @@ preformatted
preopened
prepinfo
prev
+princeton
printf
printindex
printpage
@@ -1663,6 +1684,7 @@ strnums
strtod
strtonum
struct
+su
subarray
subarrays
subentry
@@ -1726,6 +1748,7 @@ tmy
tolower
toolset
toupper
+tpkelly
tr
tracy
transfile
@@ -1742,6 +1765,7 @@ txt
typeof
tyw
ucb
+ucsd
udc
udcf
udp
diff --git a/doc/wordlist2 b/doc/wordlist2
index 2441b5ea..7be6dcf1 100644
--- a/doc/wordlist2
+++ b/doc/wordlist2
@@ -10,6 +10,7 @@ FIXME
GCC
Gettext
ISBN
+Jun
Kahrs
Libtool
PCC
diff --git a/doc/wordlist5 b/doc/wordlist5
index 63b99038..2a927dcb 100644
--- a/doc/wordlist5
+++ b/doc/wordlist5
@@ -1,6 +1,7 @@
Awk
Chet
GAWKBUG
+IDT
IST
Ramey
TMPDIR
diff --git a/main.c b/main.c
index f62dc7ee..224390b4 100644
--- a/main.c
+++ b/main.c
@@ -234,7 +234,7 @@ for PMA */
myname = gawk_name(argv[0]);
- if (pma_init(1, persist_file) < 0) {
+ if (pma_init(1, persist_file) != 0) {
fatal(_("persistent memory allocator failed to initialize"));
}
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 6 +
NEWS | 2 +-
doc/ChangeLog | 7 +
doc/gawk.1 | 2 +-
doc/gawk.info | 548 +++++++++++++++++++++++++++++---------------------------
doc/gawk.texi | 125 ++++++++-----
doc/gawktexi.in | 79 +++++---
doc/wordlist | 24 +++
doc/wordlist2 | 1 +
doc/wordlist5 | 1 +
main.c | 2 +-
11 files changed, 472 insertions(+), 325 deletions(-)
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] gawk branch, feature/pma2, updated. gawk-4.1.0-4755-g5c689dd7,
Arnold Robbins <=