LINUX.ORG.RU

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

Статья «What does Rust's „unsafe“ mean?»

 , ,

Huon Wilson выложил в своем блоге небольшую статью о unsafe в языке Rust «What does Rust's „unsafe“ mean?».

Обсуждения в реддите: в /r/rust и в /r/programming

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

Кстати, в статье есть ссылки на интересную серию статей из блога LLVM про неопределённое поведение часть 1 часть 2 часть 3. Как по мне, из них интереснее всего третья часть, где говорится о том, почему нельзя просто так взять и выдавать ошибку компиляции при любом UB.

ozkriff
()

Шарп vs. Джава

 , ,

Товарищ Indaril_Shpritz предложил создать топик «Что лучше: C# или Java».
Товарищ считает, что C# «технически лучше». Я думаю, что он имеет ввиду всякие проперти и синтаксический сахар (типа foreach).
Я считаю, что Java лучше, ибо JVM есть для любой кофемолки, есть процессоры с аппаратной поддержкой байт-кода Java, Java можно даже скомпилировать в native code (правда, с трудом). А весь этот синтаксический сахар не нужен, ибо не Ъ, а дальнейшая судьба Mono очень неоднозначна.
Кто прав?

CYB3R
()

Преимущества функционального программирования

 , ,

Чем оно лучше/хуже императивного программирования в плане разработке ПО? Какие крупные комплексы ПО были написаны (созданы) с использование этой парадигмы начиная с ее зарождения?

Перемещено mono из talks

int13h
()

Создание образа с нуля

 ,

Как создать с нуля образ с полной иерархией объектов, используя лишь примитивы SqueakVM? Как с ним работать, изменять, сохранять его?

cast yoghurt

buddhist
()

лямбды в новых язычках - PR или реальные полезняшки?

 , ,

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

Ну что есть lambda в каком-нибудь lisp я представляю и даже понимаю зачем оно и как им пользоваться. В lisp'е. А что имеется ввиду под «лямбдой» например, в C#?

Хотелось бы увидеть не только цитаты из википедии, а простенькие примеры того, как эта лямбда сильно упрощает жизнь, удобство даёт и всё такое. В виде примера кода, разумеется, с пояснениями почему тут именно лямбда крута и без неё некузяво.

Только чтобы это не было аналогом перлового однострочника типа

perl -e 'print sub{ $_[0] + $_[1]; }->(1,2)."\n";'
ибо в этом никаких новшеств и преимуществ нету.

Просто сдаётся мне что «лямбда» в нынешних сишарпах это пиарное название допотопных безымянных функций которые даже в перле есть и никаких новшеств в этом на самом деле нету.

Stanson
()

Многоядерность vs Многопроцессорность

 

в чем разница между многопроцессорной системой и многоядерной системой с точки зрения синхронизации?

есть ли в многоядерном процессоре специальные механизмы, ускоряющие синхронизацию между ядрами по сравнению со синхронизацией между процессорами?

Indaril_Shpritz
()

Почему в Qt не рекомендуют использовать исключения?

 

Волею случая сейчас делаю один проект на Qt, после Java хочется жирненько обмазать метод исключениями, а тут опаньки и такое вот написано, почему так?

http://qt-project.org/wiki/Coding-Conventions

Перемещено mono из talks

OldWiseCat
()

GUI в IDE, а остальной код на Clojure, как?

 , , ,

Подскажите пожалуйста, можно ли использовать визуальные редакторы графического интерфейса предназначенные для Java (такие как IntelliJ IDEA например) для построения GUI, но логику приложения и остальной код писать на Clojure?

