如何在Ada中生成唯一标识符?

3

我正在进行一个Ada项目,尝试生成一个唯一的ID作为人的标识符。请问是否有在Ada中生成唯一ID的方法?


5
你可能想要查看这个库:https://github.com/anthony-arnold/AdaID。 - RSS
1
(a) Ada,不是ADA (b) 谷歌 - Simon Wright
2个回答

2

您并没有详细说明很多要求,因此如果您只需要快速而简单的解决方案,可以使用私有包变量,并让生成器函数返回当前值并将其更新为新值。

with Ada.Text_IO; use Ada.Text_IO;

procedure Hello is

    package IDs is
        type ID is mod 2**64;
        function New_ID return ID;
    end IDs;

    package body IDs is
        Current : ID := 0;
        function New_ID return ID is
        begin
            return Result : ID := Current do
                Current := Current + 1;
            end return;
        end New_ID;
    end IDs;
begin
   Put_Line("Hello, world!");
   Put_Line("New ID =>" &  IDs.ID'Image(IDs.New_ID));
   Put_Line("New ID =>" &  IDs.ID'Image(IDs.New_ID));
end Hello;

输出:

$gnatmake -o hello *.adb
gcc -c hello.adb
gnatbind -x hello.ali
gnatlink hello.ali -o hello
$hello
Hello, world!
New ID => 0
New ID => 1

如果您需要安全的任务,请将“Current”变量包装在受保护的对象中。它只会生成最多2**64个唯一的ID,但如果您的编译器支持更大的数据类型,您可以更改它。

2

这个功能由PragmARC.Job_Pools包完成,所以你可能想查看它。

PragmARC.Job_Pools


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接