Comments: |
кетмар-кун пусти под замок пж онегайкудасай.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | August 28th, 2024 - 02:54 am |
---|
| | | (Link) |
|
там ничего особо интересного, но без проблем. you're welcome.
сенкс. давно хотел почитать тебя развернуто например почему раст нинужен, а оберон збс и безопасен, ошушение что не понимаю в этих скамерских реалиях айтишных. и про форты интересно. вряд ли сам уже за это возьмусь, а так хоть летсплеи посмотрю. на мой вкус ето самое интересное, еще и без хамства в кументах.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | August 28th, 2024 - 09:36 am |
---|
| | | (Link) |
|
>например почему раст нинужен, а оберон збс и безопасен про это я как раз не пишу: оно, типа, очевидно. ;-) залог надёжности — в простоте. форт простой. оберон простой. хрустик по сложности где-то в районе крестов, ещё и требует раскорячиваться весьма специфическим образом.
вообще, один из первейших критериев оценки языка — может ли один человек за пару месяцев сделать с нуля полноценный компилятор. включая кодоген, конечно. я с наножитом считерил, но это как раз месяц из двух.
это важно, потому что если один человек не может сделать компилятор — то один человек и не может освоить язык.
а с безопасностью всё совсем просто: 1. запрещаем указатели-на-что-угодно. 2. делаем сборщик мусора. 3. строгая типизация и битьё по морде за любые попытки читерить. 4. ассерты неотключаемы, проверка индексов массивов неотключаема, проверки на NIL dereference неотключаемы, проверки на целочисленное (как минимум) переполнение неотключаемы. 5. оптимизация генерируемого кода сверх самого минимума не нужна. 6. если компилятор не может стопроцентно отдетектить ситуацию «use before assign» — тупо зануляем все локалы. 7. всегда надо искать, что из языка можно выкинуть, а не что можно добавить.
ну, и мы только что получили оберон.
оо, сенкс! да, хорошо было бы заставлять писать небо и аллаха разработчиков каждого нового языка, и потом книжку издавать типа project oberon, шобы сущностей не плодили. хорошо когда язык простой, и читать понятно и свой сделать можно.
наверное я зря оберон русту противопоставлял, скорее паскаль надо было.
а отчего необходимость нуллов и в ситуациях вроде "use before assign"? я б всё это позапрещал, сделал бы мейби и никаких объявлений без присваиваний. думал шо оно однозначно billion dollar mistake.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | August 28th, 2024 - 11:12 pm |
---|
| | | (Link) |
|
оберон — язык практический, а не теоретически-космонавтский. на практике без NIL никак не обойтись. собственно, нигде не обойтись — потому что «или ссылка, или особое значение, которое не ссылка» — это и получается «адрес или NIL». ну, можно попытаться извернуться и вместо NIL сделать какую-нибудь «sentinel record» — в итоге получаем тот же NIL, только криво замаскированый.
объявления с присваиваниями не всегда возможны: мы можем реальное значение вычислить значительно позже, нежели объявлена переменная (и да, объявления где попало — зло). в итоге получится то же присвоение нуля — так пусть компилятор это делает автоматически, зачем мне это руками печатать?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | August 28th, 2024 - 11:21 pm |
---|
| | | (Link) |
|
вообще, я уже где-то упоминал, но повторю, а то хуй найдёшь.
безопасность — это не про защиту от идиота. потому что идиот — он завсегда найдёт как любую защиту обойти, идиоты очень изобретательны.
безопасность — это защита от непреднамеренных ошибок. программа должна или работать, или с грохотом падать. а вот молча рубать в лапшу память, например — не должна.
вот оберон это и гарантирует: ты не испортишь «чужую» память, если вдруг у тебя где-то вылезет «дикий» указатель (в обероне это вообще невозможно), или если выстрелишь индексом за пределы массива. на этом месте полномочия оберона всё: написать правильный алгоритм — забота программиста.
GC нужен за тем же самым: он гарантирует, что у тебя никогда не будет ситуации «use after free». но и всё: он не гарантирует, например, отсутствие утечек памяти — это опять забота программиста.
технически в оригинальном обероне нет даже зануления локалов (кроме указателей) и проверки на целочисленные переполнения: программа всё равно не сломает того, что ломать не должна. просто выдаст фигню какую-то, но фатально память в лапшу не нарубит, например.
я добавил зануление и проверки переполнений просто потому, что это почти ничего не стоит, и делает код более предсказуемым.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | August 28th, 2024 - 11:30 pm |
---|
| | | (Link) |
|
и почему «объявления где попало зло»: а потому что это явный признак того, что у тебя на самом деле несколько процедур склеены в одну. далеко лазить смотреть объявления? значит, процедура слишком длинная. нужна куча одноразовых переменных? это несколько процедур в одной. и так далее. | |