Начнём, пожалуй
Спасибо всем, кто отвечал. Многие не поняли описанного пути. Так же большинство хочет критики. Поэтому будет про путь, и почему текущие подходы/решения нам(жаждущим скилла) не подходят.
Начнём с базовых постулатов. Я буду и дальше составлять опросники. Если кто-то хочет, чтобы какой-то отдельный пункт я разобрал подробнее - пишите. Необходимые поля будут добавлены.
у нас нет языка
динамическая типизация - не язык
Кратко. В вебе везде и всюду используется скриптуха с динамической типизацией( далее динамика). Почему это днище - большинству уже давно стало ясно. Причин много, но основные:
- Стали популярные ide и прочие средства автоматизации. Ничего из этого не работает(частично, либо полностью).
- динамика работает на базе чуда. Работает случайно.
- совместить правильно отдельные части системы - в принципе невозможно. Нету никаких механизмов описания контрактов на сопряжение. Всякое сопряжение так же работает чисто случайно.
Этого уже достаточно. И многие думают, что вот добавим в скриптухе типы и заживём. Да, какие-то проблемы это решает и для человека не искушённого - это производит вау-эффект и всё, кажется всё идеальным. Но.
у нас нет статической типизации - сектанты всех обманули
Фундаментальная проблема данного подхода в следующем. Запартыши эту тему целиком и полностью игнорируют(иначе бы пришлось идти мыть полы, т.е. вернуться к тому, для чего были рождены). В рамках же моей классификации - я разделяю типизацию(статическую) на два вида - это типизация описательная "статическая" и, собственно, статическая.
Если какая-либо часть семантики языка не определяется типами, а определяется какой-либо реализованной в рантайме логикой - это описательная типизация. Очень хорошо это заметно на примере TS. Вся семантика там - это js, и типизация динамическая. Сверху поверх этого навешаны типы, но это не более чем аннотации для статического анализатора. Никак на логику исполнения программы - они не влияют, и ничего не определяют.
По сути все подобные языки - это динамическая скриптуха, но с прикрученным поверх статическим анализатором, для которого и пишутся типовые аннотации. Все подобные языки я называю скриптухой. И они ею по определению(даже сектантскому) являются.
И вот наш мамкин гений, вооружившись помойной методичкой из запарты - идёт и рассказывает мне об очередном хаскеле, что вот типизация там статическая - типы ведь есть. Но нет. Это такая же описательная типизация. И любого запартыша с подобными предъявами - можно тут же слать нахрен.
Причём абсолютно неважно есть ли у скриптухи ГЦ, либо его нет. Причём проблема шире, ведь даже если запартышам кажется, что его нет - он нам самом деле есть.
Простой критерий для определения описательной типизации - наличие подтипов. Схема там следующая. Сектант при проектировании системы типов сталкивается с полиморфизмом. И, как он решается в скриптухе? За счёт any. Т.е. некоего типа, который объединяет в себе все возможные типы, позволяя самому себе являться любым из них.
И тут важно. Дошколята с хабра не могли этого осознать. В основном методичка учит дшколят тому, что вот если мы возьмём any усечём и превратим в заранее определённый набор типов - у нас появится тип. Нет, не появится. По определению определено может быть только то, что имеет один возможный вариант. Если вариантов более, чем один - состояние не определено и определённым быть не может.
Но почему же у дошколят это работает? Да, они тупые и сожрут любую херню, но ведь есть те, кто им писал методички? А теперь мы возвращаемся к динамике. Почему там это работает? Правильно, потому что тип в рантайме хранит информацию о том, каким именно типов он является.
А теперь подумаем об описательной типизации. Если у нас есть динамическая типизация, которая хранит в рантайме необходимый тип, т.е. определяет его, а сверху к этому прикручен сумтип - это работает. Именно поэтому оно и работает. A|B - не может работать в статической типизации. Это работает только в тандеме с хранением тега в рантайме.
Таким образом мы выходим к базовому свойству скриптухи. Скриптуха ВСЕГДА теряет типы. Потому как и в A|B
и в C
(где с подтип(базовый тип) для A и B). Ведь статическая типизация предполагает возможность определения типа, но эта возможность переносится в рантайм. И без подобного механизма - подобная типизация не может работать.
Почему же это сделано так? Всё очень просто. Нужно запомнить базовая правило. Запарта - тупа, а всё что она делает(за редкими исключения, но то скорее вопреки запарте) - всегда примитивное говно. Всегда выбираются самые убогие подходы и решения.
Вернёмся к полиморфизму. Вот у запартыша в скриптухе всё было круто f = a => b; f("");f(10);
- типы сами разрулятся в рантайме. Но, ему же нужно родить типизацию. И вот у него возникает гениальный план, а давайка мы возьмём скриптуху, скажем, что (a: num|string) => b
и никто не заметит. И так как запарта определяет методичку - она в ней запишет, что это и есть истинная реализация полиморфизма(СТАТИЧЕСКОГО).
Это всё что нужно знать о запарте. Она десятки лет учит сектантов тому, чего просто не существует. И называет что-то тем, чем оно не является.
На самом деле всё ещё хуже. Вы никогда не задавали себе вопрос - почему во всей бездарной скриптухи есть ГЦ? Почему так происходит какой-то вскукарек на тему value-типов. Хотя скриптуха типизирована и все дела. И это ещё одно чудо. На самом деле гц в скриптухе нужен не столько для управления памятью - сколько для реализации полиморфизма. Потому как необходимо создать одну полиморфную функцию, статически создать какую достаточно сложно. Да и мало кто заморачивается с этим даже для примитивных случаев.
Поэтому, все тормоза ГЦ в большей мере миф. Тормозит там совершенно другое. К тому же, зачем далеко ходить - достаточно посмотреть на С++. Жертвы пропаганды/невежества - везде и всюду используют динамические аллокации(почему читаем выше). Это базовое свойство любой си с классами дристни. Поэтому си с классами так же является скриптухой.
И, теперь, самое важное. Всякая там скриптуха бездарная с ворованными llvm пытается кукарекать, что она статическая и там какого-либо динамического диспатча. На самом деле - он там есть. А даже если его там нет - это не важно. Фокус заключается в следующим. Условно где-то под языком существует какой-либо оптимизатор/трансформатор, который каким-то образом убирает(в каких-то случаях) динамический диспатч. Но.
УБИРАНИЕ ДИНАМИЧЕСКОГО ДИСПАТЧА ГДЕ-ЛИБО -- НИКОИМ ОБРАЗОМ НЕ УБИРАЕТ ЕГО НА УРОВНЕ ЯЗЫКА. Это фундаментальное правило, которое игнорируют бездарные запартные сектанты. Ведь, если вы внимательно слушали, проблема заключается не в том, что есть какой-то там диспатч в ратайме -нет. Проблема заключается в том, что типы затираются. Т.е. если на уровне языка мы имеем A|B
- и каким-то чудом мы это свели до B
- на уровне языка ничего не поменялась. В рамках системы типов тип как был не определён - таким и остался. Система типов так же остаётся описательной.
В общем, что из необходимо понять. Абсолютно не важно что кукарекают запартыши и прочие сектанты. Скриптуха не определяется тем, есть ли ГЦ, есть ли динамический диспатч, есть ли что-либо ещё. Она определяется тем - происходит ли на каком-либо этапе потеря типа(по вине самого недоязычка и его "системы типов").
последствия
Хорошо, но почему это разделение настолько фундаментально? Всё очень просто. Опять вернёмся к самому наглядному типу скриптухи - TS. Недавно опять увидел у пацана проблему, максимально показательную.
class rpc {
foo(a: number, b: string) {}
bar(a: string, b: number) {}
}
Как решается задача генерации из этого рпц-ендпоинта. Рантайм-рефлексией(на самом деле это, конечно же, никакая не рефлексия). Мы можем обойти объект, там посмотреть его поля - посмотреть функции, посмотреть их ключи. Но рантайм ничего не знает о типах. и как нам сгенерировать валидатор для аргументов? Никак. Причём не только в тайпскрипте - в любой скриптухе.
В данном случае причина проста - типов не существует на уровне языка. Они прикручены где-то сбоку. И подобная картина в любой скриптухе. И даже какой-то факт присутствия их на уровне языка - ничего не меняет - этого уровня недостаточно.
Для решения данной проблемы в скриптухе существует банальный механизм. Если типизация - это просто какая-то левая мета-информация к которой из языка доступа нет, то мы можем написать программу, которая её прочитает и сгенерирует логику обработки. Это может быть в разно форме, но ключевое - всегда внешняя логика.
И это только вершина айсберга. Да, здесь можно обмазаться аннотациями, прикрутить кодоген и всё будет работать, но. Каждая строчка на скриптухе - это проблема. В статическом языке типы - это основное хранилище семантической информации, но в скриптухе она недоступна.
В связи с этим от типов мы получаем не особо больше, чем те три пункта. Мы пишем дырявое, убогое дерьмо. Весь код наш состоит из мусора, который может быть убран. Мы не сможем для каждого случая написать кодогенератор. А в каждой строчке кода не один подобный случай.
И это так причина почему описательная типизация не состоятельна. И почему она нам не подходит. Мало того, что он по определению не может существовать без внешнего кодогена и логики, так ещё она не позволяет нам использовать даже пары процентов потенциала статической типизации. Сектанты пытаются латать свои корыта - прикручивая к ним какую-то убогую макросню, либо встроенные/внешние кодогенераторы. Но всё это мусор. Всё это не более чем расписка в том, что недоязычок говно. Ведь если бы он был не говном - зачем ему другой язык? Зачем ему костыли?
Здесь сразу становится понятно - почему С++ развивается в сторону языка-кодогенератора. Статический язык - это язык высшего порядка - это мета-язык. Человек не должен писать код. В какой-то степени это понимают запартыши и какие-то потуги в этом направлении у них ведутся, но всё это бесполезно. Это примитивная, бездарная херня, которая никому не нужна. Как-нибудь я подробней об этом(о запарте и почему она обречена) расскажу.
На самом деле, открою тайну, но сишка так же является скриптухой. Правда с одним нюансом. Из-за того, что там ничего нет - там никакие проблемы особо не проявляются. Потому как любой код на сишке - это мономорфная кодогенерация(ручная). Т.е. используя сишку - мы просто в 90% времени делаем обезьянью работу.
И здесь так же можно понять - почему я всегда хейтил и хейчу C++. Си с классами - это чистая скриптуха. Уже полиморфная. А вот C++ как мета-язык не состоятелен. Что мы хотим от мета-языка? Мы хотим, чтобы он производил то, что мы можем произвести руками(с теми же, либо лучшими свойствами). Но он не производил. И вот только с gnu++2a - язык стал в какой-то мере полноценным и позволяет заменить си.
Таким образом C++ - это единственный статический язык(язык имеющий настоящую статическую типизацию), но он нам не подходит. И в следующей части я расскажу почему.
Продолжай. В целом направление мысли понятно.
ОтветитьУдалитьКапитанство.
ОтветитьУдалить>На самом деле - он там есть. А даже если его там нет - это не важно
Ты заипал с этой хернёй
Ну а в чём проблема? Да, есть там что-то или нет - неважно. Но вместе с тем я указал на то, чего там нет. И это не капитантство - большинство уверено в обратном, их убедили в обратном. И для того, что-бы люди ошиблись в этом моменте - я постулирую "Это не так" и этого достаточно - как минимум человек усомнится. Если непонятно почему - есть комменты, есть форма.
УдалитьПодобные постулаты в будущем я разберу.
Нет, по сути всё верно. Но текст тяжело читается. Можно, конечно, сказать про адептов/бездарностей/сектантов и т. д.(ну типа поэтому и тяжело им читать, что они не знают многого), но в таком случае пацаны опять побегут кодить на скриптухе. Промыть мозг(в хорошем смысле) не так просто
УдалитьДа, не беспокойся у меня есть заходы для этого. Я начал делать кое какую демку ещё пару недель назад. Поделал пол дня и время кончилось. Сейчас полностью занимаюсь разработкой инфраструктуры. Подождите - я не смогу за пару дней что-то убедительное сделать.
УдалитьИ в этом проблема. Писать очень долго, а показывать что-то ещё дольше. Но в будущем будет понятней о чём я.
Всё, меня забанили на лор-помойке по ип. https://www.linux.org.ru/forum/development/15768923. Хотя я всего навсего умножил на ноль пару сектантов
УдалитьКакие же у сцаря тупые подсосы, пиздец просто.
ОтветитьУдалитьПодсос царя хуже пидораса.
Боишься, что руст и прочую скриптуху на ноль умножат и ты станешь не нужен?
УдалитьЕё и так не надо умножать, она лежит под SJW, попёрдывает.
Удалитьэтот антонл реально поехавший, вызывает царя на бой, и я только счас всопмнил это же история с навальным, там было такое же
УдалитьАвтор столько об этом пишет, и до сих пор не сформулировал внятно мысли. Каждый раз словесный понос))) Хоть идею понять можно.
ОтветитьУдалитьЦарь умер или в психушке?
ОтветитьУдалитьЦарь голубой.
УдалитьШаман
Похоже, царя мы больше не увидим - уже несколько месяцев ничего не слышно(как раз с момента наступления дедлайна по блогу на плюсах - но это просто совпадение). Очень жаль, кстати - некоторые идеи были вполне годные. Хайп по русту также сошёл на нет, не без активного участия царя - однозначный вин.
Удалить> Похоже, царя мы больше не увидим - уже несколько месяцев ничего не слышно
УдалитьРаньше он на такие сроки не пропадал?
Забрали санитары болезного нашего на содержание.
УдалитьВот ваш царь, чё разнылись-то... https://www.linux.org.ru/people/cloun1901/profile
УдалитьЦАРЬ ТЫ ЖЫФ??
ОтветитьУдалитьЦарь сейчас телегу пиарит...
Удалитьhttps://ukposts.info/have/obratnyj-por-dok-slov-na-c-17-i-si/o6OoZayvq4ig14E.html
> twinkle delight Місяць тому
> @Андрей Лав Обделаешься, когда придёшь поржать. Хотя какие-то уроки я всё же стараюсь вести. proriv_zaparti в телеге. Хотя там в основном локальные мои потоки и срачи. Там нет ничего для рядовых представителей. Если же тебе интересно там что-то узнать/рассказать про сишку/кресты - приходи.
> twinkle delight Місяць тому
> @Андрей Лав Я не занимаюсь уроками. Для этого есть люди определённого уровня. Да а что ты поржать можешь, дошколёнок? Ты так обделаешься и убежишь на первой же потуге.
И далее в том же духе. По-моему, тамошние дошколята ничего не поняли.
Ну и конечно же https://www.linux.org.ru/people/beydoderke/profile
Кстати, "блог на плюсах" для царя - давняя тема, не меньше 5-ти лет бодается и всё никак не осилит.
Удалитьhttps://www.linux.org.ru/forum/development/12649936?cid=12655698
> Как пишущий сайтик на С++ - заявляю - писать адская боль.
В итоге так и не смог, сказал что надо выкинуть("или как минимум переработать") кресты и ещё сеть так же не осилил(собрался сокеты и tcp выкидывать). В общем, "обделался, начал рыдать и звать мамку, после чего убежал в телегу" (c). Хотя, судя по этому:
https://www.linux.org.ru/forum/development/12649936?cid=12681230
> > Кстати, а как насчет блога - написал уже?
> Не беспокойся. Меня мало это интересует. Мне не нужна ни убийца сишки, ни бложик, ни что-либо ещё.
не собирался и не мог ничего показать. Последние отмазки про "Подождите - я не смогу за пару дней что-то убедительное сделать" вообще убоги на этом фоне. И уж тем более, никакого "Меня не мотивирует «царь горы», «победы» и прочее - меня мотивирует делать что-то ради пацанов" у царя нет:
https://www.linux.org.ru/forum/development/12649936?cid=12681369
А разгадка проста - вниманиевхоре:
> Да и я ищу аудиторию
Я думаю, примерно через лет 5 мы увидим, как царь начнёт нахваливать уже раст. Всё, как и говорил анонимус:
Удалитьhttps://www.linux.org.ru/forum/development/13758732?cid=13792952
> Эволюция Царя
> 1. Буду все песать на асме, будет быстра пребыстра.
> 2. Ой, чото нулева на асме воще, лучши нопишу свой езык, убийцу сишки.
> 3. Да ну свой езык ваще днище, лучши буду царем сишки.
> 4. Ну а чо, си++ не токой уже и плахой, там есть сишка плюс еще много чиго. <--- Царь находится здесь
> 5. Указатили все мне абасали и питухи, а у джавы сборка мусара, попацаночке ваще.
> 6. Императивщина абосаное гавно, а функцианальщина для чистова запила.
> 7. Байлерплейт лалка и питух, нука чо там за этот ваш лисп.
> 8. А я всигда знал, что лисп лудший, я проста вас тралил, азазазазза!
Только раст вместо лиспа. На лиспе царь никогда писать не будет(инфа 100%) - аудитории-то нет, всем плевать на лисп. А вот раст как раз в центре внимания.
А че за телега то у царя? дайте телегу или группу или че есть из последнего?
УдалитьЗабанься, дебил.
ОтветитьУдалитьhttp://dolgopa.org/profile/uwymuni/
ОтветитьУдалитьРаст-отребье снова ретранслирует агитки:
ОтветитьУдалитьhttps://www.cyberforum.ru/go/thread2782092.html
Эй Царь! Ты живой? Тут чел запилил свой мега быстрый чатик: http://fintank.ru:8080/
ОтветитьУдалитьБери пример с него, а то ты трепло так бложек на сишечке и не сделал
Причём, на C++ чатик-то.
УдалитьКто-нибудь здесь когда-либо испытывал финансовый кризис? У меня была, и это была непростая ситуация, потому что я потерял почти все, и я не мог объяснить, как все прошло, но covid-119 действительно меня испортил, но я благодарен сегодня за все Мистер Ли сделал для меня помощь с ссудой под 2 ставки, чтобы вернуть мой бизнес, и сегодня я рад, что жизнь была несправедливой по отношению ко мне в течение всего периода covid19. МР Ли - кредитный специалист, который работал с крупной американской компанией, которая ссужает деньги всем, кто ищет ссуду и готов заплатить с процентной ставкой 2 взамен здесь его адрес электронной почты: 247officedept@gmail.com и WhatsApp: + 1-989-394-3740
ОтветитьУдалить> Проблема заключается в том, что типы затираются
ОтветитьУдалитьВсмысле проблема?
> Скриптуха не определяется тем, есть ли ГЦ, есть ли динамический диспатч, есть ли что-либо ещё. Она определяется тем - происходит ли на каком-либо этапе потеря типа(по вине самого недоязычка и его "системы типов").
Яснее выражайся? Типы и должны затираться; данные должны обрабатываться без информации о типах, но с сохраненными гарантиями. Иначе это скриптуха, динамический диспатч и так далее