LINUX.ORG.RU

Сообщения somequest

 

Вопрос по виму

В виме есть всякие там алиасы. Значит, я так полагаю, там должен быть какой то мехнизм тиков, который парсит весь текст каждые n миллисекунд, и реплейсит то что надо. Есть ли доступ к этому механизму из UI, из viml, или еще как то? Можно ли в эти тики встраивать свой функционал?

 , ,

somequest
()

Чем отличается linux от оффтопика?

Обычно много холливаров вокруг этого, создается ощущение, что это какие то 2 принципиально разные оси. Но когда читаешь о них, хз, какая принципиальная разница между ними. Ну окружения, софт разный, это понятно. Но аналогичный, в принципе. Читаешь чо-нибудь, и пишут то-то есть на юникс, и оно же в виндоус. И так про все, практически. Ну свободный vs пропиетарный, но это не техническая сторона. В чем реальная разница-то? Единственное, что мне попадалось, из серьезного, так это то, что в никсах монолитная архитектура. Какие серьезные отличия кроме этого есть?

 , , ,

somequest
()

Что такое ООП

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

Конечно, можно все-таки выделить характерную черту ООП — это семантика передачи сообщений. Остальное все в тумане...

Почему такой, казалось бы простой вопрос не имеет однозначного ответа?

Потому что ответ лежит на поверхности, поэтому его никто не видит.

Ответ заключается в том, что любая другая парадигма — есть частный случай ООП, в том смысле, что может быть выражена в терминах ООП, но не наооборот. Само название ООП тут не слишком удачно, кстати, поскольку объект в ООП — это скорей субъект. Карл Хьюитт придумал гораздо более подходящее название — акторы.

Именно в этом и кроется разгадка того, почему так трудно отделить ООП от иных парадигм.

Простой пример. Возьмем подстановочную модель, ака ФП. Центральным объектом данной парадигмы является функция. С точки зрения ООП, функция — это актор. Например, у нас есть функция, которая имеет такой вид sum(1, 2) // 3 Мы могли бы выразить это как-то так

Sum = new Function
Sum.code = a + b
theSum = new Sum 
theSum.setArguments(a: 1, b: 2)
theSum.call

Это некоторая декомпозиция, которая нам показывает, что функция — это просто сахар объекта.

То есть, грубо говоря, если мы берем некоторую полноценную ООП/Акторную семантику, и ограничиваем ее выразительные возможности, мы получаем на выходе другую парадигму. Такие вот дела:)

 ,

somequest
()

Вопрос про обобщенные функции

Пишут, что это необычайно мощная весчь. Только я вот чего не пойму. Что если я вместо такого

(defgeneric collide (x y))

(defmethod collide ((x asteroid) (y asteroid))
  ;;астероид сталкивается с астероидом
  )

(defmethod collide ((x asteroid) (y spaceship))
  ;;астероид сталкивается с космическим кораблем
  )
;;......
Напишу просто функцию, что-то вроде
(define (collide x y)
 (cond
   ((and (instance? x asteroid) (instance? y asteroid)) 
     ("астероид сталкивается с астероидом"))
   ((and (instance? x asteroid) (instance? y spaceship))
     ("астероид сталкивается с космическим кораблем"))
 ;;;..............
       ))
; И вызываю так
(collide asteroid asteroid)

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

Полиморфизм (времени выполнения) это сердце ООП. В этой связи, как ни странно, квинтэссенция ООП это мультиметоды

.

Я не спорю, я, вероятно, чего-то не понимаю. Пока я вижу только небольшой сахарок над «функция + ветвление». Хотелось бы увидеть пример применения, который не может быть выражен банальной конструкцией типа «функция + ветвление».

Иными словами, в чем сила?

Спасибо.

 , , ,

somequest
()

Как можно отправить команду из консоли в иксы?

Как то надо сдеать, чтобы можно было запущенным иксам (без оконного менеджера) отправить команду на запуск в них какого-либо графического приложения. Возможно ли такое?

 , ,

somequest
()

Минималистичная конфигурация иксов

Как можно запустить иксы, чтобы не запускать вообще никакой менеджер окон, а запустить один только веб-браузер? Возможно ли это? Или, может быть, вообще без иксов?

Короче нужна минимальная конфигурация. Единственное условие — чтобы запустился браузер. Больше ничего не надо, и, по возможности надо все исключить.

Спасибо.

 , ,

somequest
()

Как там дела у арка?

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

Данный персонаж нное колво лет назад начал пилить свой более лучший лисп. Только что то особо не слыхать, что там с этим самым лиспом? На какой стадии? Ведь пилится то уже давно, за это время язык мог уже родится и здохнуть. Никакого резонанса вообще не наблюдается. Че за фигня?

