Доброго здравия всем! Не подозревал, что тут такие темы обсуждаются.
Цитата:
dragon Yoda, а что за сайт compiler.su? Кто его держит?
pavia Если не ошибаюсь автор compiler.su зарегистрирован на Osdev.ru, только ник вспомнить не могу.
dragon Не Юрий Носков ли автор сайта compiler.su? Стиль изложения похож.
Раньше доменное имя принадлежало
«Оптимизирующим технологиям», 3 года назад они не продлили регистрацию, теперь это имя моё.
Раньше на этом сайте никогда не регистрировался. Хотя я и Юрий, но не Носков. Схожесть стиля изложения намекает, что мне и Носкову будет, наверное, интересно познакомиться.
Цитата:
pavia Бесплатный бывает только сыр в мышеловки.
Как раз на эту тему:
Бесплатный софт в мышеловке:Цитата:
dragon Просто сделать некоторую киллер фичу, позволяющую получить преимущество, преимущество измерить и перевести в деньги.
Такой фичей может стать полная совместимость с Windows - вплоть до драйверов. Такую цель ставит ReactOS, но увы - она своей цели до сих пор не достигла. Есть 100500 клонов Unix, но нет ни одного нормального клона Windows. Такая фича могла бы поднять ОС на такой уровень популярности, который и не снится ни одному варианту Linux. А вот потом, опираясь на наработанную пользовательскую базу, заработанную репутацию и деньги, можно двигаться дальше – в сторону своей ОС, построенной на самых передовых идеях.
Если такую Windows-совместимую ОС преподнести как импортозамещение, да поставить во всех госучреждениях, то под это можно и гоcфинансирование получить. Подробнее эта тема:
Русской операционной системой должна стать ReactOSПо этой ссылке можно проголосовать – какая ОС нужна нашей стране.
Цитата:
pavia Для создания Си++ надо несколько десятков человеко лет.
Евгений Зуев на пару с Кротовым (имя запамятовал) сделали компилятор за то ли за два, то ли за три года. Но у них до этого уже был опыт разработки компиляторов. Они не делали генерации кода – обошлись промежуточным представлением. Не писали библиотек. Подробности:
«Редкая профессия».
Цитата:
Zealint По поводу идентификаторов можно придумать разные варианты. Например, запретить использовать в них какие-то нелатинские буквы.
Тут вряд ли уместно простое решение разрешить/запретить. Если мы разрешаем программировать по-русски, то должны быть доступны 66 символов кириллицы, а другие символы кириллицы, которые есть в других славянских языках – нет. Если разрешаем программировать по-болгарски, то должны быть разрешен болгарский алфавит. Эти и другие соображения на этот счёт:
Многоязыковое программирование.
Цитата:
Zealint [ 9 ] :: Блоки кода
Нужны ли нам блоки кода типа begin / end или { / }?
На самом деле я лично не вижу в них острой необходимости. Блок кода можно определить отступом, хотя это может оказаться неудобным, потому что не очень хорошо видно, в каком блоке мы находимся, если их много. Когда есть скобки или операторы begin / end, можно хотя бы посчитать или определить комментариями у закрывающих скобок, в каком блоке мы находимся. Но точно также можно и без всяких скобок написать подобные комментарии, если они потребуются.
Есть неплохие варианты, которые позволят избавиться от подобных скобок, но при условии, что мы используем не обычный текстовой редактор, – цветовое графическое выделение блоков или соединительные линии. То есть в случае цветового выделения фон каждого блока, находящегося внутри другого, можно сделать чуть темнее.
Понимаю Ваши мысли и во многом разделяю. Есть мысль все блоки оформлять скобками: (if … else …), (while …) – это похоже на LISP, но, в отличие от LISPа, меньшее количество скобок – в LISPе по причине отсутствия приоритетов скобки используются весьма часто. Этот синтаксис исключает проблему висячего else. Лексический мусор минимален: только открывающая скобка. Правила языка должны быть таковы, чтобы число открывающих скобок равнялось числу закрывающих. Использование скобок добавит некоторые проблемы при разборе текста программы. Но они легко решаются уже на этапе лексического анализа.
Отступы должны формироваться IDE автоматически. В отсутствие IDE отступы надо делать вручную – как в Питоне. Примеры можно посмотреть тут:
Условные операторыПродолжение цикла и выход из негоСтиль языка программированияЦитата:
Zealint [ 11 ] :: Константы в программе
int a = 65'536+1'024
int16u a = AB'CD'h // шестнадцатеричное
int16u a = 1010'1011'1100'1101'b // двоичное, не может быть конфликта с шестнадцатеричным из-за суффикса b, так как тут нет суффикса h
Yoda Красота здесь, вероятно, не главное, более важна понятность. Возьмём три записи: 0badh, bad'h и badh. Только первая запись, очевидно, является числом. Второй вариант уже вызывает серьёзный когнитивный диссонанс, а третий вообще неотличим от идентификатора никакими разумными правилами.
Как раз на эту тему:
Шестнадцатиричные и двоичные константыШестнадцатиричные константы: 16"23 45 89 ab cd ef"
Двоичные: 2"1000 1100 0010 0101" или 2"1ооо 11оо оо1о о1о1" – второй вариант даже нагляднее.
Десятичные: 123 456 789, для наглядности цифры можно разделять одиночными пробелами.
Наглядности – хоть отбавляй. Правда, длинновато. Запись шестнадцатеричных длиннее варианта 0x… на 2 символа, запись двоичных проигрывает записи 0b… один символ. Но ради наглядности с этим можно смириться.
Цитата:
Zealint [ 12 ] :: Короткое замечание по поводу break
Например, break 2 значит выйти из двух блоков
Как раз на эту тему:
Продолжение цикла и выход из негоС помощью IDE можно даже стрелки рисовать – сколько блоков надо покинуть с помощью оператора выхода.
Про неявное приведение: оно может иметь место там, где оно никогда не приведёт к искажению:
char -> int16
uchar -> uint16 и int16
int16 -> int32
uint16 -> uint32, int32
int32 -> int64
uint32 -> uint64 и int64
и т.д.
В остальных случаях надо приводить явно.
Затронутая тема очень интересна, ещё не всё прочитал. Буду читать.