LINUX.ORG.RU

Избранные сообщения grimwaken

Стоит ли идти учиться в медицинский ВУЗ?

Форум — Talks

Сразу к делу: ввиду хренового положения дел с работой «по-профессии» (за 20 тысяч рублей максимум), ибо из-за гребанной клановой системы в этой стране попасть на достойное место крайне проблематично, начал я искать другие варианты. Уважаемый erzent таки смог переубедить меня от работы сис.админом на пол-ставки. И снова о клановой системе: есть неплохое место патологоанатома, которое, мне могут передать, так сказать, по-наследству. Из-за врожденного цинизма и кучи всякого дерьма, которое я увидел в жизни, перспектива резать трупы меня нисколько не смущает. Интересует только вопрос обучения в мед.вузе на заочке - реально ли сдать экзамены, изучая что-либо самостоятельно? И потребуется ли сдавать ЕГЭ, если один диплом уже есть?

UPD. Возможна ли очное с «прогулами» на 2-3 дня, которые будут отводиться на работу?

 ,

Meyer
()

Классификация операторов в Lisp

Форум — Development

Разработчики Common Lisp не зря поменяли традиционный термин «специальная форма» на «специальный оператор». Например, выражение как целое (quote a) является специальной формой, а quote обозначает специальный оператор. Необходимо еще немного прояснить терминологию. Итак, оператор — любой объект, который может находится в голове формы. Ниже представлена классификация операторов:

                           Операторы
             _________________/\__________________________________________
	    |                              |                              |
         Функции                Специальные операторы                  макросы
       ____/\____              ____________/\________________ 
      |          |            |                              |
 встроенные   замыкания     Примитивные                 реификаторы
                        специальные операторы       ________/\_________
                                                   |                   |
                                               частичные             полные

Как можно видеть, я не отношу макросы к категории специальных операторов, т.к. макросы лишь эмулируют специальные операторы.

В соответствии с этой теорией должен быть изменен apply/eval интерпретатор:

(eval выражение окружение продолжение)
(apply-operator оператор аргументы окружение продолжение)
(apply-function функция аргументы продолжение)

Функция eval лишь вычисляет голову формы, а результат (оператор) классифицируется функций apply-operator, которая либо передает управление функции, которая реализует соответствующий специальный оператор, либо функции apply-function. Кроме того, что специальные операторы применяются к невычисленным аргументам (cdr формы), они еще имеют доступ к полному контексту вычислений. Макросы не имеют такого доступа, поэтому, я не классифицирую их как специальные операторы. Функции не имеют доступа к лексическому окружению момента вызова. Следовательно такие функции как set из CL должны рассматриваться как нарушение теории и исключены из Лиспа. Функция set может быть, но только если она будет принимать дополнительный аргумент: (set символ значение окружение).

Частичные реификторы. nlambda получает только cdr формы, vau — cdr формы и окружение.

Полные реификаторы. В работах Brian Cantwell Smith были предложены 3-х аргументные fexpr'ы. В реификаторы Смита передаются не только сырые аргументы и окружение, но и продолжение. Полные реификаторы неотличимы от встроенных специальных операторов.

 

komputikisto
()

Конечные автоматы для микроконтроллера

Форум — Development

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

 конечный автомат,

WRG
()

Два подхода к контекстам

Форум — Development

В этом посте я собираюсь рассмотреть различия в объектной модели Smalltalk и CLOS и как эти модели связаны с понятием контекста. Поклонники статической типизации могут не читать. С открытием CLOS возникли споры о том, CLOS — это что? ООП или не ООП? Становление новой науки неизбежно приводит к терминологическим спорам. ООП — термин расплывчатый и ИМХО, его следовало бы избегать. Как CLOS, так и Smalltalk реализуют одну важную фичу — ad hoc полиморфизм. Эта фича крайне важна для программирования, т.к. позволяет настраивать уже существующий код без изменения его исходного текста. Модель Smalltalk имеет ограниченный ad hoc полиморфизм, т.к. фактически позволяет производить диспетчеризацию лишь по одному аргументу. Однако, кроме ad hoc полиморфизма есть еще одна вещь, связанная с ООП — инкапсуляция. Итак, кратко опишем две ОО модели:

  • Инкапсуляция и ad-hoc полиморфизм (Smalltalk).
  • Ad-hoc полиморфизм без инкапсуляции (CLOS).