К тому же, многие считают (в частности я слышал это мнение от Стива Декорта), что этот *диалект* мало чем отличается от схемы, вообще говоря.

Это фейл, или че там с ним на самом деле то происходит?

Перемещено Pinkbyte из development

 

somequest
()

Вопрос по наследованию в питоне

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

Object.prototype.foo = () => console.log(this.a)

o = {a: 1}
o.foo() // undefined

Мне не совсем понятно, как же в питоне тогда организуется наследование делегированием, если там нет динамического связывания? Как строятся сабклассы? Что, все копируется чтоли? Каждый сабкласс содержит в себе все экземпляры предков?

Питон же называют «динамическим» языком обычно. В каком смысле тут употребляется слово динамический? Получается, что не в том смысле, что в нем есть динамическая диспетчеризация, а в том смысле, что там динамическая типизация? Это же, по сути подмена понятий, не? Все смешалось в одну кучу.

И еще вопрос. Как при такой модели питону удается избежать оверхеда по памяти? По идее, он же должен отжирать не меньше Java или Хаскеля при такой модели? Или есть какие-то секреты? Как там все работает изнутри?

 ,

somequest
()

Совместить утиную типизацию с динамическими типами

Вынашиваю идеи для своего великого езыка, который может и никогда не родится, однако, мечтать иногда не вредно:)

Вот такая мысль. у нас есть утиная типизация, но она пользуется обычно в такой вот форме fu(someType), а не в такой вот someType.fu. То есть, если фанкол, утиная типизация, а если, посылка сообщения — обычно ошибка — объект не отвечает на сообщение, или что-то в этом роде, как вариант — форвардинг.

В JS, например, мы можем вызвать someObject.someMethod.call(anotherObject), это вполне работает.

Это наводит на такую мысль. А зачем вообще привязывать методы к типам/классам/объектам?

Первое — это полиморфизм, тут все ясно.

Если это отбросить, то что еще?

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

Второе соображние — производительность. Когда методы привязаны к объектам, лукапы короче.

Однако же, нет ничего такого, что является принципиальным препятствием сделать так, что объект будет обрабатывать сообщение «утиным» образом, даже в том случае, когда оно заранее не определено как его метод/свойство.

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

Тут возникает другой вопрос. А почему бы просто не использовать для этого обычные вызова функций. Ответ — синтаксис, прежде всего. Чтобы избежать скобочных вложенностей, они ведь а)отвратительны б)очень плохо подходят для выражения посылки сообщений.

 ,

somequest
()

Вопрос по паттерну «строитель»

Вот по этой статье пытаюсь осиливать

https://ru.wikipedia.org/wiki/Строитель_(шаблон_проектирования)#.D0.A6.D0.B5....

Такая вот заморочка с птичьим языком

Цель Отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления.

Что они тут подразумевают под «представлением»? У нас разве в результате конструирования объекта не получаются разные представления? Что это за хрень вообще — представление?

То есть, исходя из этой цитаты, получается, что без билдера у нас конструирование объекта и его «представление» — это одно и то же что-ли?

Далее

Плюсы позволяет изменять внутреннее представление продукта; изолирует код, реализующий конструирование и представление; дает более тонкий контроль над процессом конструирования.

Ни один из этих пунктов не понятен. Первый — это опять же «представление» — что это такое. Второе — изолирует. Вопрос — изолирует от чего? Третье — в чем конкретно проявляется «более тонкий контроль над процессом конструирования»?

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

Может быть примеры неудачные? В чем на самом деле смысл данного шаблона?

Спасибо.

 , ,

somequest
()

Замена CGI

Я вот юзаю активно такую фигню, это видимо CGI называется, короче смысл в том, что дергаю из основного лупа сервера файлы на выполнение, и, соответственно, отправляю. Очень прикольно и гибко получается. Можно миксовать любое количество языков в одну кучу. Это сейчас считается некомильфо, из-за расходов на системные вызова. Мне, в принципе хватает пока производительности, тормозов, задержек нет никаких, все делается асинхронно. Но я так, на будущее думаю, если вдруг возникнут проблемы с производительностью, можно ведь это все переписать в таком стиле, что вместо скриптов дергать сервера, которые постоянно запущены, и ожидают запроса. Взлетит ли такая технология?

 ,

somequest
()

приоритет поиска исполняемых файлов

Я хотел бы, чтобы поиск велся сначала в моей папке /progarms. Добавил в .bashrc в $PATH PATH="/programs:$PATH",но не получается. Как разрулить? система debian 3.16.7

 , ,

somequest
()

RSS подписка на новые темы