Собрал LFS. Зачем?
Собрал LFS, и уже перешел к Beyond Linux From Scratch, но вдруг остановился. Появились вопросы, Зачем я собираю его? И как это все потом обновлять?
Подумал, может кто есть из лоровских мазохистов, собравших BLFS ?
Собрал LFS, и уже перешел к Beyond Linux From Scratch, но вдруг остановился. Появились вопросы, Зачем я собираю его? И как это все потом обновлять?
Подумал, может кто есть из лоровских мазохистов, собравших BLFS ?
Я не знаток LC, но немного знаком, и возник вопрос: а существуют ли безымянные функции в LC? Ведь, по факту, в LC, каждая функция, четко связана со своим аргументом, через который она передается, а значит, абсолютно каждая функция в LC, имеет свое имя. Однако, безымянные ф-ции, в ЯП, обычно выдаются за фичу LC. Фактически, есть даже устоявшееся значения слова «лямбда», в смысле, «безымянная ф-ция».
Насколько я понимаю, выражение, подобное этому, например:
(define foo ((lambda(x) (lambda(y) (x y)))) (lambda(x) x))
Думал тут на досгуе о сабже, особенно о понимании тезиса о том, что любая система вычислений - есть частный случай модели акторов. Решил подойти именно с этого бока, поскольку поняв, почему рекурсия - это частный случай модели акторов, есть шанс приблизитья к пониманию того, например, почему LC - есть частный случай модели акторов.
Подход, немного сумасшедший, а может и не немного, но тем не менее.
Возьмем избитый факториал. Я решил, что, следует думать о вызывающей функции, как об объекте, посылающем сообщение. Этот объект знает адреса других объектов, функций, а также переменных, которые в данном контексте тоже есть функции-объекты которые имеют адрес(имя). Итак, наш объект посылает сообщение на адрес, по которому находится он сам, а содержание этого сообщения - это просьба отправить сообщение по следующему адресу с соответствующим аргументом. Само по себе утверждение, что объект может отправить сообщение самому себе, является, на первый взгляд парадоксальным, но этот парадокс кажущийся, когда мы, например, делаем запись в своем ежедневнике, мы делаем именно это - отправляем сообщение самому себе в будущем, а если абстрагироваться от времени, то это и будет - самому себе. Во всяком случае, подход этот даже более понятен, чем рекурсивный вызов, когда мы, выражаясь образно, просим схватить руку саму себя, или просим глаз увидеть самого себя. Получивший сообщение объект, соответственно, знает что делать дальше, поскольку сообщение которое он получил, содержит просьбу о вызове следующего объекта, по адресу(имя ф-ции) с полученным аргументом, и так далее по цепочке.
Здесь, наверное, ключом к пониманию является то, что мы проводим четкую границу между именем функции и самой функцией, ее сущностью. Таким образом, это не «принципиально новый способ», а всего лишь, несколько другой взгляд на вещи. Мы можем смотреть на этот процесс просто как на множество объектов (созданных динамически, но это для нас неважно), которые просто посылают сообщения и ждут ответов, это позволяет смотреть на тот же самый процесс, не как на последовательность вызовов, а как на параллельные процессы, происходящие вне времени, как бы одновременно.
Это мое понимание, на данный момент, вопроса: почему рекурсия - это частный случай модели акторов. Возможно ошибаюсь.
Перемещено mono из talks
Тошнит от pascal, около 2-ух месяцев изучаю на нем азы программирования. Хочу начать программировать на языке уровнем пониже. Из известных мне понравился си, но вот спросил у знакомого, а он сказал что си очень сложен. Особенно укаатели, говорил лучше изучать его 3-им или 4-ым по счету. Конечно я понимаю, что с моим багажом знаний я буду быдлокодить по крупному, но программирование мне нравится. Блин так ли он сложен как его знакомый малюет?
Хай. Решил освежить знания, давненько не кодил на цэ. Появился ряд вопросов:
1) Есть ли какие-то годные IDE? Например, у меня программа с кучей файлов. Может ли кто-то собрать мне исполняемый файл нажатием одной кнопки (а-ля Visual Studio)? Без консольной возьни в «g++ -o files files files» и так далее? В общем, не шарю, можно отвечать развернуто, если я чего-то не понимаю. По поводу отладчика отдельный вопрос, задавать страшно.
2) Где лучше почитать про системы автоматической сборки (make, cmake И т.п. или как их там)?
2.2) Где в целом почитать про организацию исходников таким образом, чтобы можно было собрать на любой linux-машине (configure && make && make install)? В win в этом плане совсем не так, там не надо компилять, но и готовить пакет под кучу дистров тоже не надо.
3) Какие принципиальные отличия в реализации «стандартной библиотеки» цэпэпэ между Win и Lin? Последний раз я кодил под Win и, если не ошибаюсь, например, функции в духе getch() в Lin отсутствуют (по непонятной мне причине). Где взять инфу о различиях?
4) Где отдельно почитать про C++ Boost, или как его. Краем уха слышал. Четвертая (последняя) редакция Страуструпа про это расскажет?
Пока все. Планирую пополнять тред вопросами. Тупыми... Вопросами... >;(
Может, кто-нибудь знает, почему в Scheme (и в Racket) не приянто использовать set!, особенно в списках
Например, если мне надо список разделить на два по «выполняется/не выполняется условие», то в CL это будет выглядеть как
(defun split (list pred)
(let ((res1 nil) (res2 nil))
(dolist (l list)
(if (pred l)
(push l res1)
(push l res2)))
(values (nreverse res1) (nreverse res2))))
На Scheme полный аналог
(define (split list pred)
(let ([res1 null] [res2 null])
(for-each (lambda (l)
(if (pred l)
(set! res1 (cons l res1))
(set! res2 (cons l res2))))
list)
(values (reverse res1) (reverse res2))))
Но в учебниках по Scheme пишут, что так писать очень плохо, а надо так:
(define (split list pred)
(define (loop list res1 res2)
(cond
[(null? list) (values (reverse res1) (reverse res2))]
[else
(if (pred (car list))
(loop (cdr list) (cons (car list) res1) res2)
(loop (cdr list) res1 (cons (car list) res1)))]))
(loop list null null))
Помогите понять, в чём смысл?
Сегодня 4 php программиста сказали, что типо С,С++ и тп скоро вымрут и останутся только pyhton,ruby,php,perl, java, JavaScript. Мне вот стало интересно, на что будет похож линукс, если из него выпилить C,C++ и ассемблер. Согласны ли вы с этими программистами, что компилируемые языки программирования не пройдут естественный отбор?
Здравствуйте! «Правильно» ли я выделяю код для для текстовых строк (*s)? Является ли такой способ «экономичным» для хранения массива текстовых данных?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct str_t {
char *s;
double e;
int a,b,c;
long int f;
} *pstr;
const int N=5;
char string_buf[80];
int main(){
pstr=(struct str_t*)malloc(N*sizeof(struct str_t));
int i;
for(i=0;i<N;i++){
scanf("%s",string_buf);
pstr[i].s=(char *)malloc(strlen(string_buf)*sizeof(char));
strcpy(pstr[i].s,string_buf);
};
for(i=0;i<N;i++) free(pstr[i].s);
free(pstr);
return 0;
}
Такой вызывающий топик, а внутри атупизм.
Вопрос: куда сейчас развивается такая наука как CS? Если ее вообще можно считать наукой.
Если нельзя, то сформулирую так: куда движется алгоритмика? В том числе математика, применимая к вычислительным системам, может быть парадигмы яп или еще что-то в этом роде.
Допустим имеем сферического младшего научного сотрудника в тапочках, а что исследовать он не знает. Тоесть, конечно, знает, но не уверен нахрена ему это надо (читай: кто его будет финансировать).
Функциональщину не предлагать, нейросети и графику тоже.
Пресс-служба РАН телеграфирует для !Ъ http://www.ras.ru/news/shownews.aspx?id=c4be227a-9317-4703-945c-3be2bff42905#...
Для Ъ:
В последние месяцы, начиная с конца июня, власти России занимались уничтожением Российской академии наук, главной научной организации страны. Академия не сдалась без борьбы, но, как легко было предположить, проиграла. При этом выяснилось неожиданное для академического сообщества обстоятельство — наука и ее судьба в России практически никого за пределами этого сообщества не интересуют. Борьба за академию происходила при полном равнодушии общества.
«Была ли Академия наук сколько-нибудь общественно значимой организацией?» — спрашивал Быков. И отвечал: нет, поэтому ее судьба меня не волнует.
реакция на уничтожение РАН в среде «прогрессивной общественности»: «Зажравшиеся академики защищают свою недвижимость и привилегии, не считаю нужным им в этом помогать».
Зачем России наука и ученые?...Сейчас, спустя почти 20 лет, это поколение с его отношением к интеллекту и науке выросло и определяет лицо страны, оно доминирует и во власти, и в оппозиции. Так что власть вполне может поступать с наукой и учеными как захочет: единственное ограничение для нее — это ее собственные экономические и политические интересы и собственные представления о здравом смысле, которые, впрочем, могут сильно отличаться от обычных, как в очередной раз показало внезапное закрытие Российской книжной палаты. Реакция общества в любом случае, похоже, так и будет вялой и равнодушной (закрытие Книжной палаты, кстати, прошло почти незамеченным): ведь это личное дело этих умников, никто их не просил становиться академиками.
Автор — Аскольд Иванчик, член-корреспондент РАН, научный руководитель отдела сравнительного изучения древних цивилизаций Института всеобщей истории РАН, старший исследователь (directeur de recherches) Национального центра научных исследований Франции (Институт изучения древности и средневековья, Бордо)
А линукс тут при том, что я, как правоверный гентушник, на фоне отказа в поддержке моих грантов на этот год, думаю бросить науку и пойти настраивать линукс за деньги.
P.S. «РАН — ненужна» — ненужен.
Так сложилось, что я практически не знаком с ООП языками, но сейчас начал интересоваться ООП. И первое, что обращает на себя внимание - это инкапсуляция.
Собственно, инкапсуляция присутствует неявно и в ФП, например, замыкания - это вариант инкапсуляции. Но ее можно вообще изобразить явно, например:
(define fu (lambda(arg) (if (= arg 'I-am-foo) (bar))))
Однако, я часто наблюдаю, что под инкапсуляцией понимается сокрытие не от программных сущностей, а от самого программиста. Например:
Разные языки по-разному решают вопрос о том, как позволить программистам прятать информацию от самих себя. В объектно-ориентированных языках принцип полиморфизма, принципиального незнания мной того, объект какого класса я вызываю по ссылке (базового или наследника), является краеугольным; и это по-своему хорошо, если проведено последовательно.
What a fuck?!!! Нахрена прятать внутреннюю реализацию от самого программиста, а не от программных объектов?
Который раз уже наблюдаю стадо ушлепков, которые начинают доказывать, что программисту нужна линейная алгебра, дискретка, матан и т.п.
Бедный вопрошающий бежит в библиотеку, хватает книжки по линалу, матану, дискретке и тут же получает фэйл. Там он видит всякие жоские задачи и прочие иероглифы. В результате он думает, что он тупой и никогда не станет настоящим программистом.
А самое интересное то, что из этого линала нужно от силы две главы. Как и из матана. Про дискретку то же самое. Вместо изучения основных простейших алгоритмов начинается траханье мозгов дизъюнктивными формами и прочим. И в результате снова фэйл.
А причина проста - все эти советчики сами из всего линала только и знают эти самые две главы, и это в лучшем случае! А в основном у них представление об этом «слышал звон, да не знаю где он». На этом их представление что о линале, что о матане или дискретке заканчивается.
Но, млеа, надо же ощутить себя крутым программистом!
Выдохнул.
Вот, говорят, что без знаний математики хорошим программистом не стать. Но в то же время не уточняется какую область из этой науки необходимо знать программисту. Я честно говоря по математике имел твердую «4» до 5 класса, а потом из-за препода маразматика на нее забил, ибо непонятны были ее объяснения. Вообще планирую заниматься разработкой программного обеспечения, а точнее программ для работы с веб и т. п камерами. Вот какую математику необходимо знать дискретную, комбинаторику. По совету знакомого открыл Кнута, а через 20 минут закрыл, нихрена не понял. Открыл «Дискретную математику для программистов» от Хаггарти, какие-то непонятные символы там. Вижу греческие буквы, латиницу, а их предназначение непонятно. Эх, возможно я дебил! Ладно возвращаясь к теме, какие разделы математики нужны программисту?
Я уже год изучаю программирование, пишу в основном на Pure C и Perl. Очень нравятся мне эти языки, но при написании кода всегда придерживаюсь процедурного и императивного стиля программирования. Хочется попробовать другую парадигму, вот подумал изучать ООП. Нашел учебники, а в них все примеры на Java или C#. Есть ли учебники по ООП без привязки к конкретному языку программирования?
Есть у меня некоторые идейки. Основная идея - простота и прзрачность, ну и, я бы сказал, несколько иной, концептуально, подход, но это сложная тема, не влезает в рамки топика.
Тащемта, основные наброски, можно сказать рабочий прототип, уже готов, я его реализовал на js. Основная проблема в скорости. Думаю, логично было бы написать его на асме. Но проблема в том, что как сам асм, так и архитектуру, я знаю чуть меньше чем никак. Это печально.
Однако, для реализации мне хватило бы некоего подобия лисповских car и cdr, и возможности их модификации. Т.е. Нужно, всего-навсего, делать ссылки из какой либо единицы памяти на другие единицы, условно говоря, с атома на список атомов, и далее по цепочке, прошу прощения, за корявую терминологию.
Возможно ли такое реализовать, пусть не идеально, не эффективно, но чтоб хоть как-то работало, не изучая премудростей архитектуры, и, особенно, хексов и прочего ч-бства. Если да, то дайте пожалуйста направление, куда нужно копать.
Благодарю за ответы.
Появилось немного свободного времени, подумал поконкретнее изучить Ruby вместе с рельсами для производства всякой мелкой/средней нетривиальщины от заказчиков, а то от пхп фреймворков устал, а питон с джангой с которым я закрыл пару проектов как-то меня не __улыбают__, не лежит душа.
Но вот есть еще модная Scala вроде как, библиотек всяких заимствовать из явы можно много, в тренде и веселья полный дом.
Может ее? пугает только постоянная отсылка к Java библиотекам, придется рано или поздно их читать хотя бы, похожая история с coffeescript/javascript, где я в итоге сдался и вернулся к старому доброму уродливому javascript, а то написание в одном и дебаг в другом (да и все библиотеки на яваскрипте) это ужас
Как там с фреймворками на Scala? что-то типа рельс есть? Play Framework читал вбросы шаблоны компилит по минуте после каждого исправления или это вранье?
Scala это только для парней из ява-мира или это миф?
p.s. важный фактор это скорость разработки, если не самый важный :)
Перемещено mono из talks
Все вечер добрый. Господа всея знающие, помогите пожалуйста разобраться с проблемой: есть код tty.h
#ifndef __TTY_H__
#define __TTY_H__
#include <types.h>
#define VIDEO_WIDTH 80 //ширина экрана
#define VIDEO_HEIGHT 25 //высота экрана
#define VIDEO_SIZE VIDEO_WIDTH * VIDEO_HEIGHT * 2
#define VIDEO_RAM 0xb8000 //адрес видеопамяти
void init_tty();
extern void set_text_attribute(ui8);
extern void clrscr();
extern void putchar(ui8);
extern void puts(ui8*);
#endif // __TTY_H__
#include <tty.h>
volatile static ui32 cursor; //положение курсора
volatile static ui8 attribute; //текущий аттрибут символа
//Инициализация tty
void init_tty() {
cursor = 0;
attribute = 3;
}
//Смена текущего аттрибута символа
extern void set_text_attribute(ui8 c) {
attribute = c;
}
//Очистка экрана
extern void clrscr() {
ui8 *video = VIDEO_RAM;
//attribute = 0x35;
for( ui32 i = 0; i < VIDEO_SIZE; i += 2 ) {
video[ i ] = attribute;
video[ i + 1] = ' ';
// video[ i ] = 0x0f;
// video[ i + 1] = attribute;
}
cursor = 0;
}
//Вывод одного символа в режиме телетайпа
extern void putchar(ui8 ch) {
ui8 *video = VIDEO_RAM;
ui32 i;
switch( ch ) {
case '\n': //Если это символ новой строки
cursor += VIDEO_WIDTH;
cursor -= cursor % VIDEO_WIDTH;
break;
default:
video[ cursor * 2 + 1 ] = ch;
cursor += 1;
break;
}
//Если курсор вышел за границу экрана, сдвинем экран вверх на одну строку
if( cursor > VIDEO_WIDTH * VIDEO_HEIGHT ) {
for( i = VIDEO_WIDTH * 2; i <= VIDEO_WIDTH * VIDEO_HEIGHT * 2 + VIDEO_WIDTH * 2; i++ ) {
*( video + i - VIDEO_WIDTH * 2 ) = *( video + i );
}
cursor-=VIDEO_WIDTH;
}
}
//Вывод строки, заканчивающейся нуль-символом
extern void puts(ui8 *s) {
init_tty();
while(*s) {
putchar(*s);
s++;
}
}
Обе глобальные переменные (cursor и attribute) ну никак не хотят менять свои значения, в коде функции clrscr (закоментил) производил проверку присвоения значения переменной, но на экран все равно попадает '\0'
компилю с такими флагами:
-O0 -fomit-frame-pointer -ffreestanding -finline-functions -nostdinc -fno-builtin -nostdlib -std=c99
з. ы. Ах да, как вы уже наверное догадались, все это делается в программе, запущенной из-под самописного загрузчика, тестирую на vmware
В институте узнал про язык программирования Lisp. До этого писал только на Паскале и C. Оказывается, там весьма много диалектов: ISLISP, Common Lisp (как я понял, эти 2 устаревшие), Scheme + новые, такие как Clojure, newLisp, Arc. Какой мне выбрать для написания десктопных приложений (я бы хотел сделать свой инструмент для Computer Aided Translation, что-то сравнительно простое на gtk)? Хотелось бы так, чтобы надо было несильно переучиваться, что-то похожее на Pascal.
Мне его порекомендовали за удобство разработки на нём (хотя я не очень сильно понял, в чём разница между разработкой на C и на лиспе).
Основная работа - научная деятельность в life science, в том числе и биоинформатика, потому встаёт задача автоматизации обработки научной периодики. Дополнительно есть прикладные задачи, требующие стат. анализа текстов, потому появилась необходимость освоения методов Text Mining - потому вопрос: с чего начать изучение?
Я тут задумался, одной из фишек CLOS является динамичность: возможность в рантайме изменять методы обобщённых функций, слоты классов, перестраивать иерархию наследования, изменять классы ранее созданных объектов. Я вполне могу представить, как это всё используется в интерактивном режиме в процессе разработки, но что-то юз-кейсы, когда самой программе может это понадобиться, ограничиваются только какими-то несбыточными фантазиями про ИИ.
Является ли эта динамичность намеренно реализованной киллер-фичей собственно CLOS или это просто побочный эффект образо-ориентированного подхода к разработке на Common Lisp?
← назад | следующие → |