OSDev

для всех
Текущее время: 29 мар 2024, 18:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 285 ]  На страницу Пред.  1 ... 21, 22, 23, 24, 25, 26, 27 ... 29  След.
Автор Сообщение
СообщениеДобавлено: 15 фев 2015, 15:16 

Зарегистрирован: 15 фев 2015, 12:41
Сообщения: 9
Доброго здравия всем! Не подозревал, что тут такие темы обсуждаются.
Цитата:
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
и т.д.
В остальных случаях надо приводить явно.

Затронутая тема очень интересна, ещё не всё прочитал. Буду читать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 фев 2015, 15:34 
Аватара пользователя

Зарегистрирован: 28 май 2012, 23:44
Сообщения: 237
Откуда: Санкт-Петербург
Bargest писал(а):
Также это промежуточное представление, на мой взгляд, можно было бы хранить не в виде самопального машинного кода (ленты команд), а в виде дерева: в каждом узле хранить тип, оператор и ссылки на его аргументы, которые тоже являются узлами. Конечно работа по сборке результирующего файла из кучи модулей усложнится по сравнению с объектниками, но зато можно будет выполнить очень качественную оптимизацию всей собранной программы.

Ы-ы-ы, что за тема, а! Прям мои мысли повторяются! Я именно так и хочу сделать в Канторе, хоть пришел к этому решению с другой стороны -- от невозможности фрактала на обычных исходниках. Сложности не боюсь, поскольку и так фрактал. Совокупность кода одновременно будет объектно-ориентированной БД, об этом написано в "Особенностях языка Кантор".

Снова хотел ответить на большое сообщение от Yoda, но тема убегает вперед...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 фев 2015, 15:46 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Zealint писал(а):
Ничего парадоксального.

Да я знаю :). Достаточно рассмотреть работу этой формулы для нескольких маленьких значений N и станет очевидно, куда девается иррациональность. Просто в подобных математических казусах логика вступает в противоречие с интуицией (и побеждает!). Как например, в задаче о вероятности совпадения двух дней рождения в случайной выборке из 40 человек.

Zealint писал(а):
Я вот ни разу не видел решения ни одной труднорешаемой задачи, которое работало бы быстрее на ФП языке, чем на ИП, когда за основу берётся одинаковый метод решения.

Я полагаю, это обусловлено тем, что ФП, как идея, отвязано от физической реализации.

Zealint писал(а):
Я подумал немного и пришёл к выводу, что быстрота этого алгоритма по сравнению с возведением матрицы в степень неочевидна. Но проверить это можно только на практике. Если угодно, можно запустить соревнование : ) Посчитать точно число Фибоначчи с некоторым номером.

Я подумал, что соревнование лишено смысла, т.к. мой код не предназначен для работы с целыми числами, а значит, не может дать точный результат, но хорошо подойдёт для примерного расчёта. Например, 1000-й член он посчитает быстрей, но только старшие биты. Ваш же метод идеально сгодится для расчёта в целых числах неограниченного размера.
Проверил, действительно, все ячейки результирующей матрицы содержат числа Фибоначчи, и ячейка (1,1) содержит последний член. Расчёт можно слегка оптимизировать с учётом того, что матрица всегда симметрична. Но корень из пяти тоже нет необходимости считать.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 фев 2015, 16:23 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Bargest писал(а):
Если использовать подход промежуточного представления аля LLVM, думаю, можно отказаться от традиционных объектников.

Вообще, конечно традиционные объектные форматы имеют множество "возрастных" ограничений, это не только name mangling и отсутствие проверки типов и количества аргументов. Туда же следует отнести и проблему множества одинаковых инстансов (копий кода) в разных объектниках, сгенерированных из одного шаблона. LLVM её успешно решает.

Bargest писал(а):
Вместо этого можно сгенерировать код промежуточного представления, содержащего в себе всё, что нужно для сборки нескольких файлов в один проект, потом собрать все эти файлы в один результирующий и транслировать внутреннее представление в ассемблер (с оптимизацией, конечно).

Это и есть LLVM в чистом виде. Но зачем тогда заново изобретать велосипед LLVM?

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 фев 2015, 17:01 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Юрий писал(а):
Доброго здравия всем! Не подозревал, что тут такие темы обсуждаются.

Добро пожаловать на наш форум!

Юрий писал(а):
Раньше доменное имя принадлежало «Оптимизирующим технологиям», 3 года назад они не продлили регистрацию, теперь это имя моё.

А вы сами не имеете к ним отношения? Весьма интересный проект.

Юрий писал(а):
Схожесть стиля изложения намекает, что мне и Носкову будет, наверное, интересно познакомиться.

Для начала почитайте тему Носкова, а там решите для себя вопрос о знакомстве. Лично мне стиль совершенно не кажется схожим.

Юрий писал(а):
Такой фичей может стать полная совместимость с Windows - вплоть до драйверов. Такую цель ставит ReactOS, но увы - она своей цели до сих пор не достигла.