Далее я покажу, что эти два подхода противостоят друг другу. В Smalltalk объект — самодостаточная сущность. Чтобы распечатать объект (получить его внешнюю репрезентацию) необходимо послать объекту соответствующее сообщение. Это означает, что внешняя репрезентация объекта зависит только от него, и в минимальной степени зависит от внешнего контекста вызова. В CLOS внешняя репрезентация объекта целиком и полностью зависит от текущей обобщенной функции print-object. Теоретически у одного экземпляра Lisp системы может быть много различных обобщенных функций print-object.

Обычно естественные языки имеют лишь одно текстовое представление. Это не так для иероглифических языков, и скорее всего мы придём со временем к ситуации, когда один и тот же язык будет иметь множество проекций на текст. К этому же идет и эволюция языков программирования. Так, в Perl 6 функция load принимает на вход грамматику, которая описывает Perl 6 и написана на Perl 6. Далее свойство независимости от внешнего представления мы будем называть синтаксической абстракцией. ЯП, наиболее полно поддерживающий синтаксическую абстракцию — Lisp. Программы на Lisp записываются в виде S-выражений, но скобки тут нужны только для того, чтобы указать ридеру структуру. В Lisp текстовая репрезентация программы называются выражениями, а вычислитель работает не с выражениями, а с формами. Термин форма подчеркивает абстрактную природу вычислителя. Я ранее уже писал о том, как можно усилить синтаксическую абстракцию символов в Lisp.

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

Контекст — крайне важное понятие. Игнорирование контекста и абсолютизация понятий приводит к проблемам. Как определить тип объекта? Широко известен спор между Платоном и Диогеном. «Человек, - сказал Платон, - это двуногое животное без перьев». Тогда Диоген ощипал петуха и со словами: «Вот твой человек». Платону пришлось сделать уточнение: «Двуногое животное без перьев и имеющее ногти». Понятно, что тип объекта зависит от наблюдателя. Языки программирования начали с простой идеи — к каждому объекту прилеплен бейджик с его типом. В Smalltalk человеком является тот, кто на вопрос «ты кто?» отвечает — человек. Какой может быть типизация, которая учитывает контекст? Она носит название предикатная типизация. Еще иногда эту идею называют утиной типизацией. В этом подходе тип объекта зависит от того, кто и какие вопросы задает объекту. Платон может определить человека по отсутствию перьев и наличию ногтей, а Диогену нужен фонарь, чтобы определить, кто есть человек.

Одна из наиболее важных идей в истории программирования — гомоиконность является примером переключения контекста. В Lisp нет специально выделенного типа для AST. Является ли определенное дерево AST или нет, зависит от намерений исполнителя. Благодаря этому стало возможным метапрограммирование без значительного усложнения языка. Язык, который выделяет отдельный тип для AST должен иметь весь набор селекторов и конструкторов для этого типа, тогда как представление AST формами дает возможность пользоваться общими селекторами и конструкторами.

Я не отвергаю полностью концепцию инкапсуляции, но хочу обратить внимание, что ее абсолютизация (как в Smalltalk) противоречит некоторым принципам заложенным в динамические языки.

 , ,

komputikisto
()

Emulek-style programming

Форум — Development

Почитал я вот этот тред, и (может быть ошибочно) понял, что участники дискуссии разделились на 2 лагеря. Первый — за emulek-style, другие против.

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

Давайте оформим эту мысль вот так. Есть 2 ЯП l1 и l2. Есть транслятор с l1 в l2 — это компилятор, назовем его К, и есть транслятор с l1 в l1 — это интерпретатор — И.

Представим себе, что мы выполнили текст на языке l1 c помощью И

text(l1) --> И --> text(l1)
и с помощью K
text(l1) --> K --> text(l2)
Пока все вроде ок, все работает одинаково. А теперь представим себе такую ситуацию
(text(l1) --> И --> text(l1)) --> И --> text(l1)
Мы выполнили выходную строку текста как программу — подали ее вновь на вход транслятору. Иными словами мы выполнили сгенерированную в рантайме программу.

Может ли транслятор K сделать то же самое? Только с помощью костылей, типа макросов и препроцессоров. Но есть тонкий момент. Что если нам нужно сделать

((text(l1) --> И --> text(l1)) --> И --> text(l1)) --> И --> text(l1)
?

Тут у нас всплывает, ИМХО, суть того, что принято называть мощностью ЯП.

А Вы за Emulek-style или против?:)

phill
()

Чем отличается компилятор от интерпретатора?

Форум — Development

Сабж

Еще интересует, является ли то и другое трансляторами?

selena-gomes
()

вопрос по sicp

Форум — Development

Глава 4.4.1 Логическое программирование, дедуктивный поиск информации.

Я правильно понимаю что sql это пример яп для логического программирования?

Что еще можно почитать по типу sicp но желательно без привязки к конкретному яп?

TDrive
()

Ворос по раскрытию макросов

Форум — Development

Допустим, я пишу новый, «более лучший лисп»(ТМ). Хочу реализовать простенькую макросистему. Мой экспандер анализирует исходник, находит макровызовы, раскрывает их, а дальше возникает вопрос. Что если код, в который раскрывается макрос, содержит еще один макровызов? Его нельзя раскрыть на данном этапе, поскольку еще нет разрешения имен. Значит, мне надо заэвалить все, а раскрывать когда? Скорей всего, когда данный вызов потребуется. Заэвалил, запускаю снова экспандер. вроде норм. Но что если результат 2 вызова требуется уже при первом выполнении? Заставлять пользователя явно указывать, в какой фазе раскрывать каждый макрос, или как?

 

terminator-101
()

Simon Peyton Jones: Haskell — это бесполезный язык

Форум — Development

 ,

terminator-101
()

Закончена формализация парадигмы объектно-ориентированного программирования

Форум — Development

http://www.realcoding.net/dn/docs/machine.pdf http://www.realcoding.net/dn/docs/MachineInheritance.pdf

В статье содержится формализация основных понятий объектно - ориентированного программирования. Даются определения таким понятиям ООП как класс, объект, наследование, инкапсуляция, полиморфизм через математические термины: множество, отношение, функция, абстрактный автомат. Строго различаются понятия тип (множество состояний абстрактного автомата) и класс (абстрактный автомат).

>>>

anonymous
()

Какие есть ресурсы хорошие по теории ООП?

Форум — Development

Какие есть книги (и другие ресурсы) хорошие по теории ООП и связанного?

Кроме Википедии :-) Википедия сложна еще и тем, что там нету никакой структуры материала - мысли нужно формировать самому из взаимоисключающих обрывков, и путем чтения книг/ссылок откуда взялся материал. А эти ресурсы зачастую вообще не в ту степь, и начинаются словами «на основе ваших знаний вот такой-то теории».. т.е. ее тоже нужно изучать. Это безусловно познавательно, но не влезает ни в какие разумные требования по времени изучения материала. Разумные требования - ну, например, год.

stevejobs
()

Ищу соавтора! Реализация Lisp.

Форум — Development

Я занимаюсь разработкой нового диалекта Lisp, параллельно в вузе читаю спецкурс по семантике языков программирования. По ссылке можно прочитать о некоторых моих идеях:

https://drive.google.com/file/d/0B13ti3tFkQZlSkFPV3NuMHR4eGc/view?usp=sharing

Пока исходников нет в общем доступе, т.к. я активно работаю над ними и мне тяжело будет поддерживать к ним доступ в инете. Ищу соавтора для допиливания реализации и/или написания книги по семантике Лиспа. Желательно из Санкт-Петербурга. Обращайтесь вконтакте: http://vk.com/maliculo

Еще хочу прорекламировать свою публичную лекцию в cs club по Лиспу: http://compsciclub.ru/node/2767

 

komputikisto
()

Об угребищности систем общего назначения

Форум — Development

Значит, я с бодуна вот что придумал.

Универсальный Критерий Угребищности Систем Общего Назначения. (Теорема лавсана)

Система Общего Назначения является Угребищной тогда и только тогда когда она не является Метациклическим Интерпретатором.

Другими словами: Система, не способная к построению Метасистемы в рамках самой себя, то есть не способная к описанию и изменению самой себя в своих же терминах, и при этом являющаяся Системой Общего Назначения(в какой-либо области), Угребищна.

Обратное, естественно, неверно. Если Метасистему Системы Общего Назначения можно описать другой системой, это совершенно не значит что она Угребищна, и более того, в таком случае не существовало бы концепции бутстрапа, а значит и Метациклических Интерпретаторов вообще.

Чем, в контексте языков программирования, это отличается от просто тьюринг-полноты?

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

Альтернативно, мы можем такую метасистему использовать как стороннее средство, связанное через стороннюю систему(скажем генерировать код и вызывать компилятор через создание процесса операционной системы в которой запускается программа на нашем тьюринг-полном языке), подтверждая тем самым десятое правило Гринспуна, и собственно тезис теоремы.

Примеры, сначала метациклических интерпретаторов:

  • Универсальная машина Тьюринга
  • RASP-машина
  • Реляционная модель данных
  • Лисп

А вот скажем примеры систем, соответствующих критерию:

  • Среднестатистический современный регистровый процессор
  • Большинство языков программирования, особенно со статической типизацией.
  • Большинство NoSQL моделей данных или скажем иерархических моделей данных, вроде файловых систем

В частности, давайте посмотрим на C#. C# не является метациклическим интерпретатором, т.к. термины языка не являются его же объектами.

Отчасти, это компенсируется платформой .Net, для которой термины C#(но не все) объектами таки являются(System.Reflection, грядущий Roslyn и т.д.), отчасти, в самой малой степени, фичей nameof() из C# 6, но это все только отчасти.

Сама же платформа .Net критерию тоже соответствует, но, в теории из нее можно было бы сделать метациклический интерпретатор, лисп-машину, внеся лишь достаточно небольшие изменения.

Дискач.

UPD. Собственно, отличнейшую статью нашел на эту тему: http://weblog.raganwald.com/2006/11/significance-of-meta-circular_22.html

 , ,

lovesan
()

покритикуйте самописный рогалик

Форум — Games

На старости лет собрался что-нить игровое написать. Получился рогалик :)

онлайн-версия (бесплатно, без смс, хехе): http://www.wessense.org/

Есть бинарники для линуха, мака и винды, пакованные node-webkit. Короче, критикуйте, предлагайте фичи, тыкайте в баги и прочее.

 , ,

Shadow_Walker
()

Системное программирования.

Форум — Development

Только знакомлюсь с системный программированиям в среде Линукс. Сейчас читаю книжку Роберта Лав «Системное программирования» (1 издания Питер 2008). Знаю, что уже есть 2 издания, но пока в интернете оно на анг., а покупать не хочу. ( С английским туго. ) Может у кого есть скан 2 издания?

В этой книжке идется о программировании на Си и соответственно есть проблемы с С++.

Я понимаю, что программист С++ должен знать Си, но ...

Есть какая нибудь хорошая книжка о системном программировании С++? Или лучше книжка, где проводится сравнения системного программирования Си и С++?

Чтобы параллельно ее читать вместе с Робертом Лав.

 , ,

xensk
()

Работа за границей

Форум — Talks