Мне хотя бы простейший пример: вот создали в GUI редакторе кнопку, сохранили все, а уже на Сlojure создали обработчик события для этой кнопки. Т.е. я не хочу руками в коде этот графический интерфейс создавать, а создать его в IDE, а уже потом с ним взаимодействовать из Clojure. Как то так, ну или хотя бы может в интернете где то об этом написано, я не нашел(

Буду очень благодарен за помощь, спасибо.

elf80lvl
()

VIM как IDE для ______

 

Какие плагины вы используете, чтобы превратить vim в IDE для ________ (вписать язык)?

Интересует:

  1. Автодополнение. В частности, умное семантическое.
  2. Форматирование. В частности, автоматическое при сохранении буфера.
  3. Проверка компилируемости кода для компилируемых ЯП, проверка корректности для интерпретируемых ЯП.
  4. Статический анализ кода (lint). Предупреждения о неиспользуемых переменных. Предупреждения о неканоничном форматировании кода. И т. д.
  5. Просмотр документации к функции, методу и т. д. под курсором.
  6. Переход к определению функции (метода, класса и т. д.) под курсором.
  7. Рефакторинг (переименование функций, методов, классов и т. д.).
  8. Сниппеты.
  9. Компиляция/запуск. Точки останова. Запуск тестов.
  10. Заливка кусков кода на сайты для обмена, вроде gist.github.com или play.golang.org.

И общее для всех языков:

  • Вывод списка / переход к меткам TODO, XXX, FIXME и т. д.
  • Go anywhere (CtrlP, Command-T или FuzzyFinder?)

Ссылки:

VIM как python IDE.

meskalin
()

Могут ли быть строгие ФП языки тьюринг-полными.

 

Я имею в виду те, что называются total. Эти язычки имеют одно интересное свойство — проверку на завершаемость. Например, нельзя бесконечную рекурсию. Уже только поэтому, они, как минимум, не эквивалентны МТ. Особенно интересует Agda.

ЗЫ Такой «алгоритм» как event-loop получается, тоже нереализуем на них?

anonimous
()

Тьюринг-полнота — что это?

Попадаются постоянно на глаза фразы «этот язык тюринг-полон поэтому бла-бла-бла». Вот например, есть такая шняга как комбинаторная логика и родственное ему ski-исчисление. Я читал лично его отца Шойфенкеля, который утверждал, что сама по себе ski избыточна, достаточно одной функции, чтобы выразить все. В то же время, комбинаторная логика эквивалентна LC, которое, в свою очередь, тьюринг-полное. Так что же тогда получается, что для тьюринг-полноты достаточно одной функции?

Как вообще понять, «визуально», является ли язык тьюринг-полным или нет? Какими необходимыми свойствами он должен обладать, для того чтобы называться так?

normal
()

Quote и lambda

 

А не задумывались ли вы, что quote и lambda по сути ничем не отличаются. Я тут сразу отбрасываю математический смысл, лексическую область и прочее, это непосредственно к лиспу отношения не имеет. Например

(define a (quote 1))
(define a (lambda() 1))

(eval a)
(a)
Тут одна и та же семантика. Просто задержка вычислений. Разница в том, что quote принимает только 1 аргумент. Я давно думал об этом, с помощью лямбд можно эмулировать поведение quote. В picolisp, собственно, и нет разницы, там lambda вообще выкинута. Понятное дело, что сейчас, в связи с модой на ФП, с лямбдой связывают кучу всяких заклинаний. Но ведь вплоть до схемы этой всей ФП-лабуды в лиспах не было. Получается, что Маккарти ввел лишнюю сущность в язык. Этот вопрос где нибудь обсуждается? Кто-нибудь видел какие-нибудь бумаги? Может быть, это было простой ошибкой дизайна, которую не успели выпилить и она исторически прижилась?

phill
()

Снова макросы Racket

 ,

Пытаюсь использовать макрос

(define-syntax-rule (with-template ([var ...] [form ...] ...) body ...)
  (begin (define-syntax-rule (inner var ...) (begin body ...))
         (inner form ...) ...))

для описания пачки однотипных макросов

(with-template 
 ([src dst]
  [define-gi define-gi*]
  [define-gtk define-gtk*])
(define-syntax (dst stx)
  (syntax-case stx ()
    [(dst id params ...)
     (let ([new-id (string->symbol (string-replace (symbol->string (syntax-e #'id)) "-" "_"))])
       #`(src id params ... #:c-id #,new-id))])))

Получаю очень странную ошибку main.rkt:38:20: syntax: no pattern variables before ellipsis in template at: ... in: (begin (define...syntax-e (syntax id))) "-" «_»)))) (quasisyntax (src id params ... #:c-id (unsyntax new-id))))))))

При том, что

(define-syntax (define-gtk* stx)
  (syntax-case stx ()
    [(define-gtk* id params ...)
     (let ([new-id (string->symbol (string-replace (symbol->string (syntax-e #'id)) "-" "_"))])
       #`(define-gtk id params ... #:c-id #,new-id))]))
работает прекрасно

Что я ещё не понял про рэкетовские макросы?

monk
()

Глобальное состояние в ФП

 ,

А правильно ли я понимаю, что под «отсутствием состояния» в ФП понимается только отсутствие состояния переменных. У самого вычислителя, есть глобальное состояние, он в каждый момент времени находится в состоянии одной из редукций выражения, подобно тому, как машина Тьюринга в каждый момент вычисления «обозревает» строго определенную ячейку, на которой находится головка? Из этого следует, что ФП вычислитель относится к классу «Global State Machine» и у него, разумеется, ЕСТЬ глобальное состояние?

avtoritetniy-expert
()

Дейкстра и стек

 

Почему Дейкстра был таким горячим поклонником стеково-ориентированных вычислений? Ведь это же отвратительно, если у нас нет GOTO, или, хотя-бы, его огрызка — RETURN, нам (машине) приходиться вычислять нафиг не нужные ветки. Что в этом хорошего то может быть?

avtoritetniy-expert
()

Литература по компиляторам

Что хорошего может посоветовать почитать ЛОР? Нужно, в первую очередь, для общего развития, поэтому хотелось бы, чтобы рассматривались различные парадигмы. Пока присматриваюсь к «Modern Compiler Design» - если кто читал, поделитесь отзывами.

runtime
()

Значимость Homoiconicity?

Мучает вопрос: существуют ли какие либо фундаментальные преимущества у homoiconic languages перед non-homoiconic languages?

runtime
()

Си

#include <stdlib.h>
#include <stdio.h> 

int main(int argc, char *argv[]) {

char *num = «5555»; 	
	
	if (argc != 2) {
	printf(«No param\n»);
		exit(0);
	}
	
	if (argv[1] != num) {
	printf(«Fail num %s\n»,num);
	printf(«Fail arg %s\n»,argv[1]);
		exit(0);
	}

...
}

Подскажите, почему сравниваются два одинаковых значения, но определяются, как - неодинаковые!

Вывод программы:

Fail num 5555
Fail arg 5555

anonymus123
()

А бывает ли в Common Lisp объектная модель на сообщениях?

 

Как в ruby/smalltalk.

Или умерла вместе с Lisp machines/Genera/Flavors?

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

Ну и, в том же Racket, классы/объекты как раз работают на сообщениях.

monk
()

Помогите развить новую концепцию ЯП

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

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

Единственный минус - возможно большой размер программ. Но если так подобрать базис разложения, то всё будет мало весить - ведь записать надо будет не сами данные, а лишь «координаты» в этом базисе. Понял это ещё с уроков геометрии - там делается то же самое, но с векторами

esandmann
()