И вряд ли достигнет. Да и любую Windows-совместимую свободную ОС ждёт тот же результат. Причины следующие.
  • Такая ОС всегда будет в роли догоняющего. А значит в ОС от MS всегда будет что-то, чего нет в новой ОС. Любая же попытка "обогнать" автоматически вызовет несовместимость, а навязать своё видение MS нереально.
  • В такой ОС всегда будут глюки совместимости. Невозможно проект такой сложности функционально скопировать без единой ошибки.
  • Бесплатная ОС не имеет стимула для работы программистов. Талантливые программисты хотят есть. Вспомните про только что упомянутый бесплатный сыр. Значит гонки всегда будут вялотекущие.
  • Сама по себе бесплатность не является большой и желанной целью. Кого жаба душит, давно нашёл способ бесплатно использовать продукты от MS. Те же, кто платят, платят в первую очередь за то, чтобы всё работало, как часы.
Но, конечно, определённую узкую нишу такие продукты занять могут, как вы уже сказали, в гос. программах.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 фев 2015, 17:44 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Yoda писал(а):
Просто в подобных математических казусах логика вступает в противоречие с интуицией (и побеждает!). Как например, в задаче о вероятности совпадения двух дней рождения в случайной выборке из 40 человек.

Согласен, но у разных людей разная интуиция. Например, кому-то интуиция может дать такое решение: количество пар людей 40*40=1600, а дней в году 365. Кажется, что тут аж 4 пары должны совпадать в день : ) Это не совсем логично, но ближе к логике.

Yoda писал(а):
Я полагаю, это обусловлено тем, что ФП, как идея, отвязано от физической реализации.

Да, так и есть. Сама логика работы процессора восходящая, а не нисходящая. Можно сеть в лодку и грести кормой вперёд, будет медленно, хотя конечный результат с движением носом вперёд одинаковый. Недаром, кстати, переписывание рекурсивной функции в не рекурсивную часто даёт выигрыш в скорости.

Yoda писал(а):
Я подумал, что соревнование лишено смысла, т.к. мой код не предназначен для работы с целыми числами, а значит, не может дать точный результат, но хорошо подойдёт для примерного расчёта. Например, 1000-й член он посчитает быстрей, но только старшие биты.

В таком случае Вам нужно убрать из формулы тот член, в котором 1-sqrt(5). Он при n>=0 будет меньше 1, поэтому если взять просто ((1+sqrt(5))/2)^n/sqrt(5), и взять затем ближайшее целое к нему, то получите нужное число. Таким образом, получаем двухкратное ускорение на пустом месте : ) Вообще, этот приём удобен во всех тех случаях, когда только один характеристический корень больше 1 по модулю, а остальные меньше 1 и начинают при возведении в степень давать почти 0 с какого-то момента.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 фев 2015, 17:50 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Да, забыл добавить,
Yoda писал(а):
Проверил, действительно, все ячейки результирующей матрицы содержат числа Фибоначчи

Этот приём работает для всех линейных рекуррентных соотношений с постоянными коэффициентами. Для всех для них можно построить похожую матрицу. Проблема только в том, что порядок матрицы будет равен порядку соотношения, то есть имеем квадратичный рост памяти, что несущественно для порядка 2, но существенно для порядка 30'000 (имел дело с такими).

Цитата:
Расчёт можно слегка оптимизировать с учётом того, что матрица всегда симметрична.

Разумеется! У меня рука бы не поднялась хранить лишнее число... не знаю как, но я даже физически начинаю ощущать небольшую боль, если вижу лишние действия (хотя, быть может, это воображение). Но я не всегда их вижу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 фев 2015, 18:18 

Зарегистрирован: 04 ноя 2007, 14:48
Сообщения: 113
По поводу "соревнования" кто быстрее вычислит число фибоначчи: каким образом предполагается возводить матрицу в степень N? Последовательным умножением, т.е. по формуле M^(N+1) = M * M^N?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 фев 2015, 18:35 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
dragon писал(а):
Последовательным умножением, т.е. по формуле M^(N+1) = M * M^N?

Нет, конечно! Нужно хотя бы исходить из варианта, что M^(2N) = (M^N)^2 и M^(2N+1)=M^(2N)*M. То есть число умножений не будет превышать 2*log(N). Мы решили не делать соревнования, это как бы так, баловство будет : ) Я просто думаю, что возведение матрицы в степень (при грамотной реализации, в которой, разумеется, не будет никаких матриц), выиграет у возведения дробных чисел в степень, когда нам нужен точный ответ со всеми значащими цифрами. Но я, тем временем, сомневаюсь, так ли это.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 фев 2015, 21:16 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Zealint писал(а):
В таком случае Вам нужно убрать из формулы тот член, в котором 1-sqrt(5). Он при n>=0 будет меньше 1

Действительно. У меня, кстати, раньше мелькала эта мысль, но улетела не зацепившись :D.

Zealint писал(а):
поэтому если взять просто ((1+sqrt(5))/2)^n/sqrt(5), и взять затем ближайшее целое к нему, то получите нужное число.

Таким образом, вычисление N-того члена сводится к возведению константы в степень N, делению на константу и округлению. Проверил, работает.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 285 ]  На страницу Пред.  1 ... 21, 22, 23, 24, 25, 26, 27 ... 29  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB