2022-11-21

vak: (Default)
Оказывается, Скалу теперь можно компилить непосредственно в бинарный код, без всякой Джавы и прочих виртуальных машин. Неплохой язычок получается.

(1) Сначала устанавливаем sbt по инструкции: https://www.scala-sbt.org/1.x/docs/Setup.html

(2) Создаём проект типа "Hello World":
$ sbt new scala-native/scala-native.g8
На запрос надо будет ввести желаемое имя проекта. Я выбрал hello.

(3) Компилируем и запускаем:
$ cd hello
$ sbt run
[info] welcome to sbt 1.6.2 (Ubuntu Java 11.0.17)
[info] loading settings for project hello-build from plugins.sbt ...
[info] loading project definition from /.../hello/project
[info] loading settings for project hello from build.sbt ...
[info] set current project to hello (in build file:/.../hello/)
[info] compiling 1 Scala source to /.../hello/target/scala-3.1.3/classes ...
[info] Linking (1343 ms)
[info] Discovered 663 classes and 3689 methods
[info] Optimizing (debug mode) (1047 ms)
[info] Generating intermediate code (829 ms)
[info] Produced 12 files
[info] Compiling to native code (1583 ms)
[info] Linking native code (immix gc, none lto) (122 ms)
[info] Total (4968 ms)
Hello, world!
[success] Total time: 9 s, completed Nov 21, 2022, 1:11:59 PM
Смотрим исходник:
$ cat src/main/scala/Main.scala 
object Main {
  def main(args: Array[String]): Unit =
    println("Hello, world!")
}
Смотрим бинарник:
$ size target/scala-3.1.3/hello-out 
text data bss dec hex filename
1625129 223248 4928 1853305 1c4779 target/scala-3.1.3/hello-out

$ ldd target/scala-3.1.3/hello-out
linux-vdso.so.1 (0x00007ffe9492a000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5817600000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5817517000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5817895000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5817200000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5817a93000)

$ ./target/scala-3.1.3/hello-out
Hello, world!
Подробности здесь: https://scala-native.org/en/stable/user/index.html
vak: (Default)
Прочитал историческую книжку, проштудировал от корки до корки, получил массу удовольствия. Вроде и происходило всё описываемое относительно недавно, всего двадцать лет с небольшим, а насколько изменился мир с тех пор. Кто сейчас вспомнит Netscape навигатор? Первый большой коммерческий проект, решивший стать оперсорсным. Яркой звездой пронёсся он и канул, вытесненный сначала микрософтовским Интернет эксплорером, а позже Firefox-ом. Никто больше не называет крутых программистов хакерами. Нынче хакеры это компьютерные жулики, от которых только вред. А с другой стороны понятие опенсорс стало привычным и повседневным, никакого выпендрёжа или вызова в нём больше нет. Линукс окончательно победил остальные юниксы, вошёл в мейнстрим коммерческого софта.



Книжка собрала под одной обложкой несколько статей, написанных Эриком Реймондом в разное время по разным поводам, но они строго укладываются в общую линию. Книжка сама по себе опенсорсная: её можно скачать в виде PDF или почитать в виде текста в интернете. Имеются переводы отдельных частей на русский:
Приведу небольшой отрывок из "Homesteading the Noosphere".
Most ways humans have of organizing are adaptations to scarcity and want. Each way carries with it different ways of gaining social status.

The simplest way is the command hierarchy. In command hierarchies, scarce goods are allocated by one central authority and backed up by force. Command hierarchies scale very poorly; they become increasingly brutal and inefficient as they get larger. For this reason, command hierarchies above the size of an extended family are almost always parasites on a larger economy of a different type. In command hierarchies, social status is primarily determined by access to coercive power.

Our society is predominantly an exchange economy. This is a sophisticated adaptation to scarcity that, unlike the command model, scales quite well. Allocation of scarce goods is done in a decentralized way through trade and voluntary cooperation (and in fact, the dominating effect of competitive desire is to produce cooperative behavior). In an exchange economy, social status is primarily determined by having control of things (not necessarily material things) to use or trade.

