>> |
No.15526
>>15517
Это не все претензии, я просто разобрал фичлист. Есть еще вещи в нем неописанные, которые я считаю нужными или вредными, но глубоко нырять не стал (ибо фичлиста хватило)
>нет кроссплатформенности. Непонятно, кстати, почему, у него же llvm. Но у тебя ведь ее тоже нет.
Не совсем, притензия не к отсутствию кроссплатформенности как к таковой, а к ограниченному платформенному кругозору автора. Я не зря привел пример со строками: когда пишешь под винду, все ~W функции WinAPI требуют Utf16 encoded строки. В линуксе (и в маке?) defacto стандарт - utf8, который прекрасен тем, что "строки" можно считать однобайтовыми. И сишные литералы строк как раз однобайтовые. И чтобы одно заработало под другим, нужно пердолиться макросами. Это не удобно, я когда хочу передавать/получать строки внешнему миру, не хочу ебаться с char/ushort/TCHAR и _T/L.
>есть UB, иными словами язык "не безопасный". Ты хочешь этим сказать, что у тебя будет что-то иное? И как же ты это реализуешь, особенно учитывая возможность вызывать сишные либы? Пример такого языка - си шарп, и там для этого сделана целая подсистема с unsafe. у тебя тоже так будет?
UB это просто лень (вроде четкой фиксации порядка вычисления значений параметров при вызове функции) или невозможность (если мы говорим о С как о языке для работы даже с совсем дикими архитектурами (как во времена его создания), когда у тебя bit shift может сохранять знак, а может и нет) четко описать семантику языка. UB позволяет компиляторам творить самодеятельность в таких местах, запросто вопреки ожиданиям программиста. Как видишь, к безопасности это имеет не самое прямое отношение. А к вызову либ так и совсем никакого :)
Моя задача задизайнить язык так, чтобы никаких темных пятен не было. Все должно быть четко и полностью определено, без возможности вольного трактования. Из-за чего кстати, я буду ограничен исключительно x86_64 архитектурой.
Unsafe не будет - весь код один большой unsafe. Моя задача заиметь систему типов, которая бы позволяла и проверять себя на глупость (запрет на арифметику и dereferencing для nullable pointer) и отстреливать себе ноги (not-null! оператор магическим образом преобразует nullable pointer в non-nullable).
Но поверх всего этого - скорость компиляции и качественные сообщения об ошибках. Они имют топовый приоритет.
|