А что можно полезного запустить на 8Гб? Просто интересно, я вот сомневаюсь покупать ли 12Гб или просто тупо подождать пару-тройку лет и купить что-то нормальное, чтобы уже надолго хватило.
Прежде чем всё это делать, нужен Шаг 0 - выбор, покупка и установка железа, на котором всю эту красоту запускать. Вот это гораздо интереснее обсудить. И вот с этим реально непонятно что делать:) Цены растут (и конца этому процессу не видно), слабое железо покупать не хочется, потому что оно и слабое недешевое, а результат будет хуже чем у онлайн моделей. А реально мощное железо стоит уже очень дорого.
Также, концептуально есть мощные видеокарты Nvidia, под которые всё заточено (CUDA и т.д.). И есть новый класс устройств - UMA (Unified Memory Architecture) / APU (Accelerated Processing Unit), когда процессор и видеокарта объединены и используют общий пул памяти (причем памяти там больше чем у видеокарт). Скорость работы меньше чем у видеокарт, но зато памяти больше (128 гигов против 32...48). И это не огромная видеокарта, требующая десктопа, а самостоятельное портативное устройство. Apple с чипами M-серии или AMD Strix Halo.
Тип-произведение это обычная структура вида struct { typeof(y) _y; typeof(z) _z; }
Кстати, я не знаток typescript, но там вроде есть и сумма, и произведение, и теоретико-множественные операции (пересечение, объединение и т.п.) в явном виде.
Это не ограничение, а скорее удобство. Компилятор генерирует "нетерминальный" составной тип, и логично чтобы он вел себя так же, как литерал вида {1,2,3} в обычном Си, которым можно инициализировать объект любой структуры из трех числовых полей (увы, в Си эта тема неразвита, и просто присвоить или передать в функцию литерал не получится - только инициализировать, но как пример подойдет и инициализация).
Я уже много лет изучаю языки программирования и разрабатываю свой, и я совершенно не вижу в чем проблема создать такой дизайн. Главное - правильная система типов.
Для if(x>0) y; else z; возвращаемый тип это тип-сумма typeof(y) + typeof(z)
То есть если y это string а z это float то на выходе получаем "вариант" (дискриминированное объединение) с двумя полями string и float.
Если у нас цикл с предусловием while(x>0) y; или условие без альтернативной ветки if(x>0) y; то очевидно что результат - тип-сумма typeof(y) + never, что эквивалентно опционалу optional(typeof(y))
Разумеется эти типы должны быть структурными (не номинативными), чтобы была совместимость с любым явно определенным пользовательским номинативным типом.
При такой системе типов стандартные структурные стейтменты всегда будут совместимы с выражениями. Операторы "запятая" и "условие" можно будет убирать из языка чтобы они не создавали путаницы (по сути запятая это ведь разделитель элементов в списке, к примеру в списке аргументов функции или в литеральном кортеже, но если она еще и оператор - возникает ненужная путаница и усложнение).
Точно были когда-то модели, когда сверху на крышке, в районе динамика, небольшое утолщение. А на второй половинке телефона (там где клавиатура и микрофон) соответственно выемка.
Впрочем, на современных "плоских" смартфонах камера нередко всё равно торчит, и никого это не смущает. И на раскладушках с гибким экраном ее как-то размещают именно там где надо.
Всегда с интересом смотрю на современные раскладушки и всегда разочаровываюсь расположением камеры. Почему ее упорно ставят на ту часть которую нужно держать в руке, а не на откидывающуюся крышку?
Вообще не нужен. С телефона я иногда надиктовываю мысли на обычный диктофон, а затем раз в месяц слушаю и переписываю вручную. Да, наверное в современном мире это не круто, но мне лень разбираться как сделать иначе.
Никогда. Просто не имею дело с логами и дампами.
Нет, не готов. Вот позволяло бы железо держать оффлайн LLM, тогда да.
Собственно, у меня есть свой инструмент для заметок, где реализовано почти всё что мне нужно. Заметки - обычные html файлы, организованные в дерево (да, это значит что заметка располагается в конкретном месте в дереве, а не где попало; впрочем у меня есть место "incoming" которое я периодически сортирую - это, кстати, довольно интересный процесс). Одна заметка - один файл. Редактор - на C++/Qt, компонент "браузер" в режиме editable. Опциональное шифрование тоже есть. Синхронизация между компами через гит. Поиск тупой, без всякого индекса, но недавно сделал то, чего, кажется, нет нигде: поиск близко расположенных слов. То есть особый режим, ввожу два слова через пробел, и поиск находит только те места, где эти два слова находятся достаточно близко друг к другу (скажем не далее 30 символов, это настраивается). Благодаря дереву можно искать не по всей базе, а только в каком-то подмножестве.
Периодически в новостях пишут "хакеры слили столько-то терабайт данных у компании такой-то". Вот достойная задача для Хакеров - выкачать эти отсканированные книги из их внутренней библиотеки и залить на Либген:)
То есть это "процедурно‑параметрическое программирование" - по сути мультиметоды с динамической диспетчеризацией, то есть свободные функции + какой-то аналог таблицы виртуальных функций?
И интересно как это устроено на низком уровне, то есть те самые таблицы. Ведь если в C++ у нас указатель на vbable хранится в начале объекта, то здесь несколько объектов...
А что можно полезного запустить на 8Гб? Просто интересно, я вот сомневаюсь покупать ли 12Гб или просто тупо подождать пару-тройку лет и купить что-то нормальное, чтобы уже надолго хватило.
Прежде чем всё это делать, нужен Шаг 0 - выбор, покупка и установка железа, на котором всю эту красоту запускать. Вот это гораздо интереснее обсудить. И вот с этим реально непонятно что делать:) Цены растут (и конца этому процессу не видно), слабое железо покупать не хочется, потому что оно и слабое недешевое, а результат будет хуже чем у онлайн моделей. А реально мощное железо стоит уже очень дорого.
Также, концептуально есть мощные видеокарты Nvidia, под которые всё заточено (CUDA и т.д.). И есть новый класс устройств - UMA (Unified Memory Architecture) / APU (Accelerated Processing Unit), когда процессор и видеокарта объединены и используют общий пул памяти (причем памяти там больше чем у видеокарт). Скорость работы меньше чем у видеокарт, но зато памяти больше (128 гигов против 32...48). И это не огромная видеокарта, требующая десктопа, а самостоятельное портативное устройство. Apple с чипами M-серии или AMD Strix Halo.
Но цены пока огромные и на карты, и на UMA/APU.
Крайне интересно, можно ли вызвать распад вакуума искусственно. Нужны ли для этого огромные коллайдеры, или достаточно скромной домашней лаборатории.
Возможно, китайцы просто меньше говорят и больше засекречивают.
Главное что в Supermium поддержка v2 расширений останется.
Тип-произведение это обычная структура вида struct { typeof(y) _y; typeof(z) _z; }
Кстати, я не знаток typescript, но там вроде есть и сумма, и произведение, и теоретико-множественные операции (пересечение, объединение и т.п.) в явном виде.
Хочу сам себя поправить, вместо "typeof(y) + never" правильно будет "typeof(y) + void" , все же это разные по смыслу типы
Опасно быть лысым.
Видеокарточка за 2 миллиона:( Куда катится мир? И когда ужо наконец они подешевеют?
Так это не исключения, а синтаксический сахар для обработки кодов ошибок. Вот в Go такое завезти не мешало бы:)
А вообще исключения в том или ином виде, думаю, есть во всех языках - деление на ноль нужно же как-то обрабатывать.
Это не ограничение, а скорее удобство. Компилятор генерирует "нетерминальный" составной тип, и логично чтобы он вел себя так же, как литерал вида {1,2,3} в обычном Си, которым можно инициализировать объект любой структуры из трех числовых полей (увы, в Си эта тема неразвита, и просто присвоить или передать в функцию литерал не получится - только инициализировать, но как пример подойдет и инициализация).
Я уже много лет изучаю языки программирования и разрабатываю свой, и я совершенно не вижу в чем проблема создать такой дизайн. Главное - правильная система типов.
Для
if(x>0) y; else z;возвращаемый тип это тип-суммаtypeof(y) + typeof(z)То есть если y это string а z это float то на выходе получаем "вариант" (дискриминированное объединение) с двумя полями string и float.
Если у нас цикл с предусловием
while(x>0) y;или условие без альтернативной веткиif(x>0) y;то очевидно что результат - тип-суммаtypeof(y) + never, что эквивалентно опционалуoptional(typeof(y))Разумеется эти типы должны быть структурными (не номинативными), чтобы была совместимость с любым явно определенным пользовательским номинативным типом.
При такой системе типов стандартные структурные стейтменты всегда будут совместимы с выражениями. Операторы "запятая" и "условие" можно будет убирать из языка чтобы они не создавали путаницы (по сути запятая это ведь разделитель элементов в списке, к примеру в списке аргументов функции или в литеральном кортеже, но если она еще и оператор - возникает ненужная путаница и усложнение).
Точно были когда-то модели, когда сверху на крышке, в районе динамика, небольшое утолщение. А на второй половинке телефона (там где клавиатура и микрофон) соответственно выемка.
Впрочем, на современных "плоских" смартфонах камера нередко всё равно торчит, и никого это не смущает. И на раскладушках с гибким экраном ее как-то размещают именно там где надо.
Всегда с интересом смотрю на современные раскладушки и всегда разочаровываюсь расположением камеры. Почему ее упорно ставят на ту часть которую нужно держать в руке, а не на откидывающуюся крышку?
А хотя бы в 2028 есть шанс что цены начнут опускаться?
Вообще не нужен. С телефона я иногда надиктовываю мысли на обычный диктофон, а затем раз в месяц слушаю и переписываю вручную. Да, наверное в современном мире это не круто, но мне лень разбираться как сделать иначе.
Никогда. Просто не имею дело с логами и дампами.
Нет, не готов. Вот позволяло бы железо держать оффлайн LLM, тогда да.
Собственно, у меня есть свой инструмент для заметок, где реализовано почти всё что мне нужно. Заметки - обычные html файлы, организованные в дерево (да, это значит что заметка располагается в конкретном месте в дереве, а не где попало; впрочем у меня есть место "incoming" которое я периодически сортирую - это, кстати, довольно интересный процесс). Одна заметка - один файл. Редактор - на C++/Qt, компонент "браузер" в режиме editable. Опциональное шифрование тоже есть. Синхронизация между компами через гит. Поиск тупой, без всякого индекса, но недавно сделал то, чего, кажется, нет нигде: поиск близко расположенных слов. То есть особый режим, ввожу два слова через пробел, и поиск находит только те места, где эти два слова находятся достаточно близко друг к другу (скажем не далее 30 символов, это настраивается). Благодаря дереву можно искать не по всей базе, а только в каком-то подмножестве.
Периодически в новостях пишут "хакеры слили столько-то терабайт данных у компании такой-то". Вот достойная задача для Хакеров - выкачать эти отсканированные книги из их внутренней библиотеки и залить на Либген:)
Почему это? И статья технически интересная, а заголовок так вообще шикарный.
То есть это "процедурно‑параметрическое программирование" - по сути мультиметоды с динамической диспетчеризацией, то есть свободные функции + какой-то аналог таблицы виртуальных функций?
И интересно как это устроено на низком уровне, то есть те самые таблицы. Ведь если в C++ у нас указатель на vbable хранится в начале объекта, то здесь несколько объектов...
Надеюсь Хабр не российский сайт. Потому что это единственное "российское" что я регулярно посещаю...