Most people have implicit mental models for both of the above, and how they interact with each other. Government, the military, and organized crime (for example) are command hierarchies parasitic on the broader exchange economy we call `the free market'. There's a third model, however, that is radically different from either and not generally recognized except by anthropologists; the gift culture.

Gift cultures are adaptations not to scarcity but to abundance. They arise in populations that do not have significant material-scarcity problems with survival goods. We can observe gift cultures in action among aboriginal cultures living in ecozones with mild climates and abundant food. We can also observe them in certain strata of our own society, especially in show business and among the very wealthy.

Abundance makes command relationships difficult to sustain and exchange relationships an almost pointless game. In gift cultures, social status is determined not by what you control but by what you give away.

Thus the Kwakiutl chieftain's potlach party. Thus the multi-millionaire's elaborate and usually public acts of philanthropy. And thus the hacker's long hours of effort to produce high-quality open-source code.

For examined in this way, it is quite clear that the society of open-source hackers is in fact a gift culture. Within it, there is no serious shortage of the `survival necessities' — disk space, network bandwidth, computing power. Software is freely shared. This abundance creates a situation in which the only available measure of competitive success is reputation among one's peers.
Попробуем гуглоперевод с некоторыми коррекциями.
Большинство способов организации людей — это приспособление к дефициту и нужде. Каждый путь несет с собой разные способы получения социального статуса.

Самый простой способ — командная иерархия. В командных иерархиях дефицитные товары распределяются одним центральным органом и поддерживаются принуждением. Командные иерархии очень плохо масштабируются; они становятся все более жестокими и неэффективными по мере того, как становятся больше. По этой причине командные иерархии, превышающие размер расширенной семьи, почти всегда паразитируют на более крупной экономике другого типа. В командных иерархиях социальный статус в первую очередь определяется доступом к власти принуждения.

Наше общество является преимущественно экономикой обмена. Это сложная адаптация к дефициту, которая, в отличие от командной модели, довольно хорошо масштабируется. Распределение дефицитных товаров осуществляется децентрализованным путем через торговлю и добровольное сотрудничество (и на самом деле доминирующим эффектом конкурентного желания является создание кооперативного поведения). В экономике обмена социальный статус в первую очередь определяется наличием доступа к товарам (не обязательно материальным) для потребления или торговли.

У большинства людей есть неявные ментальные модели для обоих вышеперечисленных и того, как они взаимодействуют друг с другом. Правительство, вооруженные силы и организованная преступность (к примеру) представляют собой командные иерархии, паразитирующие на более широкой экономике обмена, которую мы называем «свободным рынком». Однако есть и третья модель, которая радикально отличается от обеих и признается не всеми, кроме антропологов; культура дарения.

Культуры дарения — это приспособление не к дефициту, а к изобилию. Они возникают в популяциях, у которых нет значительных материальных проблем с товарами для выживания. Мы можем наблюдать культуры дарения в действии среди аборигенных культур, живущих в экозонах с мягким климатом и обильной пищей. Мы можем наблюдать их и в определенных слоях нашего собственного общества, особенно в шоу-бизнесе и среди очень состоятельных людей.

Изобилие затрудняет поддержание командных отношений, а отношения обмена превращаются в почти бессмысленную игру. В культурах дарения социальный статус определяется не тем, что вы контролируете, а тем, что вы отдаете.

Так получается потлач-вечеринка вождя квакиутлей. Так происходят тщательно продуманные и обычно публичные акты благотворительности мультимиллионера. И отсюда же долгие часы усилий хакера по созданию высококачественного кода с открытым исходным кодом.

При таком рассмотрении совершенно ясно, что общество хакеров с открытым исходным кодом на самом деле представляет собой культуру даров. В нем нет серьезной нехватки «необходимого для выживания» — дискового пространства, пропускной способности сети, вычислительной мощности. Программное обеспечение распространяется бесплатно. Это изобилие создает ситуацию, в которой единственным доступным мерилом конкурентного успеха является репутация среди коллег.