All streams
Search
Write a publication
Pull to refresh
64
0.9
Вадим Румянцев @vadimr

Разработчик аппаратно-программных комплексов

Send message
Если Вы мне пытаетесь объяснить, что вообще типизация имеет применение в программировании, то я, вроде, с этим и не спорил. Я писал только о том, что переменные ограниченных и перечислимых типов (не сами эти типы, а имеющие их переменные!) находят гораздо меньше применений на практике, чем этого хотелось бы на первый взгляд.

Вы путаете URL и адресную строку броузера.

Я ничего не путаю, я пишу о типичном случае применения.
Заблуждение здесь состоит в том, что компилятор может отличить корректное прикладное значение от некорректного. В частности, ничто в самой строке «привет» не говорит о том, что её нельзя использовать в качестве e-mail. По формальным признакам, это имя пользователя в почтовом домене по умолчанию.

Единственный корректный способ отличить правильный e-mail от неправильного — это соединиться со своим smtp сервером и предложить ему соответствующее RCPT TO. Понятно, что это возможно только динамически. А все статические проверки e-mail адреса — это зло. Большинство авторов почтовых программ, к счастью, это хорошо понимают.

По поводу url — слово «привет», разумеется, не является url-ем, но, тем не менее, может иногда использоваться в качестве такового, в чём легко убедиться, набрав его в браузере.
Специально для Вас, набрал в почтовом клиенте Apple Mail сообщение на адрес vadim@mail, успешно отправил его при помощи Postfix и успешно получил при помощи Dovecot. mail – это имя моего почтового сервера в локальной сети, домен подразумевается по умолчанию.

Затем сделал то же с адресом просто vadim (имя сервера по умолчанию).

Date: Sun, 4 Sep 2016 14:41:56 +0300
To: vadim
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
X-Mailer: Apple Mail (2.3124)
Не мешает, но в статье-то Вы агитируете за поддиапазоны в стиле Ada/Delphi.

На самом деле, даже цикл for… to MAXINT в большинстве реализаций никогда не завершится, даже без всяких поддиапазонов (в Си это тривиально следует из записи условия цикла, а во многих других языках является неприятным открытием для многих программистов). Это просто иллюстрирует фундаментальное противоречие, заключающееся в том, что алгоритмически целесообразный диапазон значений переменной может отличаться от домена прикладных значений, для обработки которых предназначена эта переменная.
localhost ничем не отличается от любого другого имени хоста.
Класс URL не для того произведён от String, чтобы обеспечить статическую валидацию, а просто затем, чтобы включить в него удобные методы.

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

var i: 1..10;

а потом хотим сделать по ней цикл:

for i := 1 to 10 do something;

При обычной реализации этого цикла, переменная i получит на его выходе значение 11, выходящее за пределы её подтипа.

В своё время было много полемики по этому поводу в рамках академического флейма C vs Pascal.

Что касается конкретно практики isValidEmail, то я бы относился к ней с осторожностью, и использовал, скорее, как предупреждение, чем как безусловный императив, однозначно подразумеваемый статической системой типизации.
Эдак вы и postmaster@localhost объявите ошибкой времени компиляции.
222@ccc — валидный адрес, если в вашей сети в данный момент доступен хост ccc с мейлсервером.
Тип EmailAddress, предлагаемый в статье, не может существовать, так как адрес валидируется каждым сервером получателя по-своему.

От академических теорий до практики весьма далековато.
На мой взгляд, несколько некорректное сравнение. VCS — это программный продукт, а pacemaker — просто компонент для поддержки конфигурации кластера. Для адекватного функционального сравнения было бы логичнее сравнивать VCS с сопоставимым продуктом на базе pacemaker, например, со SLEHA.
Был прецедент, когда отгружали старую версию firmware при регрессе.
Бессмысленно сравнивать формальные условия, надо смотреть на фактическую их реализацию. Скажем, по моему опыту, железная поддержка IBM/Lenovo обычно реагирует очень быстро и по делу, и через пару дней после выхода из строя железа, если это очевидная неисправность, ремонт бывает уже завершён. О другом производителе, упомянутом в статье, у меня осталось гораздо более тягостное впечатление. Собственно, это единственное, что оправдывает стоимость железа IBM/Lenovo.
qemu – это опенсоурсный эмулятор аппаратуры PC. А KVM – конкретная архитектура и реализация системы виртуализации, и эта система виртуализации, при необходимости, использует qemu для выполнения кода на виртуальных машинах. Также qemu могут использовать и другие системы виртуализации, например, Xen.

virsh и virtmanager, упомянутые в статье, не являются ни частью, ни специфической принадлежностью именно KVM.
Я не отрицаю значимости философской проблемы непрерывности сознания, но просто в сформулированной постановке она не возникает.

А что касается Xen, то это, для начала, архитектура гипервизора, а затем реализующий её код.
Нейроны не обновляются, поэтому тут тоже никакой проблемы нет. Считают себя мной ведь нейроны моего мозга, а не волосы и даже не нога.
А что тогда такое вообще Xen? Citrix XenServer или же компонент обычных дистрибутивов Linux?
Отнесение KVM к типу 1 весьма спорно. Он, хоть и содержит модуль ядра, но работает, пользуясь сервисами обычного ядра Linux.
Инженеров-программистов в институте не зря обучают как курсу метрологии, так и основам цифровой схемотехники. Образование (или опыт работы) иногда бывает полезно.
IEEE Std 1003.1-2008/Cor 1-2013:

The typedef name int N _t designates a signed integer type with width N, no padding bits, and a two's-complement representation.

Разумеется, это вопрос POSIX, а не стандарта языка, как и вообще все вопросы внутренней реализации libc.

Information

Rating
1,792-nd
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Project Manager, Software Architect
Lead