sab123: (Default)
[personal profile] sab123
Страдаю с программой на Рже с помошью двух эяев (один сам программу ковыряет, у другого я спрашиваю вопросы для ручных изменений). Я должен сказать, что их правила констанстности - это просто п.здец, без эяя за ними вручную усмотреть невозможно - постоянно какая-то херня ломается. Эяй - и тот иногда попадает только с третьей-четвертой-пятой попытки, и при этом иногда пытается нахерачить какие-то совсем ужасные изменения, от которых его приходится отговаривать вручную.

Более того, у них нельзя иметь несколько ссылок типа shared_ptr (Rc или Arc) на один и тот же объект, и при этом вызывать на нем неконстантные методы с внутренней синхронизацией. Нет, надо чтобы или была ровно одна ссылка, или мутексом синхронизировать вообще доступ к объекту. Вкладывание мутекса в Arc при этом портит свойства автоматического сравнения и их надо вручную заворачивать.

Ну, то есть, на самом деле по-нормальному делать можно, но только в режиме unsafe. Нет, ну я знаю, что на нем в безопасном режиме нельзя даже классические списки делать. Но чтоб запрещать доступ с нескольких ссылок - это вообще-вообще.

Между прочим, превращение Option<i32> в Option<i64> делается хитрым паттерном x.map(|v| v as i64), простого конструктора для этого недостаточно.

Невероятно дебильный, многословный, и уродливый язык. Хотя до джавной кривизны, может, и не совсем дотягивает. А может и дотягивает.

P.S. Я вот тут еще подумал, и на самом деле их критерий для Arc - не только утомительный, но и неправильный. Правильным критерием должно быть что во время доступа к объекту по ссылке эта ссылка не исчезнет.

Date: 2026-03-21 12:27 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Любой иностранный язык уродлив. Кривизну родного языка мы просто не замечаем.

Ограничения на количество ссылок следуют из принятой идеологии (move semantics и способа управления памятью). Местами громоздко, зато предотвращает появление целого класса багов, которые легко сделать и трудно найти.

Например, у меня в сиплюсплюсном коде был перевод uint64 в байты через union с комментарием, что это неявно зависит от endianess и по-хорошему надо бы переделать. При переводе на ржавчину Клод расписал явно перевод по байтам, потому что иначе никак. Строк кода стало больше, потенциальный баг исчез. Причём такой баг, который сложно найти (у меня, например, нет под рукой big endian процессора).

Date: 2026-03-21 06:35 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Как откровение воспринимается, когда в первый раз. Если взять два похожих языка, например, Java и C#, и сначала изучать Java, то будет откровение, а потом C# — нуичё, ничего интересного, те же яйца вид сбоку. А если сначала C#, то наоборот.

Мне вот Перл был неинтересен, потому что встретился поздно. Ну язык и язык, регулярные выражения были знакомы по grep-у, интерпретатор из Бейсика, работа с плоскими файлами из связки bash/awk, синтаксис кривоват по сравнению со взрослыми языками. Особенно после написания самодельного корявого языка на lex+yacc.

Date: 2026-03-21 06:38 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Правильный критерий - время работы программы целиком. А то можно наоптимизировать скрепку. В моих тестах по этому критерию ржавчина уже догнала C++, так что моё почтение.

Date: 2026-03-22 01:56 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Мне всегда казалось, что слухи про то, что на Фортране получается оптимизировать лучше, чем на C/C++, мягко говоря, преувеличены. То есть враньё. Когда-то давно фортрановская математическая библиотека была лучше и компиляторы C/C++ не умели векторизацию делать, но это ж когда было.

А теперь появилась возможность легко проверить. Сейчас попрошу Клода перевести программу, ранее использованную для сравнения C++ и ржавчины, на Fortran и сравню. О результатах доложу.

Date: 2026-03-23 12:50 am (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Докладываю: в моём примере Фортран оказался в два с лишним раза медленнее, чем C++ и Rust, при прочих равных.

Date: 2026-03-22 01:54 am (UTC)
cali4nickation: (Default)
From: [personal profile] cali4nickation
Претензии Java предьявлять спустя 30 лет странно. Сравнивать надо с языками того же поколения. Типа Scala или golang.

Date: 2026-03-22 11:10 pm (UTC)
cali4nickation: (Default)
From: [personal profile] cali4nickation
Не то чтобы ради померяться у кого паузы GC длиннее. Но первая JDK с которой я пошел в продакшн была 1.3. Приличным языком раньше Java 8 она конечно не была. Отдельный вопрос по concurrent programming где java.util.concurrent с 2005 года и до сих пор конкурентов пожалуй не имеет.

Поскольку golang, Rust, и Scala практически одногодки то друг для друга и есть peer group с точки зрения критики и кто там матери программинг лэнгвич тхиори ценен. ОО вопрос тонкий в отличии от нормального параметрического полиморфизма с первого дня и Algebraic Data Types с pattern matching.

Я тут дочитал книжку про Rust и разочарован многословностью и избыточностью экзотического синтакса для разных специальных случаев. C++ моего детства наверное был более логичен и читабелен.

Date: 2026-03-24 03:26 am (UTC)
cali4nickation: (Default)
From: [personal profile] cali4nickation
А есть ссылка на пример "scoped locks и тому подобное" и какую проблему они решают настолько что заменить нечем? Я чувствую тут какая то идиома из С++ что ли. То что может быть это теперь решено в JDK25 допускаю.

Date: 2026-03-26 02:42 am (UTC)
cali4nickation: (Default)
From: [personal profile] cali4nickation
Вы хотели сказать:

final var lock = new ReentrantLock();

public void performTask() {
lock.lock();
try {
// Critical section code
} finally {
lock.unlock();
}
}

Серьезные люди synchronized не трогают лет пятнадцать.

April 2026

S M T W T F S
   1234
56789 10 11
12131415161718
19202122232425
2627282930  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 13th, 2026 07:48 am
Powered by Dreamwidth Studios