http://ni.kprf.ru/n/2263/

Для Ъ:

О запрете выезда наших ученых за рубеж с целью работы

В своем обращении в Государственной Думе от 22.04.2014, лидер фракции КПРФ Геннадий Андреевич Зюганов упомянул о количестве ученых, выезжающих за рубеж на работу (цифра огромная - 1,5 млн. чел. за много лет). Получается, государство тратит деньги на их образование, а данные граждане пренебрегая интересами государства, едут работать на врага (учитывая сегодняшнюю обстановку), если можно так выразиться. Если патриотического воспитания и самосознания им не достает, то почему бы законодательно не ограничить их в работе за рубежом. В нашей стране есть множество научных центров, думаю, работу молодому ученому-специалисту найти несложно. Понятно, что может быть, в каком-нибудь зарубежном научном центре условия получше, зарплата побольше, но ведь должно же еще быть чувство Родины и ответственности за ее судьбу. Решение проблемы

Необходимо законодательно закрепить подписку с поступающих студентов в ведущие государственные ВУЗы страны (МФТИ, Бауманка, МГУ и др.) о невыезде на работу за рубеж после окончания ВУЗа. Для уже работающих ввести запрет на выезд за рубеж с целью работы.

Ожидаемый результат

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

---

Судя по записке речь даже не об ученых, а о всех выпускниках ВУЗа. В связи с быстрым созданием границ (в самой худшей форме) для интернета, бизнеса и пр., это все вполне реально.

Если планируете уезжать, то лучше это делать побыстрее.

PS: Не пишите очевидные комментарии.

 

soomrack
()

Как всё таки устроен кэш процессора?

Форум — Talks

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

http://ru.wikipedia.org/wiki/Кэш_процессора

 , , ,

rezedent12
()

синтаксис си

Форум — Development

есть довольно простой вопрос по синтаксису.

мне надо напечатать на stdout число.

    char qwer = 5;
    char asdf = qwer+'0'
    write(1, &asdf, sizeof(asdf));

можно ли записать как-то так:

    char qwer = 5;
    write(1, (&qwer) + '0', sizeof(qwer));

?

 ,

IvanR
()

понять Си

Форум — Development

посоветуйте, что почитать для поверхностного понимания философии языка Си.
я вот экспериментирую (Си+ООП из C++), решил сделать банальную функцию, возвращающую строку с датой:

char* sh_time::getTimeString() {
  time_t t = time(0);
  struct tm * now = localtime( & t );
  //(*s) << printf("%d-%02d-%02d\n", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday);
  size_t sz;
  sz = snprintf(NULL, 0, "%d-%02d-%02d\n", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday);
  s = (char *)malloc(sz + 1);
  snprintf(s, sz+1, "%d-%02d-%02d\n", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday);
  return(s);
}

плюс отдельная функция, делающая free(s).
это у языка такая фишка - каждый на ровном месте огород городит - или же для подобных задач есть стандартизированные пути решения? (я не про готовые функции, а про традиционные способы решения задач)

 , ,

batekman
()

Порекомендуйте различное чтиво по Си

Форум — Development

Керниган и Ритчи рулят, я знаю. Code complete тоже имеется, даже в бумажном виде. Больше беспокоит то, что я не могу вникнуть сходу в то, как работают различные библиотеки.

Как пример, Glibc в одних местах читаема, в других я ничего не понимаю, взять тот-же wcstok (http://codepad.org/E0UfAg1K), где почти ничего не понятно. Хотелось вникнуть, как вообще устанавливаются указатели, чтобы отрезать кусок wchar_t слева и справа строки, пока ясно только добавление числа к указателю, выбирающее начальный символ слева.

Возможно, я что-то пропустил у K&R по теме, даже очень на то похоже. Пригодится и подсказка по этому куску (как указателями ограничивается строка слева и справа) и различное общее и годное чтиво, связанное с Си и *nix, спасибо.

 , ,

KM155TM2
()